一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

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

Module簡介 module的編寫方法

來源:CSDN 時(shí)間:2022-12-20 14:53:05

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

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

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


(資料圖片僅供參考)

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

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

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

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

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

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

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

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

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

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 绥德县| 香河县| 巴青县| 邢台县| 鸡东县| 金平| 新竹县| 丘北县| 南澳县| 南陵县| 松阳县| 阜平县| 十堰市| 宝清县| 建德市| 郓城县| 专栏| 双桥区| 大城县| 长汀县| 大冶市| 正安县| 黎平县| 彩票| 德安县| 安庆市| 海林市| 弋阳县| 泰顺县| 赤峰市| 乌拉特中旗| 逊克县| 长子县| 临沂市| 眉山市| 岑溪市| 景泰县| 富顺县| 龙胜| 冀州市| 施甸县|