版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
操作系統(tǒng)課程設(shè)計(jì)專(zhuān)題二:內(nèi)核模塊主講:張志欽1AbstractLinux內(nèi)核模塊12實(shí)驗(yàn)要求內(nèi)核模塊舉例321.Linux內(nèi)核模塊3單體內(nèi)核
VS
微內(nèi)核(概念)單體內(nèi)核(Microkernel)整個(gè)核心程序都是以核心空間(KernelSpace)的身份及監(jiān)管者模式(SupervisorMode)來(lái)運(yùn)行;操作系統(tǒng)的代碼高度緊密,所有的模塊都在同一塊尋址空間內(nèi)運(yùn)行微內(nèi)核(Microkernel)微內(nèi)核本身只提供最基本的操作系統(tǒng)的功能,比如進(jìn)程調(diào)度與消息傳遞等其他的功能由其獨(dú)立的模塊提供,每個(gè)獨(dú)立的功能模塊都可以是一個(gè)進(jìn)程。當(dāng)我們需要使用某個(gè)功能的時(shí)候,我們只需要在運(yùn)行的操作系統(tǒng)里安裝這個(gè)模塊,并且運(yùn)行對(duì)應(yīng)服務(wù),當(dāng)這個(gè)功能不再需要的時(shí)候,我們可以停止這個(gè)服務(wù),這樣這個(gè)功能模塊將不占據(jù)系統(tǒng)內(nèi)存和處理器的資源,而不會(huì)破壞當(dāng)前的系統(tǒng)正常運(yùn)4效率問(wèn)題驅(qū)動(dòng)程序問(wèn)題內(nèi)核升級(jí)問(wèn)題微內(nèi)核設(shè)計(jì)方式帶來(lái)的優(yōu)勢(shì)模塊化的方式設(shè)計(jì)操作系統(tǒng),模塊的設(shè)計(jì)者只需要關(guān)注自己的功能模塊。操作系統(tǒng)的更新時(shí),除了微內(nèi)核本身,可以動(dòng)態(tài)的更新其他的功能模塊在系統(tǒng)運(yùn)行的時(shí)候,可以根據(jù)需要?jiǎng)討B(tài)的使能/禁止對(duì)應(yīng)的模塊,以釋放計(jì)算機(jī)的資源。單體內(nèi)核
VS
微內(nèi)核(優(yōu)缺點(diǎn))5單體內(nèi)核
VS
微內(nèi)核(實(shí)例)單體內(nèi)核傳統(tǒng)的UNIX大行其道的Linux商業(yè)化非常成功的Solaris微內(nèi)核WindowsMacOSWindRiverVxWorksLinux系統(tǒng)如何解決單體內(nèi)核的缺陷6Linux的內(nèi)核模塊(概念)Linux內(nèi)核引入內(nèi)核模塊機(jī)制LKM--LoadableKernelModule通過(guò)動(dòng)態(tài)加載內(nèi)核模塊,使得在運(yùn)行過(guò)程中擴(kuò)展內(nèi)核的功能不需要的時(shí)候,卸載該內(nèi)核模塊7Linux的內(nèi)核模塊(概念)內(nèi)核模塊是一種沒(méi)有經(jīng)過(guò)鏈接,不能獨(dú)立運(yùn)行的目標(biāo)文件,是在內(nèi)核空間中運(yùn)行的程序。經(jīng)過(guò)鏈接裝載到內(nèi)核里面成為內(nèi)核的一部分,可以訪問(wèn)內(nèi)核的公用符號(hào)(函數(shù)和變量)。內(nèi)核模塊可以讓操作系統(tǒng)內(nèi)核在需要時(shí)載入和執(zhí)行,在不需要時(shí)由操作系統(tǒng)卸載。它們擴(kuò)展了操作系統(tǒng)內(nèi)核的功能卻不需要重新啟動(dòng)系統(tǒng)。如果沒(méi)有內(nèi)核模塊,我們不得不一次又一次重新編譯生成單內(nèi)核操作系統(tǒng)的內(nèi)核鏡像來(lái)加入新的功能。這還意味著一個(gè)臃腫的內(nèi)核。8Linux的內(nèi)核模塊(圖)9Linux的內(nèi)核模塊(圖)1011Linux的內(nèi)核模塊(優(yōu)缺點(diǎn))模塊機(jī)制的優(yōu)點(diǎn):減小內(nèi)核映像尺寸,增加系統(tǒng)靈活性;節(jié)省開(kāi)發(fā)時(shí)間;修改內(nèi)核,不必重新編譯整個(gè)內(nèi)核。模塊的目標(biāo)代碼一旦被鏈入內(nèi)核,作用和靜態(tài)鏈接的內(nèi)核目標(biāo)代碼完全等價(jià)。模塊機(jī)制的缺點(diǎn):對(duì)系統(tǒng)性能有一定損失;使用不當(dāng)時(shí)會(huì)導(dǎo)致系統(tǒng)崩潰;12Linux的內(nèi)核模塊(相關(guān)命令)內(nèi)核模塊的加載
#insmodmodule_name內(nèi)核模塊的卸載當(dāng)我們不需要內(nèi)核模塊了,為了減少系統(tǒng)資源的開(kāi)銷(xiāo),需要卸載時(shí)使用命令#rmmodmodule_name或者#modprobe–rmodule_name查看系統(tǒng)已經(jīng)加載的模塊#lsmod查看系統(tǒng)已經(jīng)加載的模塊信息#modinfo132.內(nèi)核模塊舉例14內(nèi)核模塊實(shí)現(xiàn)的幾個(gè)步驟新建模塊目錄用編輯器(vi)編輯源文件用編輯器編輯Makefile編譯模塊15內(nèi)核模塊源代碼
//hello.c
#include<linux/init.h>
//formodule_init()#include<linux/module.h>
//mustbeinclude#include<linux/kernel.h>
//forprintk()
staticint
hello_init(void){printk(“Helloworld\n”);return0;}staticvoid
hello_exit(void){printk(“Hellomoduleexit\n”);}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“rapide”);
內(nèi)核模塊說(shuō)明說(shuō)明:模塊入口函數(shù)為hello_init(),由module_init()宏指定,在模塊被加載的時(shí)候被調(diào)用向系統(tǒng)注冊(cè)入口函數(shù)的返回值為0表示成功,非0表示失敗模塊的退出函數(shù)為hello_exit(),由module_exit()宏指定,在模塊被卸載是被調(diào)用向系統(tǒng)注銷(xiāo),主要來(lái)完成資源的清理工作,它被調(diào)用完畢后,就模塊就被內(nèi)核清除了一個(gè)模塊最少需要有入口和退出函數(shù)16內(nèi)核模塊說(shuō)明說(shuō)明:2.4內(nèi)核后,引入識(shí)別代碼是否在GPL許可下發(fā)布的機(jī)制。在使用非公開(kāi)的源代碼產(chǎn)品時(shí)會(huì)得到警告。通過(guò)宏MODULE_LICENSE(“GPL”),設(shè)置模塊遵守GPL證書(shū),取消警告信息。宏MODULE_DESCRIPTION()用來(lái)描述模塊的用途。宏MODULE_AUTHOR()用來(lái)聲明模塊的作者。宏MODULE_SUPPORTED_DEVICE()聲明模塊支持的設(shè)備。這些宏都在頭文件linux/module.h定義。使用這些宏只是用來(lái)提供識(shí)別信息。17內(nèi)核模塊說(shuō)明printk()函數(shù)printk函數(shù)在Linux內(nèi)核中定義并且對(duì)模塊可用,為內(nèi)核提供日志功能,記錄內(nèi)核信息或用來(lái)給出警告。與標(biāo)準(zhǔn)C庫(kù)函數(shù)printf的行為相似。每個(gè)printk()聲明都會(huì)帶一個(gè)優(yōu)先級(jí)。內(nèi)核總共定義了八個(gè)優(yōu)先級(jí)的宏,在linux/kernel.h中定義。若你不指明優(yōu)先級(jí),DEFAULT_MESSAGE_LOGLEVEL這個(gè)默認(rèn)優(yōu)先級(jí)將被采用。信息添加到文件/var/log/messages,可直接查看,或者用命令dmesg查看。在X-windows下的終端insmod一個(gè)模塊,日志信息只會(huì)記錄在日志文件中,而不在終端打印。18內(nèi)核模塊說(shuō)明19寫(xiě)內(nèi)核程序需要注意:
內(nèi)核模塊的makefileobj-m:=hello.oKERNELDIR:=/lib/modules/2.6.20/buildPWD:=$(shellpwd)
modules:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
modules_install:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules_installclean:
rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions20內(nèi)核模塊的makefileMakefile說(shuō)明:為2.6版本內(nèi)核構(gòu)造模塊首先需要有配置并構(gòu)建好的2.6內(nèi)核源代碼樹(shù)。而且最好運(yùn)行和模塊對(duì)應(yīng)的內(nèi)核。2.6內(nèi)核的模塊要和內(nèi)核源代碼樹(shù)中的目標(biāo)文件連接。2.6內(nèi)核的構(gòu)建系統(tǒng)Kbuild,使得內(nèi)核源碼外的內(nèi)核模塊編譯跟內(nèi)核編譯統(tǒng)一起來(lái),無(wú)須手動(dòng)給定這些參數(shù)。改變目錄到用-C選項(xiàng)提供的內(nèi)核源碼目錄,在那里找到內(nèi)核的頂層makefile。M=選項(xiàng)使makefile在試圖建立模塊目標(biāo)前,回到模塊源碼目錄。2122內(nèi)核模塊的編譯在hello模塊源文件所在目錄上#make得到hello.ko就是產(chǎn)生的內(nèi)核模塊23內(nèi)核模塊的加載
#insmodhello.ko24內(nèi)核模塊的卸載
#rmmodhello內(nèi)核模塊安裝時(shí)如何傳遞參數(shù)2526內(nèi)核模塊的參數(shù)內(nèi)核允許對(duì)模塊指定參數(shù),這些參數(shù)可在裝載模塊時(shí)改變。在運(yùn)行insmod或者modprobe命令時(shí)給出參數(shù)的值。
insmodhello.kohowmany=10whom="Mom"如何定義實(shí)現(xiàn)模塊參數(shù)呢?要傳遞參數(shù)給模塊,首先將獲取參數(shù)值的變量聲明為全局變量。然后使用宏moudle_param來(lái)聲明
intmyint=3;
module_param(myint,int,0);27內(nèi)核模塊的參數(shù)module_param(name,type,perm); perm是一個(gè)權(quán)限值,控制誰(shuí)可以存取模塊參數(shù)在sysfs中的表示。 perm被設(shè)為0,就根本沒(méi)有sysfs項(xiàng)這個(gè)宏定義應(yīng)當(dāng)放在任何函數(shù)之外,典型地是出現(xiàn)在源文件的前面。應(yīng)該總是為變量賦初值。28內(nèi)核模塊的參數(shù)宏MODULE_PARM_DESC()
用來(lái)注解該模塊可以接收的參數(shù)。該宏兩個(gè)參數(shù):變量名和一個(gè)對(duì)該變量的描述。模塊可以用這樣的命令行加載:
./insmodmymodule.komyvariable=229內(nèi)核模塊的參數(shù)聲明一個(gè)數(shù)組參數(shù):
module_param_array(name,type,num,perm);name數(shù)組的名子(也是參數(shù)名)type數(shù)組元素的類(lèi)型num是數(shù)組元素的個(gè)數(shù),模塊加載者拒絕比數(shù)組能放下的多的值。2.6.9傳遞數(shù)組個(gè)數(shù)變量名,2.6.11傳遞數(shù)組個(gè)數(shù)變量的地址。perm是通常的權(quán)限值.如果數(shù)組參數(shù)在加載時(shí)設(shè)置。30內(nèi)核模塊的參數(shù)聲明一個(gè)數(shù)組參數(shù):
module_param_array(name,type,num,perm);name數(shù)組的名子(也是參數(shù)名)type數(shù)組元素的類(lèi)型num是數(shù)組元素的個(gè)數(shù),模塊加載者拒絕比數(shù)組能放下的多的值。2.6.9傳遞數(shù)組個(gè)數(shù)變量名,2.6.11傳遞數(shù)組個(gè)數(shù)變量的地址。perm是通常的權(quán)限值.如果數(shù)組參數(shù)在加載時(shí)設(shè)置。31內(nèi)核模塊的參數(shù)參數(shù)數(shù)組的定義:staticinttest[5]={1,2,3,4,5};staticintnum=5;module_param(num,int,0);module_param_ar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國(guó)電建集團(tuán)鐵路建設(shè)限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- X光檢查車(chē)相關(guān)行業(yè)投資方案范本
- 2025中國(guó)建筑裝飾集團(tuán)華中公司中建幕墻限公司校園招聘120人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中信建投證券股份限公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年陜西延安事業(yè)單位招聘533人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年浙江臺(tái)州市仙居縣國(guó)企業(yè)員工和行政事業(yè)單位編外人員招聘221人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川眉山事業(yè)單位招聘(499人)歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海文學(xué)創(chuàng)作中心擬聘人員歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年地坪材料加工定制合同范本3篇
- 2025上半年安徽事業(yè)單位聯(lián)考高頻重點(diǎn)提升(共500題)附帶答案詳解
- 北京市房山區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末語(yǔ)文試題(解析版)
- 2024-2030年中國(guó)室內(nèi)滑雪場(chǎng)市場(chǎng)需求預(yù)測(cè)及發(fā)展規(guī)劃研究報(bào)告
- 期末綜合素養(yǎng)評(píng)價(jià)一(試題)-2024-2025學(xué)年三年級(jí)上冊(cè)科學(xué)教科版
- 動(dòng)車(chē)運(yùn)用所施工組織設(shè)計(jì)
- 新聞媒體編輯與發(fā)布規(guī)范流程
- 03S702鋼筋混凝土化糞池-標(biāo)準(zhǔn)圖集
- 耳鼻咽喉-頭頸外科:緒論
- 統(tǒng)編版 七年級(jí)上冊(cè) 第五單元 活動(dòng)·探究 任務(wù)一 體會(huì)人與動(dòng)物的關(guān)系 20 狼(教學(xué)設(shè)計(jì))
- 特朗普第二任總統(tǒng)任期的國(guó)際經(jīng)濟(jì)影響-2024-10-宏觀大勢(shì)
- 2024年高中語(yǔ)文課內(nèi)文言文復(fù)習(xí)《項(xiàng)脊軒志》課后練習(xí)、探究性閱讀含答案解析翻譯
- 2024年全國(guó)統(tǒng)一高考數(shù)學(xué)試卷(新高考Ⅰ)含答案
評(píng)論
0/150
提交評(píng)論