linux驱动直接与硬件交互,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。每一个连接Linux的硬件在I/O内存中都会有映射首地址。任何现代的操作系统主机插入硬件时都会检测到该硬件,但硬件被检测只能说明在内核空间中建立了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驱动的测试,可以编写测试I/O控制命令的通用程序测试,也可以使用NDK测试LED驱动,还可以使用Java测试LED驱动。
一个完整的Linux驱动主要由内部处理和与硬件交互降部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理(读写设备文件、向设备文件发送I/O命令等动作〉以及业务逻辑等。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。
http://i.cnblogs.com/EditPosts.aspx?opt=1