最近在学习android驱动开发,主要是参考李宁老师的《Android深度探索——HAL与驱动开发》。李宁老师讲的很好,按照书中的叙述,基本都能够跟着做下来,学到了很多。但是在第一个驱动程序—统计单词个数—中,在将word_count驱动编译进入内核实现自动加载的时候遇到了问题,经过思考找到了自己的解决方案,在此记录一下。
声明:可能是我的某些步骤有错,所以没能够按照书的步骤走下去,希望大牛指点。
首先是问题的情况:
按照书中所说
1、将word_count.c文件放到
2、修改Kconfig文件
打开
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文件
打开
obj-$(CONFIG_WORD_COUNT) += word_count.o
4、设置.config文件
.config通过make menuconfig命令在菜单中配置。进入Linux内核顶层目录(
5、编译Linux内核
进入
# make
然后用模拟器加载刚才生成的内核(4.1是我的虚拟机的名字)
emulator -avd 4.1 -kernel /arch/arm/boot/zImage
说是可以通过adb shell在/dev下面看到wordcount这个设备。
我照着这个做的没有提示什么问题,但是在模拟器的/dev下面死活看不到wordcount这个设备。试了好多方法,比如修改文件名称啊,make clean 然后重新编译啊,还是没有解决。
突然看到
ret=misc_register(&misc);
也就是说注册是时候wrodcount这个驱动是按照misc设备注册的,是不是应该将word_count.c放到
于是把以上的步骤类比放到
1、将word_count.c文件放到
2、修改
3、修改
4、在
make menuconfig
进入“Device Drivers”>“Misc devices”子菜单,找到“word_count_driver”菜单项,按空格键将“word_count_driver”菜单项前设置成星号(*),退出并保存。
5、进入
编译完成,加载到虚拟机,进入/dev下就可一看到wordcount这个设备了。
要是执行书中之前叙述的用原生C和用NDK以及直接用java代码操作设备文件对wordcount进行测试,需要修改下wordcount的权限为777
root@android:/dev # chmod 777 wordcount
或者
# adb shell chmod 777 /dev/wordcount
然后可以看到测试成功。