一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品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 主站蜘蛛池模板: 广东省| 临沂市| 武功县| 辉南县| 井研县| 资阳市| 弋阳县| 靖远县| 大荔县| 巴马| 卢湾区| 佛教| 周至县| 阳新县| 佛山市| 习水县| 仙居县| 岳西县| 且末县| 新营市| 碌曲县| 洛浦县| 蕉岭县| 桃源县| 高州市| 潢川县| 黔江区| 宜城市| 斗六市| 西乌珠穆沁旗| 连山| 长顺县| 南投县| 罗源县| 新宾| 隆林| 永靖县| 陆川县| 响水县| 西宁市| 平罗县|