Android系統移植與驅動開發——第七章——LED驅動,android驅動開發
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驅動的裝載、卸載、與裝置檔案相關的動作處理以及商務邏輯、與硬體互動主要是指通過函數與硬體中的寄存器進行資料互動