




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 熟練掌握基本的Linux內(nèi)核模塊開(kāi)發(fā)框架和編譯方法。 熟練掌握Linux內(nèi)核模塊添加流程。 理解Linux內(nèi)核模塊代碼中的一些常見(jiàn)宏和參數(shù)。 掌握Linux內(nèi)核模塊程序和應(yīng)用程序的差異。 深入理解操作系統(tǒng)為用戶(hù)提供服務(wù)的方式、方法 深入理解計(jì)算機(jī)程序的運(yùn)行方式本章目標(biāo)第1頁(yè)/共16頁(yè) 實(shí)驗(yàn)1:添加一個(gè)簡(jiǎn)單的Linux內(nèi)核模塊(教材P.162)第12章 添加最簡(jiǎn)單的Linux內(nèi)核模塊第2頁(yè)/共16頁(yè) 實(shí)驗(yàn)內(nèi)容1.從教材提供的電子資源中找到或者按教材提示自己編寫(xiě)簡(jiǎn)單的Linux內(nèi)核模塊kello.c及其對(duì)應(yīng)的Makefile文件2.編譯、安裝、刪除該模塊,查看該模塊的安裝位置、運(yùn)行情況實(shí)驗(yàn)1:添
2、加一個(gè)簡(jiǎn)單的Linux內(nèi)核模塊第3頁(yè)/共16頁(yè) 實(shí)驗(yàn)要求1.通過(guò)閱讀、執(zhí)行kello.c及其對(duì)應(yīng)的Makefile文件,理解Linux內(nèi)核模塊LKM的基本框架和運(yùn)行方式、原理。2.對(duì)比kello.c和應(yīng)用程序hello.c在編寫(xiě)、運(yùn)行過(guò)程中的差異,理解操作系統(tǒng)為用戶(hù)提供服務(wù)的方式、方法。3.結(jié)合操作系統(tǒng)知識(shí),通過(guò)實(shí)驗(yàn)深入理解計(jì)算機(jī)程序在操作系統(tǒng)支持下的運(yùn)行方式。第4頁(yè)/共16頁(yè) 原理/背景 用戶(hù)態(tài)和內(nèi)核態(tài) LKM基本框架、關(guān)鍵代碼第5頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加一個(gè)簡(jiǎn)單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理用戶(hù)態(tài)與內(nèi)核態(tài) 應(yīng)用程序調(diào)用操作系統(tǒng)服務(wù)完成特定功能 操作系統(tǒng)為應(yīng)用程序提供服務(wù) 應(yīng)用程序工作在
3、用戶(hù)空間,為用戶(hù)態(tài) 操作系統(tǒng)模塊工作在內(nèi)核空間,為內(nèi)核態(tài)C/C+應(yīng)用程序的運(yùn)行機(jī)制第6頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加一個(gè)簡(jiǎn)單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 Linux內(nèi)核模塊LKM (Linux Kernel Module) Linux是單內(nèi)核多模塊的操作系統(tǒng) 兩種開(kāi)發(fā)內(nèi)核模塊的方法 靜態(tài)開(kāi)發(fā) LKM LKM具有如下特點(diǎn): 主要使用C語(yǔ)言編程,但也可以使用內(nèi)聯(lián)的匯編代碼; LKM工作在內(nèi)核空間,可以不受約束的運(yùn)行,因此在一個(gè)LKM內(nèi)部讀者可以訪問(wèn)對(duì)應(yīng)用程序屏蔽的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、硬件設(shè)備等; LKM可以通過(guò)proc偽文件系統(tǒng)、內(nèi)存映射、特定的系統(tǒng)調(diào)用函數(shù)等不同的機(jī)制實(shí)現(xiàn)內(nèi)核空間和用戶(hù)空間的數(shù)據(jù)交換。
4、這些機(jī)制將在后續(xù)章節(jié)陸續(xù)講到。第7頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 1. LKM代碼框架 (教材P. 157)/kello.c#include / for printk()int kello_init( void )printk( n Hello, students from SDUST! This is in kernel space! n );return0;void kello_exit( void )printk( n Goodbye now. students from SDUST! n );MODULE_AUTHOR(SDUSTOS );MODULE
5、_LICENSE(GPL);module_init(hello_init);module_exit(hello_exit);第8頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 2. LKM代碼解釋1)任何一個(gè)內(nèi)核模塊文件必須要有兩個(gè)模塊管理函數(shù),即模塊初始化函數(shù)和模塊回收函數(shù),其原型如下所示:int init_module( void ); / 模塊初始化函數(shù),在模塊初始化時(shí)被調(diào)用void cleanup_module( void ); /模塊回收函數(shù),在模塊撤銷(xiāo)時(shí)調(diào)用2)為了模塊更高效地被加載、執(zhí)行和撤銷(xiāo),尤其是內(nèi)存的分配和回收,在文件最后需要作如下聲明:module_in
6、it(init_module); /執(zhí)行模塊初始化函數(shù)module_exit(cleanup_module); /執(zhí)行模塊回收函數(shù)第9頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 3. LKM編譯第一種是集成到內(nèi)核、隨內(nèi)核一起編譯;這種方法把開(kāi)發(fā)完的內(nèi)核文件放在Linux內(nèi)核源代碼相關(guān)目錄下,隨內(nèi)核一起編譯。缺點(diǎn):耗時(shí)長(zhǎng);一旦代碼有錯(cuò),導(dǎo)致系統(tǒng)出現(xiàn)問(wèn)題第二種則是單獨(dú)編譯、動(dòng)態(tài)插入內(nèi)核;把將開(kāi)發(fā)的內(nèi)核代碼文件直接進(jìn)行編譯,然后使用命令動(dòng)態(tài)插入內(nèi)核或者從內(nèi)核卸載。優(yōu)點(diǎn):編譯速度快;單獨(dú)調(diào)試代碼缺點(diǎn):每次系統(tǒng)啟動(dòng)后都需要再加載代碼第10頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)單的Linux內(nèi)
7、核模塊實(shí)驗(yàn)背景和原理 3. LKM編譯第二種則是單獨(dú)編譯、動(dòng)態(tài)插入內(nèi)核;把將開(kāi)發(fā)的內(nèi)核代碼文件直接進(jìn)行編譯,然后使用命令動(dòng)態(tài)插入內(nèi)核或者從內(nèi)核卸載。ifneq($(KERNELRELEASE),)obj-m:= kello.o elseKDIR:= /lib/modules/$(shell uname -r)/buildPWD:= $(shell pwd)default:$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers endifMakefile完整代碼完整
8、代碼 教材教材P.159內(nèi)核編譯需要內(nèi)核編譯需要Linux內(nèi)核文件的支持。內(nèi)核文件的支持。 /$(shell uname -r)/的作用編譯命令: kello.c和Makefile存儲(chǔ)目錄下執(zhí)行make第11頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)單的Linux內(nèi)核模塊總結(jié)應(yīng)用程序應(yīng)用程序Linux內(nèi)核模塊內(nèi)核模塊運(yùn)行空間用戶(hù)空間內(nèi)核空間入口Mainmodule_init()指定出口無(wú)module_exit()指定編譯gccMakefile鏈接ldinsmod運(yùn)行直接運(yùn)行insmod調(diào)試gdbkdebug,kdb,kgdb等表12.1 基于C語(yǔ)言的應(yīng)用程序與內(nèi)核模塊的差異第12頁(yè)/共16頁(yè)實(shí)驗(yàn)1 添加最簡(jiǎn)
9、單的Linux內(nèi)核模塊實(shí)驗(yàn)步驟 LKM編譯、添加、顯示執(zhí)行結(jié)果以及刪除模塊$ sudo rmmod kello.ko (刪除模塊)編譯插入模塊查看內(nèi)核日志中的執(zhí)行結(jié)果第13頁(yè)/共16頁(yè)拓展實(shí)驗(yàn) printk和某些常見(jiàn)宏 static char * log_level = KERN_EMERG, KERN_ALERT, KERN_CRIT, KERN_ERR, KERN_WARNING, KERN_NOTICE, KERN_INFO, KERN_DEBUG ;printk( “ Hello, students from SDUST! This is in kernel space! n );printk
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)鴨痢寶行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 項(xiàng)目戰(zhàn)略計(jì)劃管理協(xié)議書(shū)(2篇)
- 2025至2031年中國(guó)豪華拼花門(mén)行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025至2031年中國(guó)線性導(dǎo)軌行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 《跨境電商英語(yǔ)》課件-Case study
- 《UG-NX12軟件認(rèn)證》課件-認(rèn)識(shí)CADCAM技術(shù)和NX軟件 UGNX12.0簡(jiǎn)介
- 2025至2031年中國(guó)女裝睡袍行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025至2030年中國(guó)黑白多工器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年江蘇省環(huán)保產(chǎn)業(yè)合作協(xié)議書(shū)
- 2025年南京城市職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- (統(tǒng)編版)2025年小升初語(yǔ)文模擬考試卷(附帶答案)
- 2024年廣東省中考數(shù)學(xué)試卷(附答案)
- 2025年高考時(shí)政考題及參考答案(100題)
- DeepSeek人工智能語(yǔ)言模型探索AI世界科普課件
- 《青春期心理健康指導(dǎo)》課件
- 第18講 等腰三角形 課件中考數(shù)學(xué)復(fù)習(xí)
- 全過(guò)程工程咨詢(xún)文件管理標(biāo)準(zhǔn)
- DB65T 8024-2024 建筑用室外氣象參數(shù)標(biāo)準(zhǔn)
- 《預(yù)制高強(qiáng)混凝土風(fēng)電塔筒生產(chǎn)技術(shù)規(guī)程》文本附編制說(shuō)明
- ICD-11(國(guó)際疾病分類(lèi)第十一修訂)重點(diǎn)基礎(chǔ)知識(shí)總結(jié)-
評(píng)論
0/150
提交評(píng)論