章添加最簡單Linux內(nèi)核模塊PPT課件_第1頁
章添加最簡單Linux內(nèi)核模塊PPT課件_第2頁
章添加最簡單Linux內(nèi)核模塊PPT課件_第3頁
章添加最簡單Linux內(nèi)核模塊PPT課件_第4頁
章添加最簡單Linux內(nèi)核模塊PPT課件_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 熟練掌握基本的Linux內(nèi)核模塊開發(fā)框架和編譯方法。 熟練掌握Linux內(nèi)核模塊添加流程。 理解Linux內(nèi)核模塊代碼中的一些常見宏和參數(shù)。 掌握Linux內(nèi)核模塊程序和應(yīng)用程序的差異。 深入理解操作系統(tǒng)為用戶提供服務(wù)的方式、方法 深入理解計(jì)算機(jī)程序的運(yùn)行方式本章目標(biāo)第1頁/共16頁 實(shí)驗(yàn)1:添加一個(gè)簡單的Linux內(nèi)核模塊(教材P.162)第12章 添加最簡單的Linux內(nèi)核模塊第2頁/共16頁 實(shí)驗(yàn)內(nèi)容1.從教材提供的電子資源中找到或者按教材提示自己編寫簡單的Linux內(nèi)核模塊kello.c及其對(duì)應(yīng)的Makefile文件2.編譯、安裝、刪除該模塊,查看該模塊的安裝位置、運(yùn)行情況實(shí)驗(yàn)1:添

2、加一個(gè)簡單的Linux內(nèi)核模塊第3頁/共16頁 實(shí)驗(yàn)要求1.通過閱讀、執(zhí)行kello.c及其對(duì)應(yīng)的Makefile文件,理解Linux內(nèi)核模塊LKM的基本框架和運(yùn)行方式、原理。2.對(duì)比kello.c和應(yīng)用程序hello.c在編寫、運(yùn)行過程中的差異,理解操作系統(tǒng)為用戶提供服務(wù)的方式、方法。3.結(jié)合操作系統(tǒng)知識(shí),通過實(shí)驗(yàn)深入理解計(jì)算機(jī)程序在操作系統(tǒng)支持下的運(yùn)行方式。第4頁/共16頁 原理/背景 用戶態(tài)和內(nèi)核態(tài) LKM基本框架、關(guān)鍵代碼第5頁/共16頁實(shí)驗(yàn)1 添加一個(gè)簡單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理用戶態(tài)與內(nèi)核態(tài) 應(yīng)用程序調(diào)用操作系統(tǒng)服務(wù)完成特定功能 操作系統(tǒng)為應(yīng)用程序提供服務(wù) 應(yīng)用程序工作在

3、用戶空間,為用戶態(tài) 操作系統(tǒng)模塊工作在內(nèi)核空間,為內(nèi)核態(tài)C/C+應(yīng)用程序的運(yùn)行機(jī)制第6頁/共16頁實(shí)驗(yàn)1 添加一個(gè)簡單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 Linux內(nèi)核模塊LKM (Linux Kernel Module) Linux是單內(nèi)核多模塊的操作系統(tǒng) 兩種開發(fā)內(nèi)核模塊的方法 靜態(tài)開發(fā) LKM LKM具有如下特點(diǎn): 主要使用C語言編程,但也可以使用內(nèi)聯(lián)的匯編代碼; LKM工作在內(nèi)核空間,可以不受約束的運(yùn)行,因此在一個(gè)LKM內(nèi)部讀者可以訪問對(duì)應(yīng)用程序屏蔽的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、硬件設(shè)備等; LKM可以通過proc偽文件系統(tǒng)、內(nèi)存映射、特定的系統(tǒng)調(diào)用函數(shù)等不同的機(jī)制實(shí)現(xiàn)內(nèi)核空間和用戶空間的數(shù)據(jù)交換。

4、這些機(jī)制將在后續(xù)章節(jié)陸續(xù)講到。第7頁/共16頁實(shí)驗(yàn)1 添加最簡單的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頁/共16頁實(shí)驗(yàn)1 添加最簡單的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ù),在模塊撤銷時(shí)調(diào)用2)為了模塊更高效地被加載、執(zhí)行和撤銷,尤其是內(nèi)存的分配和回收,在文件最后需要作如下聲明:module_in

6、it(init_module); /執(zhí)行模塊初始化函數(shù)module_exit(cleanup_module); /執(zhí)行模塊回收函數(shù)第9頁/共16頁實(shí)驗(yàn)1 添加最簡單的Linux內(nèi)核模塊實(shí)驗(yàn)背景和原理 3. LKM編譯第一種是集成到內(nèi)核、隨內(nèi)核一起編譯;這種方法把開發(fā)完的內(nèi)核文件放在Linux內(nèi)核源代碼相關(guān)目錄下,隨內(nèi)核一起編譯。缺點(diǎn):耗時(shí)長;一旦代碼有錯(cuò),導(dǎo)致系統(tǒng)出現(xiàn)問題第二種則是單獨(dú)編譯、動(dòng)態(tài)插入內(nè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頁/共16頁實(shí)驗(yàn)1 添加最簡單的Linux內(nèi)

7、核模塊實(shí)驗(yàn)背景和原理 3. LKM編譯第二種則是單獨(dú)編譯、動(dòng)態(tài)插入內(nè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頁/共16頁實(shí)驗(yàn)1 添加最簡單的Linux內(nèi)核模塊總結(jié)應(yīng)用程序應(yīng)用程序Linux內(nèi)核模塊內(nèi)核模塊運(yùn)行空間用戶空間內(nèi)核空間入口Mainmodule_init()指定出口無module_exit()指定編譯gccMakefile鏈接ldinsmod運(yùn)行直接運(yùn)行insmod調(diào)試gdbkdebug,kdb,kgdb等表12.1 基于C語言的應(yīng)用程序與內(nèi)核模塊的差異第12頁/共16頁實(shí)驗(yàn)1 添加最簡

9、單的Linux內(nèi)核模塊實(shí)驗(yàn)步驟 LKM編譯、添加、顯示執(zhí)行結(jié)果以及刪除模塊$ sudo rmmod kello.ko (刪除模塊)編譯插入模塊查看內(nèi)核日志中的執(zhí)行結(jié)果第13頁/共16頁拓展實(shí)驗(yàn) printk和某些常見宏 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論