第七章

尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存(I/O Memory,位于内核空间)进行交互。所谓IO内存是通过各种接口(PCI,USB,蓝牙,以太网接口等)连接到主机的硬件在主机内存中的映射。

Linux内核提供了多个与I/O内存交互的函数。Linux内核的内存管理模块杜泽同步I/O内存与硬件中的数据。

每一个连接Linux的硬件在I/O内存中都会有映射首地址。在使用ioread32,等函数时需要制定这些首地址。

LED灯驱动以动态驱动模块的(.KO文件)的形式提供。

我们创建一个设备文件需要以下步骤,

1,使用cdev_init函数初始化cdev

2,制定设备号

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

4,使用class_create红创建struct class

5,使用device_creatr函数创建设备文件

控制LEDLED驱动可以使用如下两种方式控制LED

通过字符串控制LED,使用I/O命令控制LED

一个完整的Linux驱动程序主要由内部处理和硬件两部分组成,其中内部处理主要是指Linux驱动的装载,卸载,与设备问价相关动作的处理以及业务逻辑等。与硬件交互主要是指通过函数等与硬件中的寄存器进行数据交互。Linux在不同的平台上移植也是这两部分。

原文地址:https://www.cnblogs.com/sun-123/p/5560962.html