第七章讲述的是控制发光二极管,本章会完成一个真正意义上的Linux驱动,本章讲述的Linux驱动用来控制开发板上的4个LED小灯。
尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。
LED驱动与word_count驱动的实现步骤类似。编写LED驱动讲述了体验LED驱动的奇妙、创建LED驱动的设备文件,包括使用cdev_init函数初始化cdev,指定设备号,使用cdev-add函数将字符设备添加到内核中的字符设备数组中,使用class-create宏创建struct class,使用device_create函数创建设备文件。卸载LED驱动的设备文件,设置寄存器与初始化LED驱动,控制LED,LED驱动的模块参数。
测试LED驱动方式包括可执行程序测试、NDK测试和Java测试。LED驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成。NDK程序测试和可执行程序测试差不多,只不过NDK library可以被Java程序调用。
LED驱动一直最简单的方法就是将其在不同Linux内核版本下进行编译,LED驱动是通过设置GPMDAT寄存器来控制LED的亮灭的。
LED驱动是一个真正的和硬件打交道的Linux驱动,一个完整的Linux驱动主要由内部处理和硬件交互两部分组成。