1. "HelloModule.ko"核心模組程式設計
1.1 實驗目的
· 掌握Linux核心驅動模組的編寫、編譯和載入過程
· 掌握帶引數的核心模組的編寫、編譯和載入過程
· 掌握基於X86平臺和ARM 平臺掌握Linux核心模組更加靈活的特性
1.2 實驗原理
· 本實驗透過編寫一個簡單的核心模組,實現模組的初始化和解除安裝函式,並在載入時傳入控制引數,用printk能夠在後臺列印載入和解除安裝資訊。使用Makefile為當前執行的Linux核心編譯驅動模組,最後透過insmod命令載入模組執行。
· 核心模組流程圖。
SHAPE \* MERGEFORMAT
1.3 步驟與現象
· X86平臺不帶引數的核心模組
1. 編寫hellomodule.c和Makefile檔案
編譯
執行,第一步無hellomodule 模組
2. 插入hellomodule模組
3. 解除安裝模組
· 分析程式碼執行現象
1. 我們在ubuntu圖形介面gnome下的控制檯不能顯示我們的printk輸出,printk函式是系統核心呼叫,在init程序啟動後就申請不到控制檯,所以呼叫它就沒能在圖形介面下的控制檯輸出,透過檢視日誌檔案。
先檢視/var/log/syslog 檔案,在載入模組,再檢視/var/log/syslog 檔案。
2. 解除安裝模組
3. 分析載入的模組以及模組間的依賴關係
4. lsmod命令實際上讀取並分析/proc/modules檔案
5. 核心中已載入模組的資訊也存在於/sys/module目錄下,載入hellomodule.ko後,核心將包含/sys/module/hellomodule目錄,檢視該目錄樹。
6. 獲取模組的資訊,包含模組的作者、模組的說明、模組所支援的引數以及vermagic
· X86平臺帶引數的核心模組,雷同不帶引數的部分就不列出
1. 編譯
2. 檢視日誌檔案
3. 帶引數載入
· ARM平臺不帶引數的核心模組, 雷同X86平臺就不列出
1. copy x86 平臺的hellomodule.c和Makefile檔案
2. 修改Makefile
3. 編譯,驗證
4. Copy到SD卡
5. 開發板SD卡插入,上電,檢視執行結果
· ARM平臺帶引數的核心模組, 雷同X86平臺就不列出
1. 原始碼準備
2. 編譯
3. COPY到SD卡
4. 開發板SD卡插入,上電,檢視執行結果
1.4 關鍵程式碼分析
· X86平臺
1. 無引數
C檔案
Makefile檔案:
2. 有引數
C檔案:
Makefile檔案:
· ARM平臺
1. 無引數
C檔案: 雷同x86 平臺無引數部分
Makefile檔案:
1. 有引數
C檔案:雷同x86平臺有引數部分
Makefile檔案: