聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當前位置: > 關(guān)注 > > 正文

Module簡介 module的編寫方法

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

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

首先實現(xiàn)的是具體的代碼部分:

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


(資料圖片僅供參考)

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

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

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

加載內(nèi)核使用的是insmod命令:

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

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

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

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

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

責(zé)任編輯:

標簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top