代码改变世界

第七章主要讲的是控制发光二极管的驱动程序,用来控制开发板上的4个led灯

2016-06-05 15:34  好博客  阅读(348)  评论(0编辑  收藏  举报

首先讲了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驱动所有必要的部分。