第七章心得体会

时间:2021-07-18 14:24:34

第七章主要学到控制发光二极管,在本章会完成一个真正意义上的 Linux 驱动。该Linux驱动用来控制开发版上的4个LED 小灯。也就是说通过向Linux 驱动发送数据可以控制LED小灯的开关。

尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。所谓I/O内存是通过各种接口连接到主机的硬件在主机内存中的映射。

接着我们进行编写LED驱动,首先要创建LED驱动设备文件:

第1步:使用cdev_init函数初始化cdev ;

第2步:指定设备号;

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

第4步:使用class_create宏创建struct class;

第5步:使用device_create函数创建设备文件;

其次要设置寄存器和初始化LED驱动,在控制 LED 亮、灭之前必须要了解如何设置寄存器。ARM处理器有多个寄存器,通过设置不同寄存器的值,可以设置LED引脚的状态、打开或禁止上拉(pull-up)电路以及控制LED的亮和灭。然后控制LED灯,LED 驱动可以使用如下两种方式控制 LED

1.通过字符串控制LED;

2.通过I/O命令控制LED;

要想使用上述两种方式控制LED,LED驱动必须要接收相应的数据,如果通过字符串控制LED,需要使用fif.e_operations.write函数,如果通过 I/0命令控制LED,需要使用file__operations.iocd函数。

然后我便学习到了LED驱动的相关代码,再次不一一赘述。

最后进行LED驱动的测试,可以编写测试I/O控制命令的通用程序测试,也可以使用NDK测试LED驱动,还可以使用Java测试LED驱动。

所以对于本章来说,我了解到LED 驱动是本书第一个真正和硬件打交道的 Linux驱动。虽然LED驱动并不复杂,只是控制了4个LED,"但LED驱动已经包括了Linux驱动所有必要的部分。一个完整的Linux驱动主要由内部处理和与硬件交互降部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理(读写设备文件、向设备文件发送I/O命令等动作〉以及业务逻辑等。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。