将自己的驱动编译进内核

在学习android驱动开发时,遇到将word_count驱动编译进内核的问题。按照书籍步骤操作后,驱动未能在模拟器的/dev下出现。发现驱动注册为misc设备,将代码移动到drivers/misc目录并相应修改Kconfig和Makefile后,成功编译并在模拟器中看到wordcount设备。测试驱动需要给予设备文件777权限。
摘要由CSDN通过智能技术生成

最近在学习android驱动开发,主要是参考李宁老师的《Android深度探索——HAL与驱动开发》。李宁老师讲的很好,按照书中的叙述,基本都能够跟着做下来,学到了很多。但是在第一个驱动程序—统计单词个数—中,在将word_count驱动编译进入内核实现自动加载的时候遇到了问题,经过思考找到了自己的解决方案,在此记录一下。

声明:可能是我的某些步骤有错,所以没能够按照书的步骤走下去,希望大牛指点。

首先是问题的情况:

按照书中所说

1、将word_count.c文件放到<Linux内核目录>/drivers/char目录中。

2、修改Kconfig文件


  打开<Linux内核目录>/drivers/char/Kconfig文件,找到endmenu,并在endmenu前面添加如下代码。

config WORD_COUNT

  bool "word_count driver"

  help

  This is a word count driver. It can get a word count from /dev/wordcount

3、修改Makefile文件


  打开<Linux内核目录>/drivers/char/Makefile文件。找个位置添加如下内容

obj-$(CONFIG_WORD_COUNT)      += word_count.o


4、设置.config文件


 .config通过make menuconfig命令在菜单中配置。进入Linux内核顶层目录(<Linux内核目录>)。然后执行make menuconfig命令显示配置菜单,并进入“Device Drivers”>“Character devices”子菜单,找到“word_count_driver”菜单项,按空格键将“word_count_driver”菜单项前设置成星号(*)。然后退出配置界面并保存所做的修改。


5、编译Linux内核


  进入<Linux内核目录>目录,执行下面的命令编译Linux内核。
  

# make


然后用模拟器加载刚才生成的内核(4.1是我的虚拟机的名字)

emulator -avd 4.1 -kernel <Linux内核目录>/arch/arm/boot/zImage

说是可以通过adb shell在/dev下面看到wordcount这个设备。

我照着这个做的没有提示什么问题,但是在模拟器的/dev下面死活看不到wordcount这个设备。试了好多方法,比如修改文件名称啊,make clean 然后重新编译啊,还是没有解决。

突然看到<Linux内核目录>/drivers这个目录下面有char还有个misc,想起来编写word_count.c,在设备注册的时候有是用的下面一句话

ret=misc_register(&misc);


也就是说注册是时候wrodcount这个驱动是按照misc设备注册的,是不是应该将word_count.c放到<Linux内核目录>/drivers/misc下面来做上面的操作。

于是把以上的步骤类比放到<Linux内核目录>/drivers/misc目录下面来做。如下

1、将word_count.c文件放到<Linux内核目录>/drivers/misc目录中。

2、修改<Linux内核目录>/drivers/misc/Kconfig文件。

3、修改<Linux内核目录>/drivers/misc/Makefile文件。

4、在<Linux内核目录>,运行

make menuconfig


进入“Device Drivers”>“Misc devices”子菜单,找到“word_count_driver”菜单项,按空格键将“word_count_driver”菜单项前设置成星号(*),退出并保存。

5、进入<Linux内核目录>目录,编译Linux内核。

编译完成,加载到虚拟机,进入/dev下就可一看到wordcount这个设备了。

要是执行书中之前叙述的用原生C和用NDK以及直接用java代码操作设备文件对wordcount进行测试,需要修改下wordcount的权限为777

root@android:/dev # chmod 777 wordcount


或者

# adb shell  chmod 777  /dev/wordcount


然后可以看到测试成功。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值