《android深入探索》第六章心得
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《android深入探索》第六章心得相关的知识,希望对你有一定的参考价值。
看了本书第六章,我学到了:
- linux系统下每个驱动都映射成一个文件(设备文件/驱动文件),都保存在/dev目录下。回掉函数的功能是使linux驱动能响应应用程序,使设备文件和应用程序交互的接口。
- 编写linux驱动程序(大体框架):
① 装载驱动:module_init() 卸载驱动:module_exit()
② 注册设备文件:misc_register() 注销设备文件:misc_deregister()
③ 指定与驱动相关信息:MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏。
④ 指定回掉函数:通过事件触发各回掉函数:open/read/write/icntl/close等
⑤ 编写Makefile文件:修改目标及路径及交叉编译工具
⑥ 编译linux驱动程序:make
⑦ 安装linux驱动:insmod/modprobe
卸载linux驱动:rmmod
- 编写统计单词个数的linux驱动程序(详细):
① 建立存放驱动程序的目录及编写驱动源码文件word_count.c,编写Makefile文件:
- obj-m :=word_count.o
word_count=y “=process.o data.o
② 初始化和退出驱动:module_init(word_count_init)、module_exit(word_count_exit)
③ 指定与驱动相关信息:查看驱动自身信息 #modinfo word_count
MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏信息放在源代码最后。
④ 指定回掉函数:word_count_read()、word_count_write()
由于内核空间程序不能直接访问用户空间数据,所以在两个函数中分别使用copy_to_user()、copy_from_user()实现内核与用户空间数据的交互。
⑤ 编译驱动源码:#make –C (linux内核头文件目录) M=(驱动程序所在目录)
编译完成后生成linux驱动模块文件word_count.ko
⑥ 安装linux驱动:#insmod word_count.ko
查看是否安装成功:# lsmod | grep word_count
卸载linux驱动:#rmmod word_count
查看linux驱动输出的日志信息:#dmesg | grep word_count | tail –n 2 或#cat /var/log/syslog | grep word_count | tail –n 2
- 测试linux驱动:
① 在虚拟机中测试:
编写一个测试程序(test.c),
#gcc test.c –o test
#./test
终端中查看测试结果
② android模拟器中测试:
进入安卓模拟器goldfish中配置linux内核,再#make menuconfig 进入设置界面将第二项选中,再回车进入子菜单选中前三项,保存退出。最后重新编译linux内核。
执行build.sh脚本完成对驱动的编译、上传、安装,再进入android模拟器终端使用“echo”、”dmesg“测试驱动并查看结果。
③ 使用Android NDK测试:
启动模拟器,
#emulator –avd myavd –kernel /root/kernel/goldfish/arch/arm/boot/zImage
④ 使用java代码直接操作设备文件测试。
⑤ 使用S3C6410开发板测试:
重新编译test.c文件,将编译好的test源码上传给开发板,测试方法与android模拟器类似。
在Eclipse中重新编译android NDK程序即可在S2C6410开发板上运行。
在S3C6410开发板中使用java代码测试。
⑥ 将驱动编译进linux内核测试
将源码(word_count.c)放到<linux内核目录中>/drivers/char目录
修改Kconfig>文件,在endmenu前添加:
config WORD_COUNT
bool “word_count driver“
help
This is a word count driver.It can get a word count from /dev/wordcount
修改Makefile文件,插入:obj - $(CONFIG_WORD_COUNT) += word_count.o
用菜单项设置.config文件:#make menuconfig 选择“Device Drivers”-“Character devices”-“word_count_driver”
编译linux内核:进入/root/kernel/goldfish,执行#make (在之前要提前赋予访问设备的权限)
- 使用eclipse开发和测试linux驱动程序:
① Eclipse开发:建立C工程——建立C源码文件链接——设置include路径——编译linux驱动
② 测试linux驱动:导入test.c文件——设置include路径——建立Target——Build工程——运行测试程序
以上是关于《android深入探索》第六章心得的主要内容,如果未能解决你的问题,请参考以下文章