一、驅動是硬體操作+核心程式設計(裝置驅動)
1.字元裝置驅動
2.訪問控制(互斥)阻塞、喚醒
3.輪詢非同步通知,中斷處理延時、記憶體分配、裝置模型。
4.簡單的字元裝置驅動編寫——基於子系統的驅動(i2c/spi)
5.塊裝置驅動/網路裝置驅動框架
二、說明:
核心模組(module):核心執行時可動態新增/刪除的**
核心的配置:< >為不編譯;< * >為靜態方式編譯進核心(如:*.c --> *.o --> zimage);< m >為動態編譯 (如:*.c --> *.o --> *.ko)
核心編譯命令:make zimage 直接編譯 和 make module模組動態方式編譯.
以模組方式動態編譯的優點:
1.沒有編譯進核心 ,這樣可以使核心更加高效的執行
2.採用模組方式編譯方便、靈活
3.模組不編譯進核心不必遵守gpl協議所以保護智財權。
模組和一般的c程式比較:
1.每個c程式都有乙個mian()函式入口點;模組也有入口點 ,它的入口在模組載入函式開始 init_module(),這是呼叫核心的函式;
2.一般的c應用程式結束後系統會自動**資源,但模組要自己申請資源**,不然會一直執行執行直到系統重新執行。
模組的分類:驅動模組、檔案系統模組、網路模組、個協議模組。
三、編寫模組的三要素
1.模組的宣告:module_license("gpl"),核心若不宣告此語句許可會導致整個模組的函式不能呼叫。
2.模組的載入函式(載入模組時執行)
核心api :int init_module(void);作用是申請資源。
3.模組解除安裝函式
核心api:void cleanup_module(void),其作用是釋放資源。
模組編寫所需標頭檔案:#include
此標頭檔案是放在核心原始碼的標頭檔案中。
四、模組的相關命令
1.lsmod,用來檢視系統已載入的模組資訊。
2.insmod + ***.ko,用於載入模組。
3.dmesg,檢視核心列印的資訊,可加 選項 「-c」,此選項只有管理員才能執行。
4.rmmod + *** 或 ***.ko,用於模組的解除安裝。
5.make clean,清楚中間編譯生成的檔案。
五、模組的編譯條件
1.需要乙個經過配置和編譯的核心(原始碼)
2.模組編譯所用核心版本和載入核心版本必須一致
六、模組編譯
1.內部模組(internal_module)
2外部模組(external_modele)
注:原始碼考到核心中編譯時叫內部模組,否則叫外部模組。
3.內部模組的編譯: a.模組原始碼拷貝到核心原始碼相關目錄下
b.修改kconfig(修改新增配置選項)
c.配置選項 d.修改makefile
e.編譯所以模組,命令「make modules」
嵌入式linux驅動 輸入子系統筆記
一 開發環境 1 核心 linux 2.6.22.6 2 jz2440 3 ubuntu 9.10 二 過程 1 分配input dev結構體 使用input allocate device函式,如 先定義乙個input dev 結構體型別變數 static struct input dev key...
嵌入式linux字元裝置驅動
arm linux 驅動 抵岸科技 1.我們需要先呼叫register chrdev region 或 alloc chrdev region 來向系統申請裝置號 int register chrdev region dev t first,unsigned int count,char name ...
嵌入式linux字元裝置驅動
1.我們需要先呼叫register chrdev region 或 alloc chrdev region 來向系統申請裝置號 int register chrdev region dev t first,unsigned int count,char name 函式通過已知的裝置號first來註冊...