經過本章的學習掌握了一個很是實用的linux驅動程序。知道了一個完整的linux驅動只要由內部處理與硬件交互兩部分組成。其中的內部處理指linux驅動的裝載、卸載、與設備文件相關的動做處理以及業務邏輯。與硬件交互主要是指經過部分函數與硬件中的寄存函數進行數據交互。linux
Linux驅動是與本機的I/O內存進行交互。每個鏈接linux的硬件在I/O內存中都會有映射首地址。函數
建立LED驅動的設備文件的步驟:學習
一、使用cdev_init函數初始化cdev命令行
二、指定設備號內存
三、使用cdev_add函數將字符設備添加到內核中的字符設備組中字符串
四、使用class_create宏建立struct classit
五、使用device_create函數建立設備文件io
卸載LED驅動的設備文件:class
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函數來發出。