首先讲了led驱动的实现原理,linux驱动并不是直接向硬件的内存中写数据,而是与本机的i/o内存进行交互,每一个连接linux的硬件在i/o内存中都会有映射首地址。
编写驱动程序,先创建led驱动的设备文件:
1.使用cdev_init函数初始化cdev
描述设备文件需要一个cdev的结构体,cdev的大多是成员变量并不需要我们去初始化,只要调用cdev_init函数就可以初始化大部分cdev的成员变量
2.指定设备号
Linux 的设备的文件号分为 主设备号和此设备号,设备号有两种指定方法:直接在代码中指定;动态分配。
3.使用cdev_add函数将字符设备添加到内核中的字符设备数组中,调用cdev_add函数需要指定设备文件指针、设备号和设备文件数量。
4.使用class_create宏创建struct class
5.使用device_create函数创建设备文件
卸载led驱动的设文件需要依次调用device_destroy、class_destroy、unregister_chrdev_region方法。
在控制led灯亮、灭之前必须要了解如何设置寄存器。
Led驱动可以使用两种方式控制led灯:
1.通过字符串控制led;
2.通过i/o命令控制led。
测试led驱动:
1.使用NDK测试LED驱动
2.使用java测试LED驱动
控制LED灯的驱动是本书第一个和硬件结合的驱动,虽然程序不复杂,但是包括了linux驱动所有必要的部分。