標籤:
led驅動的實現原理儘管 Linux 驅動直接與硬體打交道,但並不是 Linux 驅動直接向硬體中的記憶體寫資料 而是與原生 ν0 記憶體( νO Memory ,位於核心空間〉進行互動。所謂 1/0 記憶體是通過各種介面( PC I 、USB 、藍芽、乙太網路口 等〉串連到主機( PC 、手機〉的硬體〈網卡、音效卡、網路攝影機等〉在主機記憶體中的映射。
編寫LED驅動
第一步:使用 cdev_init 函數初始化cdev
第二步:指定裝置號
- 直接在代碼中指定(寫入程式碼〉
- 動態分配
第三步:使用 cdev_add 函數將字元裝置添加到核心中的字元裝置數組中
第四步:使用 clas at 宏建立 struct class
第五步:使用 ev ce ::.. crea 函數建立裝置檔案
為linux驅動指定一個模組參數需要使用 module _param C name, type, perm )宏。其中 name示參數名, type 表示參數類型, perm 表示讀/寫入權限。
使用 module param arra nam , type, nump, perm )宏可以為 Linux 驅動指定數組形式的模組參數,其中oam~ 表示參數名, type 表示數組 素的資料類型, OWUJ) 表示儲存數組長度的變繭的指鐘, nn 參數檔案的存取權限。 下面為 LED 驅動增加 個數群組類型的模組參數。
LED 驅動有兩種與裝置檔案互動的方式 直接寫入字串資料和 νo 控制命令.直接向裝置文寫入資料可以使用命令列方式來完成,也 以通過 write 函數來完成。但 I/0 控制命令只能通過iocll 函數發出。為了以後測試方便,本節編寫了 個通用的發送 命令的程式.
NDK 程式測試和可執行程式測試差不多。只不過 ND Library 可以被 Java 程式調用,而Android 系統中的可執行程式在非 root 狀態下是無法直接被調用的。所以如果想在 Android 應用程式中測試 inux 最直接的方法就是使用 NDK.
LED驅動移植
如果需要將 LED 驅動安裝到 Linux 3. x核心的系統上( Android 4.x 及以上版本的系統〉,首先要擷取linux 3.x 核心的原始碼〈至少是 inux 核心的標頭檔〉,然後在新核心下重新編譯即可。如果需要將 LED 驅動安裝到 Linux 3. 核心的系統上( Android 4.x 及以上版本的系統〉,首先要擷取 linux 3.x 核心的原始碼〈至少是 inux 核心的標頭檔〉,然後在新核心下重新編譯即可。
安卓深度探索(卷一)第七章