通过本章的学习掌握了一个非常实用的linux驱动程序。知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成。其中的内部处理指linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑。与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互。
Linux驱动是与本机的I/O内存进行交互。每一个连接linux的硬件在I/O内存中都会有映射首地址。
创建LED驱动的设备文件的步骤:
1、使用cdev_init函数初始化cdev
2、指定设备号
3、使用cdev_add函数将字符设备添加到内核中的字符设备组中
4、使用class_create宏创建struct class
5、使用device_create函数创建设备文件
卸载LED驱动的设备文件:
void device_destory(sruct class *class,dev_t devt)
void clss_dsetroy(struct class *class)
void unregister_chrdex_region(dev_t from,unsigned count)
设置寄存器与初始化LED驱动时了解到,LED有两个引脚:GPB0和GPB1。其中一个引脚连接到了ARM处理器的GPI0端口,另一个引脚经过一个限流电阻连接到电源。控制LED需要通过3个寄存器来完成,分别为GPMCON、GPMDAT、GPMPUD。每一个寄存器可以使用4个字节。使用GPMCON寄存器的低16位将LED两个端口的属性设置为Outpt。使用GPMDAT寄存器的低4位控制4个LED的亮、灭。
LED驱动有两种与设备文件交互的方式:直接写入字符串数据和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成。但I/O控制命令只能通过IOCTL函数来发出。