聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

Module簡介 module的編寫方法

來源:CSDN 時間:2022-12-20 14:53:05

模塊(module)是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。使用模塊的優點:?1,將來修改內核時,不必全部重新編譯整個內核,可節省不少時間?;2,系統中如果需要使用新模塊,不必重新編譯內核,只要插入相應的模塊即可。這兩點對于內核開發尤為有用,那么下面我們就簡單學習以下module的編寫方法。以一個完整的“Hello word”模塊為例。

首先實現的是具體的代碼部分:

這個模塊中定義了兩個函數,其中hello_init在模塊裝載到內核時調用,而hello_exit在模塊被移除時調用。module_init與module_exit使用了內核特殊宏來表示上述兩個函數說扮演的角色。而MODULE_LICENSE用來告訴內核該模塊所采用的自由許可證。


(資料圖片僅供參考)

有了代碼后我們還需要將其編譯成模塊,這個時候就需要用到Makefile,Makefile的具體內容如下:

Makefile中內容的含下次學習,將兩個文件放到同一個目錄下,執行make命令,執行完后就會生成一個ko文件,這個ko文件就是我們需的module。

有了這個ko,我們就可以將其加載到Linux內核中了,不過需要注意的是,加載與卸載內核模塊都需要使用root權限。

加載內核使用的是insmod命令:

一般情況下,沒異常打印就表示加載成功了,但為了確認我們可以使用lsmod命令查看內核中已加載的module:

通過這個命令我們果斷看到了我們所希望的helloModule這個模塊。此時我們就可以通過modinfo這個命令查看到這個module的信息了:

那如果此時我們不再需要這個模塊了我們則可以通過rmmod這個命令將其從內核中卸載:

但我們發現無論加載還是卸載模塊,我們都沒有看到printk中的打印,這主要是printk會根據日志打印級別來決定時候把消息打印到當前控制臺上,決定的因素是日志級別時候小于console_loglevel值,那我們是不是就無法看到這個打印了嗎,當然不是,我們可以通過dmesg查看到:

這里由于我實上次,所以我們看到了上次打印。

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线