LED驅動的實現原理算法
編寫LED驅動:數組
測試LED驅動以前須要用USB數據線鏈接開發板,而後打開電源,成功啓動以後,執行build.sh腳本文件編譯和安裝LED驅動,順利則會自動鏈接函數
若是有多個設備文件將會在後來使用,則要經過指針變量cdev.list.prev和cdev.list.next指針變量鏈接,從而造成雙向連接。測試
在建立設備文件時要注意:ui
Device_count表示創建設備文件的個數命令行
Alloc_chrdv_region函數的第2個參數表示分配的起始設備號。指針
卸載Linux驅動的設備文件,須要依次調用device_destory、class_destory和unregister_chrdev_region方法blog
ARM控制LED的有三個寄存器,三個寄存器在內存中都有虛擬地址,向這些地址寫入數據後,處理器會使用算法將虛擬地址映射爲物理地址,並根據物理地址將數據寫入相應的硬件端口。內存
驅動的設備文件。開發
控制LED有兩種方式:
經過字符串控制LED—>file_operation.write
經過I/O命令控制LED—>file_operation.ioctl
LED驅動的模塊參數
Moule_param_array(name,type,nump,perm)宏定義爲LINUX驅動指定數組形式的模塊參數。Name表示參數名,type表示數組元素的數據類型,nump表示存儲數組長度的變量的指針,perm表示參數文件的訪問權限。
編寫測試I/O控制命令的通用程序,與設備文件交互的方式:直接寫入字符串數據和I/O控制命令。直接向設備文件寫入數據能夠使用命令行方式來完成,也能夠經過write函數來完成,但I/O命令只能經過ioctl發出。
一個完整的Linux驅動主要是由內部處理和硬件交互兩部分組成,其中內部處理主要是指Linux驅動的裝載、卸載、與設備文件相關的動做處理以及業務邏輯、與硬件交互主要是指經過函數與硬件中的寄存器進行數據交互