来自书籍:《Android深度探索(卷1)HAL与驱动开发》
一、Linux驱动是什么?
Linux系统将每一个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都保存在/dev目录中。由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成了与设备文件交换数据。
回调函数: 响应Linux驱动的事件,即响应应用程序传递过来的数据。
二、编写Linux驱动程序的步骤
1. 建立Linux驱动骨架(装载和卸载Linux驱动)
内核在使用驱动时首先需要装载驱动,该过程中进行一些初始化工作,例如,建立文件设备、分配内存地址空间等。在Linux系统退出时需要卸载Linux驱动,在卸载过程中需要释放由Linux驱动占用的资源,例如,删除设备文件、释放内存地址空间等。
驱动程序需提供两个函数处理初始化和退出的工作,这两个函数由module_init和module_exit宏指定。
2.注册和注销设备文件
建立文件设备的工作一般在第1步中的处理初始化工作的函数中完成;删除文件设备的工作一般在第1步中的处理退出工作的函数中完成。分别使用misc_register和misc_deregister函数建立和移除设备文件。
3. 指定与驱动相关的信息
指定作者、开源协议、别名等信息。
4. 指定回调函数
5.编写业务逻辑
驱动的核心部分,用于实现与驱动功能相关的工作。
6.编写Makefile文件
Linux内核源码的编译规则是通过Makefile文件定义的。
7.编译Linux驱动程序
可直接编译进内核,也可以作为模块单独编译。
8.安装和卸载Linux驱动
如果将Linux驱动编译进内核,只要Linux使用该内核,驱动程序就会自动装载。
如果Linux驱动程序以模块单独存在,需要使用insmod或modprobe命令装载Linux驱动模块,使用rmmod命令卸载Linux驱动模块。
9. Linux驱动测试
Ubuntu下的Linux驱动测试:编写测试代码文件test.c,通过在命令行输入gcc test.c -o test回车完成编译,输入./test执行测试代码。