![章添加最簡單Linux內(nèi)核模塊PPT課件_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/a14b27ea-ad70-4be9-a643-a314ac13a0f0/a14b27ea-ad70-4be9-a643-a314ac13a0f01.gif)
![章添加最簡單Linux內(nèi)核模塊PPT課件_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/a14b27ea-ad70-4be9-a643-a314ac13a0f0/a14b27ea-ad70-4be9-a643-a314ac13a0f02.gif)
![章添加最簡單Linux內(nèi)核模塊PPT課件_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/a14b27ea-ad70-4be9-a643-a314ac13a0f0/a14b27ea-ad70-4be9-a643-a314ac13a0f03.gif)
![章添加最簡單Linux內(nèi)核模塊PPT課件_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/a14b27ea-ad70-4be9-a643-a314ac13a0f0/a14b27ea-ad70-4be9-a643-a314ac13a0f04.gif)
![章添加最簡單Linux內(nèi)核模塊PPT課件_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/a14b27ea-ad70-4be9-a643-a314ac13a0f0/a14b27ea-ad70-4be9-a643-a314ac13a0f05.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 熟練掌握基本的Linux內(nèi)核模塊開發(fā)框架和編譯方法。 熟練掌握Linux內(nèi)核模塊添加流程。 理解Linux內(nèi)核模塊代碼中的一些常見宏和參數(shù)。 掌握Linux內(nèi)核模塊程序和應用程序的差異。 深入理解操作系統(tǒng)為用戶提供服務的方式、方法 深入理解計算機程序的運行方式本章目標第1頁/共16頁 實驗1:添加一個簡單的Linux內(nèi)核模塊(教材P.162)第12章 添加最簡單的Linux內(nèi)核模塊第2頁/共16頁 實驗內(nèi)容1.從教材提供的電子資源中找到或者按教材提示自己編寫簡單的Linux內(nèi)核模塊kello.c及其對應的Makefile文件2.編譯、安裝、刪除該模塊,查看該模塊的安裝位置、運行情況實驗1:添
2、加一個簡單的Linux內(nèi)核模塊第3頁/共16頁 實驗要求1.通過閱讀、執(zhí)行kello.c及其對應的Makefile文件,理解Linux內(nèi)核模塊LKM的基本框架和運行方式、原理。2.對比kello.c和應用程序hello.c在編寫、運行過程中的差異,理解操作系統(tǒng)為用戶提供服務的方式、方法。3.結合操作系統(tǒng)知識,通過實驗深入理解計算機程序在操作系統(tǒng)支持下的運行方式。第4頁/共16頁 原理/背景 用戶態(tài)和內(nèi)核態(tài) LKM基本框架、關鍵代碼第5頁/共16頁實驗1 添加一個簡單的Linux內(nèi)核模塊實驗背景和原理用戶態(tài)與內(nèi)核態(tài) 應用程序調(diào)用操作系統(tǒng)服務完成特定功能 操作系統(tǒng)為應用程序提供服務 應用程序工作在
3、用戶空間,為用戶態(tài) 操作系統(tǒng)模塊工作在內(nèi)核空間,為內(nèi)核態(tài)C/C+應用程序的運行機制第6頁/共16頁實驗1 添加一個簡單的Linux內(nèi)核模塊實驗背景和原理 Linux內(nèi)核模塊LKM (Linux Kernel Module) Linux是單內(nèi)核多模塊的操作系統(tǒng) 兩種開發(fā)內(nèi)核模塊的方法 靜態(tài)開發(fā) LKM LKM具有如下特點: 主要使用C語言編程,但也可以使用內(nèi)聯(lián)的匯編代碼; LKM工作在內(nèi)核空間,可以不受約束的運行,因此在一個LKM內(nèi)部讀者可以訪問對應用程序屏蔽的內(nèi)核數(shù)據(jù)結構、硬件設備等; LKM可以通過proc偽文件系統(tǒng)、內(nèi)存映射、特定的系統(tǒng)調(diào)用函數(shù)等不同的機制實現(xiàn)內(nèi)核空間和用戶空間的數(shù)據(jù)交換。
4、這些機制將在后續(xù)章節(jié)陸續(xù)講到。第7頁/共16頁實驗1 添加最簡單的Linux內(nèi)核模塊實驗背景和原理 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頁實驗1 添加最簡單的Linux內(nèi)核模塊實驗背景和原理 2. LKM代碼解釋1)任何一個內(nèi)核模塊文件必須要有兩個模塊管理函數(shù),即模塊初始化函數(shù)和模塊回收函數(shù),其原型如下所示:int init_module( void ); / 模塊初始化函數(shù),在模塊初始化時被調(diào)用void cleanup_module( void ); /模塊回收函數(shù),在模塊撤銷時調(diào)用2)為了模塊更高效地被加載、執(zhí)行和撤銷,尤其是內(nèi)存的分配和回收,在文件最后需要作如下聲明:module_in
6、it(init_module); /執(zhí)行模塊初始化函數(shù)module_exit(cleanup_module); /執(zhí)行模塊回收函數(shù)第9頁/共16頁實驗1 添加最簡單的Linux內(nèi)核模塊實驗背景和原理 3. LKM編譯第一種是集成到內(nèi)核、隨內(nèi)核一起編譯;這種方法把開發(fā)完的內(nèi)核文件放在Linux內(nèi)核源代碼相關目錄下,隨內(nèi)核一起編譯。缺點:耗時長;一旦代碼有錯,導致系統(tǒng)出現(xiàn)問題第二種則是單獨編譯、動態(tài)插入內(nèi)核;把將開發(fā)的內(nèi)核代碼文件直接進行編譯,然后使用命令動態(tài)插入內(nèi)核或者從內(nèi)核卸載。優(yōu)點:編譯速度快;單獨調(diào)試代碼缺點:每次系統(tǒng)啟動后都需要再加載代碼第10頁/共16頁實驗1 添加最簡單的Linux內(nèi)
7、核模塊實驗背景和原理 3. LKM編譯第二種則是單獨編譯、動態(tài)插入內(nèi)核;把將開發(fā)的內(nèi)核代碼文件直接進行編譯,然后使用命令動態(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存儲目錄下執(zhí)行make第11頁/共16頁實驗1 添加最簡單的Linux內(nèi)核模塊總結應用程序應用程序Linux內(nèi)核模塊內(nèi)核模塊運行空間用戶空間內(nèi)核空間入口Mainmodule_init()指定出口無module_exit()指定編譯gccMakefile鏈接ldinsmod運行直接運行insmod調(diào)試gdbkdebug,kdb,kgdb等表12.1 基于C語言的應用程序與內(nèi)核模塊的差異第12頁/共16頁實驗1 添加最簡
9、單的Linux內(nèi)核模塊實驗步驟 LKM編譯、添加、顯示執(zhí)行結果以及刪除模塊$ sudo rmmod kello.ko (刪除模塊)編譯插入模塊查看內(nèi)核日志中的執(zhí)行結果第13頁/共16頁拓展實驗 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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市房屋租賃合同范本
- 上海公寓出租合同范例
- 供熱合同范例封皮
- 2025年垃圾發(fā)電機項目可行性研究報告
- 豫劇樂隊伴奏十字訣
- 分期付合同范例
- 刷白合同范本
- 公司車輛洗車合同范本
- 代理辦理抵押合同范本
- 2025年白影貼面板項目投資可行性研究分析報告
- 防洪防汛安全知識教育課件
- 一年級科學石頭
- 部編人教版八年級語文下冊全冊課件
- 新起點英語二年級下冊全冊教案
- 《紅星照耀中國》整本書閱讀教學設計-統(tǒng)編版語文八年級上冊
- 【幼兒園戶外體育活動材料投放的現(xiàn)狀調(diào)查報告(定量論文)8700字】
- 帶狀皰疹與帶狀皰疹后遺神經(jīng)痛(HZ與PHN)
- JC-T 746-2023 混凝土瓦標準規(guī)范
- 漢密爾頓抑郁和焦慮量表
- 前列腺癌的診斷與治療
- 人教版八年級數(shù)學初中數(shù)學《平行四邊形》單元教材教學分析
評論
0/150
提交評論