x4412开发板&ibox卡片电脑项目实战16-将hello x4412驱动编译成模块

在内核根目录执行make menuconfig,进入Device Drivers-> Character devices菜单界面,找到hello X4412 driver配置选项,按空格键将它配置成模块[M],保存退出。

执行如下指令,保存配置好的内核配置文件:

cp .config arch/arm/configs/x4412_android_defconfig

       再在整个源码包根目录下执行./mk –k指令编译内核,这时在kernel/drivers/char/x4412目录下将生成模块文件hello-x4412.ko。

       这时我们就可以使用“insmod hello-x4412.ko”和“rmmod hello-x4412.ko”指令来加载和卸载驱动了。

[root@x4412 mnt]# insmod hello-x4412.ko
[  46.564020] hello,x4412!
[root@x4412 mnt]# lsmod
Module                  Size  Used by   Not tainted
hello_x4412              628  0
[root@x4412 mnt]# rmmod hello-x4412.ko
[  56.572305] Goodbye,x4412!
[root@x4412 mnt]# lsmod
Module                  Size  Used by   Not tainted
[root@x4412 mnt]#

       从上面清单可以看出,当加载模块后,使用lsmod指令可以查出当前被加载的模块,当我们卸载后,使用lsmod指令将查不到对应的模块了。事实上,lsmod命令是通过读取/proc/modules文件来实现的:

[root@x4412 mnt]# insmod hello-x4412.ko
[ 426.168724] hello,x4412!
[root@x4412 mnt]# lsmod
Module                  Size  Used by   Not tainted
hello_x4412              628  0
[root@x4412 mnt]# more /proc/modules
hello_x4412 628 0 - Live 0xbf008000
[root@x4412 mnt]# rmmod hello-x4412.ko
[ 447.343765] Goodbye,x4412!
[root@x4412 mnt]# more /proc/modules
[root@x4412 mnt]#

       值得注意的是,在加载驱动模块后,在/sys/module目录将会自动生成hello-x4412目录,这里记录驱动的一些相关信息,如驱动版本等。

[root@x4412 hello_x4412]# pwd
/sys/module/hello_x4412
[root@x4412 hello_x4412]# ls
holders/   initstate   notes/      refcnt      sections/   srcversion version
[root@x4412 hello_x4412]# cat version
1.0
[root@x4412 hello_x4412]#

       这里查询的版本,和我们驱动中加入的模块信息正好匹配。我们还可以使用modinfo指令来查询模块信息。在驱动模块目录下执行modinfo指令可以查询:

[root@x4412 mnt]# modinfo hello-x4412.ko
filename:      hello-x4412.ko
license:       GPL
author:        www.9tripod.com
description:   hello x4412 driver
version:       1.0
alias:         a Character driver sample
srcversion:    9AA89552671F02D3DF6316C
depends:       
vermagic:      3.0.15-9tripod SMP preempt mod_unload ARMv7 p2v8
[root@x4412 mnt]#

       使用modprobe指令也可以加载模块。它的功能要比insmod要强大,前面我们做过单个模块使用modprobe加载的实验,现在我们将hello-x4412.ko和hello-beep.ko两个模块使用modprobe指令加载。

       确保存在/lib/modules/$(uname -r)目录,并将hello-x4412.ko和hello-beep.ko拷贝到该目录下,执行depmod指令更新module.dep文件:

[root@x4412 3.0.15-9tripod]# depmod
[root@x4412 3.0.15-9tripod]# cat modules.dep
x4412-beep.ko:
hello-x4412.ko:
[root@x4412 3.0.15-9tripod]#

       然后在任意目录下执行modprobe指令依次加载两个驱动:

[root@x4412 ~]# ls /lib/modules/3.0.15-9tripod/
hello-x4412.ko* modules.dep      x4412-beep.ko*
modules.alias   modules.symbols
[root@x4412 ~]# modprobe hello-x4412.ko
[  40.782080] hello,x4412!
[root@x4412 ~]# modprobe x4412-beep.ko
[  48.020448] x4412 beep driver
[root@x4412 ~]#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值