尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存(I/O Memory,位于内核空间)进行交互。所谓I、O内存是通过各种接口(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函数创建设备文件
控制LED,LED驱动可以使用如下两种方式控制LED,
通过字符串控制LED,使用I/O命令控制LED
一个完整的Linux驱动程序主要由内部处理和硬件两部分组成,其中内部处理主要是指Linux驱动的装载,卸载,与设备问价相关动作的处理以及业务逻辑等。与硬件交互主要是指通过函数等与硬件中的寄存器进行数据交互。Linux在不同的平台上移植也是这两部分。