标签:
第6章 第一个Linux驱动程序:统计单词个数
6.1Linux驱动到底是个什么东西
Linux驱动和普通的Linux API没有本质区别,只是使用Linux驱动的方式不同。
Linux驱动的工作和访问方式是Linux的亮点之一。Linux系统将每一个驱动都映射成一个文件。这些文件成为设备文件或驱动文件,都保存在/dev目录中。
由于大多数Linux驱动都有对其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据。
编写Linux驱动最重要的一步是编写回调函数否则与设备文件交互的数据将无法得到处理。
6.2编写Linux驱动程序步骤
第一步 建立Linux驱动骨架(装载和卸载Linux驱动)
第二步 注册和注销设备文件
第三步 指定与驱动相关的信息
第四步 制定回调函数
第五步 编写业务逻辑
第六步 编写Makefile 文件
第七步 编译Linux驱动程序
第八步 安装和卸载Linux驱动
其中前五步是关于如何编写Linux驱动程序,后三步可以使Linux驱动正常工作。
注:这八步不一定按顺序进行,要根据自己需要选择先完成其中的步骤。
6.3第一个Linux驱动:统计单词个数
6.3.1 编写Linux驱动程序前的准备工作
首先输入命令建立存放Linux驱动程序的目录。
6.3.2编写Linux驱动程序的骨架(初始化和退出驱动)
Linux驱动程序的骨架部分,骨架部分是Linux 驱动的初始化和退出函数。代码:书P72
安装 Linux驱动:# insmod word_count.ko
查看word_count是否安装成功:# lsmod | grep word_count
卸载Linux驱动:# rmmod word_count
6.3.3 指定相关程序信息
1、模块作者:使用MODULE_AUTHOR宏指定。
2、模块描述:使用MODULE_DESCRIPTION宏指定。
3、模块别名:使用MODULE_ALIAS宏指定。
4、开源协议:使用MODULE_LICENSN宏指定。
开源协议、GPL协议、LGPL协议、BSD协议、Apache Licence 2.0协议、MIT协议
6.3.4 注册和注销设备文件
使用misc_deregister函数注销设备文件:
extern int misc_register(struct miscdevice * misc);
extern int misc_deregister(struct miscdevice * misc);
6.3.5 制定回调函数
最常用的交互方式就是读写设备文件。通过file_operations.read和file_operations.write成员变量可以分别指定读写设备文件要调用的回调函数指针。
6.3.6 实现统计单词数的算法
这节实现的算法由空格、制表符、回车符、换行符分隔的字符串算作一个单词,该算法同时考虑了有多少个分隔符的情况。
word_count驱动完整的代码:书P84
6.3.7 编译、安装、卸载Linux驱动程序
执行命令:
# dmesg |tail -n 1
#modinfo word_count.ko
查看日志输出信息和word_count驱动模块的信息
6.4 使用多种方法测试Linux驱动
6.4.1 使用Ubuntu Linux测试Linux驱动
测试Linux驱动代码:书P88
6.4.2 在android模拟器上通过原生(Native)C程序测试Linux驱动
注意:建议上传文件到安卓模拟器或开发板时,将文件放到/data/local目录,系统很多其他的目录,如/system/bin,都是只读的,除非将word_count.ko文件打包进system.img,否则无法向这些目录写数据,即使有root权限也不行。
6.4.3 使用Android NDK测试Linux驱动
ndk_
test_word_count.c文件的完整代码:书P94
6.4.4 使用Java代码直接操作设备文件来测试Linux驱动
如果android拥有root权限,完全可以直接使用Java代码操作/dev/wordcount设备文件。
6.4.5 使用S3C6410开发板测试Linux驱动
1、在S3C6410开发板上使用可执行程序测试Linux驱动
2、在S3C6410开发板上使用Android NDK 测试Linux驱动
3、在S3C6410开发板上使用Java代码测试Linux驱动
6.4.6 将驱动编译进Linux内核驱动程序
核心的配置文件有:.config、Kconfig、Makefile
将word_count驱动加入Linux内核源代码树的步骤:
第一步:将word_count.c文件放入内核源代码
第二步:修改Kconfig文件
第三步:修改Makefile文件
第四步:设置.config文件
第五步:编译.config文件
6.5 使用Eclipse开发和测试Linux驱动程序
6.5.1 在Eclipse中开发Linux驱动程序
使用Eclipse开发Linux驱动程序的步骤:
第一步:建立C工程
第二步:建立C源代码文件链接
第三步:设置include路径
第四步:编译Linux驱动
6.5.2 在Eclipes中测试Linux驱动
测试Linux驱动:
第一步:导入test_word_count.c
第二步:设置include路径
第三步:建立Target
第四步:Build工程
第五步:运行测试程序
标签:
原文地址:http://www.cnblogs.com/zhanglu19940601/p/5563387.html