一個完整的Linux驅動包括內部處理和互動兩部分。其中內部處理主要是指Linux驅動的裝載、解除安裝、與裝置檔案的相關動作處理以及業務邏輯等。與硬體互動主要是指通過iowrite32、ioread32等函式與硬體中的暫存器進行資料互動。對於大多數的Linux驅動來說,需要直接與硬體互動。而控制發光二極體該Linux驅動用來控制開發板上的4個Led燈。通過向Linux驅動傳送資料可以控制Led燈的開關。
雖然Linux驅動直接與硬體打交道,但是並不是直接向硬體中的記憶體寫資料,而是與本機中的I/O記憶體進行互動。Linux核心提供了多個與I/O記憶體互動的函式,Linux核心的記憶體管理模組負責同步I/O記憶體與硬體中的資料。每一個連線Linux的硬體在I/O記憶體中都會有對映地址。
編寫Led燈驅動的步驟如下:
1、 建立LED驅動裝置檔案:
(1) 使用cdev-init函式初始化cdev;
(2) 指定裝置號;
(3) 使用cdev_add函式將字元裝置新增到核心中的字元裝置陣列中;
(4) 使用class_creat巨集建立struct class;
(5) 使用device_create函式建立裝置檔案;
2、 解除安裝Led驅動的裝置檔案
3、 設定暫存器和初始化led驅動
4、 控制led燈:
(1) 通過字串控制LED
(2) 通過I/O命令控制
5、 LED驅動的模組引數
6、 測試LED驅動
(1) 編寫測試I/O控制命令的通用程式;
(2) 使用NDK測試LED驅動;
(3) 使用Java測試LED驅動;
7、Led驅動移植