九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 5488|回复: 2
打印 上一主题 下一主题

x4412&ibox项目实战16-将hello x4412驱动编译成模块

[复制链接]
跳转到指定楼层
楼主
发表于 2014-9-26 16:10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在内核根目录执行make menuconfig,进入Device Drivers-> Character devices菜单界面,找到hello X4412 driver配置选项,按空格键将它配置成模块[M],保存退出。
执行如下指令,保存配置好的内核配置文件:
  1. 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”指令来加载和卸载驱动了。
  1. [root@x4412 mnt]# insmod hello-x4412.ko
  2. [   46.564020] hello,x4412!
  3. [root@x4412 mnt]# lsmod
  4. Module                  Size  Used by    Not tainted
  5. hello_x4412              628  0
  6. [root@x4412 mnt]# rmmod hello-x4412.ko
  7. [   56.572305] Goodbye,x4412!
  8. [root@x4412 mnt]# lsmod
  9. Module                  Size  Used by    Not tainted
  10. [root@x4412 mnt]#
复制代码
       从上面清单可以看出,当加载模块后,使用lsmod指令可以查出当前被加载的模块,当我们卸载后,使用lsmod指令将查不到对应的模块了。事实上,lsmod命令是通过读取/proc/modules文件来实现的:
  1. [root@x4412 mnt]# insmod hello-x4412.ko
  2. [  426.168724] hello,x4412!
  3. [root@x4412 mnt]# lsmod
  4. Module                  Size  Used by    Not tainted
  5. hello_x4412              628  0
  6. [root@x4412 mnt]# more /proc/modules
  7. hello_x4412 628 0 - Live 0xbf008000
  8. [root@x4412 mnt]# rmmod hello-x4412.ko
  9. [  447.343765] Goodbye,x4412!
  10. [root@x4412 mnt]# more /proc/modules
  11. [root@x4412 mnt]#
复制代码
       值得注意的是,在加载驱动模块后,在/sys/module目录将会自动生成hello-x4412目录,这里记录驱动的一些相关信息,如驱动版本等。
  1. [root@x4412 hello_x4412]# pwd
  2. /sys/module/hello_x4412
  3. [root@x4412 hello_x4412]# ls
  4. holders/    initstate   notes/      refcnt      sections/   srcversion  version
  5. [root@x4412 hello_x4412]# cat version
  6. 1.0
  7. [root@x4412 hello_x4412]#
复制代码
       这里查询的版本,和我们驱动中加入的模块信息正好匹配。我们还可以使用modinfo指令来查询模块信息。在驱动模块目录下执行modinfo指令可以查询:
  1. [root@x4412 mnt]# modinfo hello-x4412.ko
  2. filename:       hello-x4412.ko
  3. license:        GPL
  4. author:         www.9tripod.com
  5. description:    hello x4412 driver
  6. version:        1.0
  7. alias:          a Character driver sample
  8. srcversion:     9AA89552671F02D3DF6316C
  9. depends:      
  10. vermagic:       3.0.15-9tripod SMP preempt mod_unload ARMv7 p2v8
  11. [root@x4412 mnt]#
复制代码
       使用modprobe指令也可以加载模块。它的功能要比insmod要强大,前面我们做过单个模块使用modprobe加载的实验,现在我们将hello-x4412.kohello-beep.ko两个模块使用modprobe指令加载。
       确保存在/lib/modules/$(uname -r)目录,并将hello-x4412.kohello-beep.ko拷贝到该目录下,执行depmod指令更新module.dep文件:
  1. [root@x4412 3.0.15-9tripod]# depmod
  2. [root@x4412 3.0.15-9tripod]# cat modules.dep
  3. x4412-beep.ko:
  4. hello-x4412.ko:
  5. [root@x4412 3.0.15-9tripod]#
复制代码
       然后在任意目录下执行modprobe指令依次加载两个驱动:
  1. [root@x4412 ~]# ls /lib/modules/3.0.15-9tripod/
  2. hello-x4412.ko*  modules.dep      x4412-beep.ko*
  3. modules.alias    modules.symbols
  4. [root@x4412 ~]# modprobe hello-x4412.ko
  5. [   40.782080] hello,x4412!
  6. [root@x4412 ~]# modprobe x4412-beep.ko
  7. [   48.020448] x4412 beep driver
  8. [root@x4412 ~]#
复制代码
回复

使用道具 举报

沙发
发表于 2015-9-16 15:24:28 | 只看该作者
使用modprobe指令也可以加载模块。它的功能要比insmod要强大
回复 支持 反对

使用道具 举报

板凳
发表于 2015-9-23 22:57:42 | 只看该作者
为什么不能生成.ko文件呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-5-5 20:15 , Processed in 0.019092 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表