LED驅動的實現原理 編寫LED驅動: 測試LED驅動之前需要用USB數據線連接開發板,然後打開電源,成功啟動之後,執行build.sh腳本文件編譯和安裝LED驅動,順利則會自動連接 如果有多個設備文件將會在後來使用,則要通過指針變數cdev.list.prev和cdev.list.next指針變數 ...
LED驅動的實現原理
編寫LED驅動:
測試LED驅動之前需要用USB數據線連接開發板,然後打開電源,成功啟動之後,執行build.sh腳本文件編譯和安裝LED驅動,順利則會自動連接
如果有多個設備文件將會在後來使用,則要通過指針變數cdev.list.prev和cdev.list.next指針變數連接,從而形成雙向鏈接。
在創建設備文件時要註意:
Device_count表示建立設備文件的個數
Alloc_chrdv_region函數的第2個參數表示分配的起始設備號。
卸載Linux驅動的設備文件,需要依次調用device_destory、class_destory和unregister_chrdev_region方法
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驅動的裝載、卸載、與設備文件相關的動作處理以及業務邏輯、與硬體交互主要是指通過函數與硬體中的寄存器進行數據交互