Linux驅動的工作方式就是交互。例如向Linux印表機驅動發送一個列印命令,可以直接使用C語言函數open打開設備文件,在使用C語言函數ioctl向該驅動的設備文件發送列印命令。編寫Linux驅動最重要的是編寫回調函數,否則與設備文件交互的數據無法得到處理。 建立Linux驅動骨架中使用到兩個函數 ...
Linux驅動的工作方式就是交互。例如向Linux印表機驅動發送一個列印命令,可以直接使用C語言函數open打開設備文件,在使用C語言函數ioctl向該驅動的設備文件發送列印命令。編寫Linux驅動最重要的是編寫回調函數,否則與設備文件交互的數據無法得到處理。
建立Linux驅動骨架中使用到兩個函數:module_init,module_exit。要進行巨集定義。
創建和移除設備文件用misc_register,misc_deregister。
回調函數是由自身生成的,一個驅動程式並不一定要指定所有的回調函數。
具體的業務邏輯與驅動的功能有關,可能有多個函數、多個文件甚至多個Linux驅動模塊組成。
程式可以直接編譯進內核,也可以作為模塊單獨使用。
使用輸出時用的是printk,可定有疑問為什麼不用printf,因為Linux系統中分為用戶空間和內核空間,而printf只能運行在用戶空間。再者,他們之間進行交互使用的設備文件。
要對開源文件、GPL協議、LGPL協議、BSD協議、MIT協議和Apache License2.0協議理解。
在編寫和銷毀設備文件時,要註意misc_register只能設置此設備號。
使用cat /proc/devices可以獲得顯示當前系統中有哪些是主設備以及主設備號
通過file_operation.read和file_operation.write成員變數可以分別指定讀寫設備要調用的回調函數的指針。
驅動程式編寫完成,多次編譯該驅動程式,讀寫目錄的驅動程式一樣,有build.sh和相關腳本文件。
Cat 命令不會將4個位元組還原成int類型的值顯示
用於Android模擬器的goldfish內核預設不允許動態載入Linux驅動模塊,因此需要cd ~/kernel/goldfish,make menuconfig,要在配置框中選擇正確的進入子菜單,否則可能載入內核失敗。