Android深度探索--HAL与驱动开发----第七章读书笔记

时间:2021-07-27 17:09:18

首先创建led驱动的设备文件,可以使用cdev_init,register_chrdev_region,cdev_add等建立主设备号的设备文件。步骤如下:

1使用cdev_init初始化cdev

2指定设备号

3使用cdev_add函数将字符设备添加到内核中的字符设备组中

4使用class_creat宏创建struct class

5使用device_creat函数创建设备文件

然后卸载led驱动的设备文件

{Device_destroy(leds_class,dev_number);

If(leds_class)

Class_destroy(leds_class);

Unregister_chrdev_region(dev_number,DEVICE_NUMBER);

Return;}

Static void leds_exit(void)

{

Leds_destroy_device();

Printk(DEVICE_NAME”\text!\n”);

}

Module_exit(leds_exit);

然后设置寄存器与初始化led驱动,arm处理器有多个寄存器,通过设置不同寄存器的值,设置led引脚状态、打开或禁止上拉电路以及控制led的亮和灭。一下几点需要知道

Led有两个引脚,GPB0和GPB1

控制led需要通过三个寄存器完成

每一个寄存器可以使用4个字节

使用GPMCON寄存器的低16位将led的两个端口属性设为output。

使用GPMDAT寄存器的低4位控制4个led的亮灭。

使用GPMPUD寄存器的低八位分别打开四个led的上拉电路

然后就是比较重要的控制led,要想完成这一过程,led驱动就必须接受相应的数据。如果通过字符串控制,需要使用file_operations.write。如果通过I/O命令控制led,需要使用file_operations.ioctl函数。编写时需要了解几点:

4个led的状态用一个长度为4的char数组存储

如果写入的字符串长度小于4,直接写入,如果大于4,只写前4个

如果写入的字符串小于4,相当于后面的都是0

向GPNMDAT寄存器写入数据之前最好先读取GPMDAT当前值

最后进行测试led驱动,方法有一下几种:

编写控制命令的通用程序:led驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。

使用NDK测试led驱动

使用java测试led驱动

http://www.cnblogs.com/caoyutao/