



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、linux 模塊編譯步驟(原)本文將直接了當(dāng)?shù)膸氵M(jìn)入 linux 的模塊編譯。當(dāng)然在介紹的過程當(dāng)中,我也會添加一些必要的注釋,以便初學(xué)者能夠看懂。之所以要寫這篇文章,主要是因?yàn)閺臅旧蠈W(xué)的話,可能要花更長的時間才能學(xué)會整個過程,因?yàn)榭磿脑捠且粋€學(xué)習(xí)過程,而我這篇文章更像是一個培訓(xùn)。所以實(shí)踐性和總結(jié)性更強(qiáng)。通過本文你將會學(xué)到編譯一個模塊和模塊 makefile 的基本知識。以及加載(卸載)模塊,查看系統(tǒng)消息的一些知識;聲明:本文為初學(xué)者所寫,如果你已經(jīng)是一個 linux 模塊編譯高手,還請指正我文章中的錯誤和不足,謝謝第一步:準(zhǔn)備源代碼首先我們還是要來編寫一個符合 linux 格式的模塊文件
2、,這樣我們才能開始我們的模塊編譯。假設(shè)我們有一個源文件 mymod.c。它的源碼如下:mymodules.c1. #include/*引入與模塊相關(guān)的宏*/2. #include/*引入 module_init()module_exit()函數(shù)*/3. #include/*弓 I 入 module_param()*/45. MODULE_AUTHOR(YuQiang);6. MODULE_LICENSE(GPL);7.8. staticintnbr=10;9. module_param(nbr,int,S_IRUGO);10.11. staticint_inityuer_init(void)1
3、2. 13.inti;14.for(i=0;inbr;i+)15.16.printk(KERN_ALERTHello,Howareyou.%dn,i);17.18.return0;19. 20.21. staticvoid_exityuer_exit(void)22. 23. printk(KERN_ALERTIcomefromyuersmodule,Ihavebeenunlad.n);24. 25.26. module_init(yuer_init);27. module_exit(yuer_exit);我們的源文件就準(zhǔn)備的差不多了,這就是一個 linux 下的模塊的基本結(jié)構(gòu)。第 9 行是導(dǎo)
4、出我們的符號變量 nbr。這樣在你加載這個模塊的時候可以動態(tài)修改這個變量的值。稍后將演示。yuer_init()函數(shù)將在模塊加載的時候運(yùn)行,通過輸出的結(jié)果可以看到我們的模塊是否加載成功。第二步:編寫 Makefile 文件首先還是來看看我們 Makefile 的源文件,然后我們再來解釋;Makefileobj-m:=modules.o#要生成的模塊名modules-objs:=mymod.o#生成這個模塊名所需要的目標(biāo)文件KDIR:=/lib/modules/uname-r/buildPWD:=$(shellpwd)default:make-C$(KDIR)M=$(PWD)modulescle
5、an:rm-rf*.o.*.cmd*.ko*.mod.c.tmp_versions現(xiàn)在我來說明一下這個 Makefile。請記住是大寫的 Makefile 而不是小寫的 makefile;obj-m:這個變量是指定你要聲稱哪些模塊模塊的格式為 obj-m:=模塊名.omodules-objs:這個變量是說明聲稱模塊 modules 需要的目標(biāo)文件格式要求模塊名-objs:=目標(biāo)文件切記:模塊的名字不能取與目標(biāo)文件相同的名字。如在這里模塊名不能取成 mymod;KDIR:這是我們正在運(yùn)行的操作系統(tǒng)內(nèi)核編譯目錄。也就是編譯模塊需要的環(huán)境M=:指定我們源文件的位置PWD:這是當(dāng)前工作路徑$(shel
6、l)是 make 的一個內(nèi)置函數(shù)。用來執(zhí)行 shell 命令。第三步:編譯模塊現(xiàn)在我們已經(jīng)準(zhǔn)備好了我們所需要的源文件和相應(yīng)的 Makefile。我們現(xiàn)在就可以編譯了。在終端進(jìn)入源文件目錄輸入 make運(yùn)行結(jié)果:make1:Enteringdirectory/usr/src/linux-headers-2.6.24-24-genericCCM/home/yuqiang/桌面/mymodule/mymodules.oLDM/home/yuqiang/桌面/mymodule/modules.oBuildingmodules,stage2.MODPOST1modulesCC/home/yuqiang/
7、桌面/mymodule/modules.mod.oLDM/home/yuqiang/桌面/mymodule/modules.komake1:Leavingdirectory/usr/src/linux-headers-2.6.24-24-generic第四步:加載/卸載我們的模塊從上面的編譯中我可以看到。已經(jīng)有一個 modules.ko 生成了。這就是我們的模塊了?,F(xiàn)在我們就可以來加載了。首先在終端輸入:sudoinsmodmodules.ko現(xiàn)在我們來看看我們的模塊加載成功沒有呢?在終端車入:dmesg|tail-12 這是查看內(nèi)核輸出信息的意思。tail-12 顯示最后 12 條;顯示結(jié)果
8、如下:17945.024417sd9:0:0:0:Attachedscsigenericsg2type018046.790019usb5-8:USBdisconnect,address919934.224812Hello,Howareyou.019934.224817Hello,Howareyou.119934.224818Hello,Howareyou.219934.224820Hello,Howareyou.319934.224821Hello,Howareyou.419934.224822Hello,Howareyou.519934.224824Hello,Howareyou.61993
9、4.224825Hello,Howareyou.719934.224826Hello,Howareyou.819934.224828Hello,Howareyou.9看到了吧。我們的模塊的初始化函數(shù) yuer_init();已經(jīng)成功運(yùn)行了。說明我們的模塊已經(jīng)加載成功;現(xiàn)在我們再來卸載模塊試試看。在終端輸入:sudormmodmodules在終端車入:dmesg|tail-319934.224826Hello,Howareyou.819934.224828Hello,Howareyou.920412.046932Icomefromyuersmodule,Ihavebeenunlad.可以從打印的
10、信息中看到,我們的模塊的退出函數(shù)已經(jīng)被執(zhí)行了。說明我們的模塊已經(jīng)被成功的卸載了。到目前位置我們就已經(jīng)算是對模塊的編譯到編譯運(yùn)行算是有了一個整體上的認(rèn)識了。對于以后深入的學(xué)習(xí)還是應(yīng)該有點(diǎn)幫助的。下面我們將在看看于模塊相關(guān)的一些簡單的操作。第五步:加載模塊時傳遞參數(shù)在終端輸入:sudoinsmodmodule_name.konbr=4在終端輸入:dmesg|tail-6顯示結(jié)果如下:20800.655694Hello,Howareyou.921318.675593Icomefromonefilemodule,Ihavebeenunlad.21334.425373Hello,Howareyou.02
11、1334.425378Hello,Howareyou.121334.425380Hello,Howareyou.221334.425381Hello,Howareyou.3這樣我們就可以看到在模塊加載的時候動態(tài)設(shè)置了我們的一個變量。初始化函數(shù)中的循環(huán)只執(zhí)行了 4 次。可能你會問我怎么知道一個模塊可以設(shè)置那些變量呢。當(dāng)然,你可以先不設(shè)變量加載一次。然后可以在終端輸入ls/sys/module/parameters/來查看。在這里我們是這樣輸入的在終端輸入:ls/sys/moedle/modules/parameters/顯不結(jié)果:nbr如果我們的模塊加載成功了。最后我們還可以通過 modinfo
12、 來查看我們的模塊信息。如下在終端輸入:sudomodinfomodules.ko顯不結(jié)果:filename:modules.kolicense:GPLauthor:YuQiangsrcversion:20E9c3c4E02D130E6E92533depends:vermagic:2.6.24-24-genericSMPmod_unload586parm:nbr:int本文總結(jié):本文的相關(guān)知識都好像有一點(diǎn)淺嘗轍止的感覺。因?yàn)楸酒恼轮饕峭ㄟ^一條線式方式來講解了模塊編寫的相關(guān)過程,其實(shí)在這個過程中還有很多可以發(fā)散的地方。例如:在寫到 MODULE_AUTHOR(YuQiang)的時候,你應(yīng)該想到還有MODULE_DESCRIPTION(模塊用途的簡單描述);MODULE_VERSION(模塊的版本字符串);MODULE_ALIAS(模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電子煙行業(yè)深度分析報告
- 2025年中國兒童學(xué)習(xí)桌椅行業(yè)發(fā)展監(jiān)測及投資前景展望報告
- 2025年中國真菌靈行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年 廣西中醫(yī)藥大學(xué)招聘筆試試題附答案
- 2025年中國車銑一體機(jī)行業(yè)市場全景評估及投資前景展望報告
- 中國上海市網(wǎng)紅經(jīng)濟(jì)行業(yè)競爭格局分析及投資規(guī)劃研究報告
- 中國菜種行業(yè)市場前景預(yù)測及投資戰(zhàn)略研究報告
- 中國河南省煤化工行業(yè)市場全景調(diào)研調(diào)查報告
- 氟美沙星原料藥行業(yè)深度研究分析報告(2024-2030版)
- 公司選鈦廠擴(kuò)能改造工程職業(yè)病危害預(yù)評價報告書樣本
- 《植物生理學(xué)》課件第三章+植物的光合作用
- 游泳館網(wǎng)架翻新施工組織方案設(shè)計
- 有機(jī)化學(xué)所有的命名--超全.
- 中職數(shù)學(xué)基礎(chǔ)模塊下冊《等差數(shù)列》ppt說課稿
- 引水罐的設(shè)計計算
- 三年級譯林版英語下學(xué)期按要求寫句子專項強(qiáng)化練習(xí)題
- 電纜接線工藝設(shè)計規(guī)范流程
- 中醫(yī)經(jīng)絡(luò)減肥課件
- 5WHY分析法培訓(xùn)
- 巧克力糖自動包裝機(jī) 課程設(shè)計
- 2019年福州師大附中自主招生數(shù)學(xué)試卷
評論
0/150
提交評論