《android深入探索》第六章心得

看了本书第六章,我学到了:

  1. linux系统下每个驱动都映射成一个文件(设备文件/驱动文件),都保存在/dev目录下。回掉函数的功能是使linux驱动能响应应用程序,使设备文件和应用程序交互的接口。

 

  1. 编写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

  1. 编写统计单词个数的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

  1. 测试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 (在之前要提前赋予访问设备的权限)

  1. 使用eclipse开发和测试linux驱动程序:

①   Eclipse开发:建立C工程——建立C源码文件链接——设置include路径——编译linux驱动

②   测试linux驱动:导入test.c文件——设置include路径——建立Target——Build工程——运行测试程序

 

posted @ 2016-06-05 20:47  Chen-qiujin  阅读(158)  评论(0编辑  收藏  举报