版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
內(nèi)核裁剪篇1可編輯ppt內(nèi)核裁剪篇1可編輯ppt為什么要裁減內(nèi)核自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)
系統(tǒng)將擁有更多的內(nèi)存(內(nèi)核部分將不會(huì)被交換到虛擬內(nèi)存中)
不需要的功能編譯進(jìn)入內(nèi)核可能會(huì)增加被系統(tǒng)攻擊者利用的漏洞
將某種功能編譯為模塊方式會(huì)比編譯到內(nèi)核內(nèi)的方式速度要慢一些
2可編輯ppt為什么要裁減內(nèi)核自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)如何升級(jí)內(nèi)核添加進(jìn)內(nèi)核的方式:將新增加部分編譯到內(nèi)核中(build-in)把新增加部分編譯成模塊(module),動(dòng)態(tài)加載。各自特點(diǎn):編譯到內(nèi)核中,在內(nèi)核啟動(dòng)時(shí)就可以自動(dòng)支持相應(yīng)部分的功能,這樣的優(yōu)點(diǎn)是方便、速度快,機(jī)器一啟動(dòng),用戶(hù)就可以使用這部分功能了;缺點(diǎn)是會(huì)使內(nèi)核變得龐大起來(lái),不管你是否需要這部分功能,它都會(huì)存在。建議經(jīng)常使用的部分直接編譯到內(nèi)核中,比如網(wǎng)卡。如果編譯成模塊,就會(huì)生成對(duì)應(yīng)的.o文件,在使用的時(shí)候可以動(dòng)態(tài)加載,優(yōu)點(diǎn)是不會(huì)使內(nèi)核過(guò)分龐大,缺點(diǎn)是你得自己來(lái)調(diào)用這些模塊。
3可編輯ppt如何升級(jí)內(nèi)核添加進(jìn)內(nèi)核的方式:3可編輯ppt內(nèi)核的模塊式結(jié)構(gòu)內(nèi)核模塊是Linux內(nèi)核向外部提供的一個(gè)接口,其全稱(chēng)為動(dòng)態(tài)可加載內(nèi)核模塊(LoadableKernelModule,LKM),簡(jiǎn)稱(chēng)為模塊。Linux內(nèi)核之所以提供模塊機(jī)制,是因?yàn)樗旧硎且粋€(gè)單內(nèi)核(monolithickernel)。單內(nèi)核的最大優(yōu)點(diǎn)是效率高,因?yàn)樗械膬?nèi)容都集成在一起,但其缺點(diǎn)是可擴(kuò)展性和可維護(hù)性相對(duì)較差,模塊機(jī)制就是為了彌補(bǔ)這一缺陷。4可編輯ppt內(nèi)核的模塊式結(jié)構(gòu)內(nèi)核模塊是Linux內(nèi)核向外部提供的一個(gè)接口模塊
模塊是具有獨(dú)立功能的程序,它可以被單獨(dú)編譯,但不能獨(dú)立運(yùn)行。它在運(yùn)行時(shí)被鏈接到內(nèi)核作為內(nèi)核的一部分在內(nèi)核空間運(yùn)行,這與運(yùn)行在用戶(hù)空間的進(jìn)程是不同的。模塊通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成,用來(lái)實(shí)現(xiàn)一種文件系統(tǒng)、一個(gè)驅(qū)動(dòng)程序或內(nèi)核中其他上層的功能。
5可編輯ppt模塊模塊是具有獨(dú)立功能的程序,它可以被單獨(dú)編譯,但不能獨(dú)立模塊與內(nèi)核的關(guān)系模塊和內(nèi)核都在內(nèi)核空間運(yùn)行,模塊編程在一定意義上就是內(nèi)核編程。因?yàn)閮?nèi)核版本的每次變化使得其中的某些函數(shù)名也會(huì)相應(yīng)地發(fā)生變化,因此模塊編程與內(nèi)核版本密切相關(guān)。本課中所涉及的內(nèi)核編程基于的Linux內(nèi)核為2.4.x版本,對(duì)于其他版本,可能還需要做一些調(diào)整。6可編輯ppt模塊與內(nèi)核的關(guān)系模塊和內(nèi)核都在內(nèi)核空間運(yùn)行,模塊編程在一定應(yīng)用程序與內(nèi)核模塊的比較C語(yǔ)言應(yīng)用程序內(nèi)核模塊程序使用函數(shù)libc庫(kù)內(nèi)核函數(shù)運(yùn)行空間用戶(hù)空間內(nèi)核空間運(yùn)行權(quán)限普通用戶(hù)超級(jí)用戶(hù)入口函數(shù)main()init_module()出口函數(shù)exit()cleanup_module()編譯gcc-cgcc–c–D__KERNEl___DMOKULE連接gccGcc運(yùn)行直接運(yùn)行insmod調(diào)試gdbkdbug,kdb,kgdb等7可編輯ppt應(yīng)用程序與內(nèi)核模塊的比較C語(yǔ)言應(yīng)用程序內(nèi)核模塊程序使用函數(shù)l名字空間污染
namespacepullution
當(dāng)存在大量的函數(shù)和全局變量,并且它們的名字沒(méi)有明確的含義以至于難以區(qū)別時(shí),就會(huì)發(fā)生所謂的名字空間污染。程序員需花費(fèi)更多的時(shí)間和精力去記住這些已經(jīng)保留的名字并為新符號(hào)尋找一個(gè)不重復(fù)的名字。名字空間沖突可能照成很多問(wèn)題,如加載模塊失敗等古怪問(wèn)題解決辦法將所有符號(hào)定義為靜態(tài)變量對(duì)于非全局變量的符號(hào)前加上一個(gè)內(nèi)核中唯一的前綴。8可編輯ppt名字空間污染
namespacepullution當(dāng)存在用戶(hù)空間與內(nèi)核空間操作系統(tǒng)的作用為程序提供一個(gè)計(jì)算機(jī)硬件的一致視圖。負(fù)責(zé)程序的獨(dú)立操作以及保護(hù)資源不受非法訪(fǎng)問(wèn)。內(nèi)核運(yùn)行在最高級(jí)(管理員模式supervisormode),可以進(jìn)行所有操作。應(yīng)用程序運(yùn)行在優(yōu)先級(jí)最低即所謂的用戶(hù)模式(usermode),在這一級(jí)中處理器控制著對(duì)硬件的直接訪(fǎng)問(wèn)以及對(duì)內(nèi)存的非授權(quán)訪(fǎng)問(wèn)。9可編輯ppt用戶(hù)空間與內(nèi)核空間操作系統(tǒng)的作用9可編輯pptlsmod查看已注冊(cè)的內(nèi)核10可編輯pptlsmod查看已注冊(cè)的內(nèi)核10可編輯ppt內(nèi)核模塊實(shí)例
#define__KERNEL__
#defineMODULE#include<linux/module.h>#include<linux/kernel.h>intinit_module(void){ printk("HellowWorld!\n”); return0;)voidcleanup_module(void){ printk("Goodbye,cruelworld!\n”);) module_init(hello_init);
module_exit(hello_exit);
11可編輯ppt內(nèi)核模塊實(shí)例 #define__KERNEL__11可編模塊主要函數(shù)及定義頭文件及宏定義 #define__KERNEL__ #defineMODULE#include<linux/module.h>#include<linux/kernel.h>module_init():模塊的初始化函數(shù),
module_exit():模塊的卸載函數(shù),
初始化函數(shù)和卸載函數(shù)必須成對(duì)出現(xiàn)。模塊常用信息:作者、描述、版權(quán)等, MODULE_AUTHOR("author");
MODULE_DESCRIPTION("thedescription");
MODULE_LICENSE("GPL");寫(xiě)內(nèi)核或內(nèi)核模塊不能用寫(xiě)應(yīng)用程序時(shí)的系統(tǒng)調(diào)用或函數(shù)庫(kù).12可編輯ppt模塊主要函數(shù)及定義頭文件及宏定義12可編輯ppt模塊的編譯KDIR=/YF2410/kernelINCLUDEDIR=$(KDIR)/includeCFLAGS=-D__KERNEL__-DMODULE-I$(INCLUDEDIR)CC=arm-linux-gccOBJS=hello.o$(OBJS):hello.c $(CC)$(CFLAGS)-c$^clean: -rm-f$(OBJS)*.o13可編輯ppt模塊的編譯KDIR=/YF2410/kernel13可編模塊的加載與卸載Insmod./hello.ormmodhello14可編輯ppt模塊的加載與卸載Insmod./hello.o14可編輯pmodutils
modutils是管理內(nèi)核模塊的一個(gè)軟件包。用戶(hù)可以在任何提供內(nèi)核源代碼的地方獲取modutils(modutils-x.y.z.tar,gz)源代碼,然后選擇最高級(jí)別的、patch.x.y.z等于或小于當(dāng)前版本的內(nèi)核版本,安裝后在/sbin目錄下就會(huì)有insmod、rmmod、ksyms、lsmod、modprobe等實(shí)用程序。當(dāng)然,通常在加載Linux內(nèi)核時(shí),modutils已經(jīng)被載入。15可編輯pptmodutils modutils是管理內(nèi)核模塊的一個(gè)軟Modutils的常用命令insmod命令調(diào)用insmod程序,把需要插入的模塊以目標(biāo)代碼的形式插入到內(nèi)核中。在插入的時(shí)候,insmod自動(dòng)調(diào)用init_module()函數(shù)運(yùn)行。注意,只有超級(jí)用戶(hù)才能使用這個(gè)命令。格式 #insmod[path]modulename.ormmod命令調(diào)用rmmod程序,將已經(jīng)插入內(nèi)核的模塊從內(nèi)核中移出。rmmod會(huì)自動(dòng)運(yùn)行cleanup_module()函數(shù),格式: #rmmod[path]modulename.o16可編輯pptModutils的常用命令insmod命令16可編輯pptModutils的常用命令lsmod命令調(diào)用lsmod程序?qū)@示當(dāng)前系統(tǒng)中正在使用的模塊信息。實(shí)際上這個(gè)程序的功能就是讀?。痯roc/modules文件中的數(shù)據(jù)。格式為: #lsmodksyms命令Ksyms這個(gè)程序用來(lái)顯示內(nèi)核符號(hào)和模塊符號(hào)表的信息。與lsmod相似,它的功能是讀取/proc文件系統(tǒng)中另一個(gè)文件/proc/ksyms的內(nèi)容17可編輯pptModutils的常用命令lsmod命令17可編輯ppt模塊的導(dǎo)出和用戶(hù)空間的應(yīng)用程序不同的是,引入一個(gè)模塊的目的常常是為了給內(nèi)核提供一些routine,來(lái)完成特定的功能,很少有模塊什么符號(hào)都不導(dǎo)出。Linux為用戶(hù)提供了如下宏: EXPORT_SYMBOL(var);//輸出symbolvar
EXPORT_SYMBOL_GPL(var);//輸出的symbol版權(quán)為GPL
18可編輯ppt模塊的導(dǎo)出和用戶(hù)空間的應(yīng)用程序不同的是,引入一個(gè)模塊的目的常內(nèi)核符號(hào)表模塊與模塊之間的共享方式共享變量函數(shù)內(nèi)核只把各個(gè)模塊中主要的變量和函數(shù)放在一個(gè)特定的區(qū)段,這些變量和函數(shù)統(tǒng)稱(chēng)為符號(hào)。對(duì)于內(nèi)核這個(gè)特殊的母模塊,在kemel/ksyms.c中定義了可以從中“移出”的符號(hào)。19可編輯ppt內(nèi)核符號(hào)表模塊與模塊之間的共享方式19可編輯ppt模塊的依賴(lài)關(guān)系模塊依賴(lài) 如前所述,內(nèi)核符號(hào)表記錄了所有模塊可以訪(fǎng)問(wèn)的符號(hào)及相應(yīng)的地址。當(dāng)一個(gè)新的模塊被裝入內(nèi)核后,它所聲明的某些符號(hào)就會(huì)被登記到這個(gè)表中,使這些符號(hào)可能被其他模塊所引用,這就引出了模塊依賴(lài)問(wèn)題。一個(gè)模塊A引用從另一個(gè)模塊B中移出的符號(hào),叫做模塊B被模塊A引用,或者模塊A依賴(lài)模塊B。如果要鏈接模塊A,必須先鏈接模塊B。這種模塊間相互依賴(lài)的關(guān)系叫做模塊依賴(lài)。20可編輯ppt模塊的依賴(lài)關(guān)系模塊依賴(lài)20可編輯ppt模塊引用計(jì)數(shù)器為了確保安全地卸載模塊,每個(gè)模塊都有一個(gè)引用計(jì)數(shù)器。當(dāng)執(zhí)行模塊所涉及的操作時(shí)就遞增該模塊的計(jì)數(shù)器,在操作結(jié)束時(shí)就遞減這個(gè)計(jì)數(shù)器。另外,當(dāng)模塊B被模塊A引用時(shí),模塊B的引用計(jì)數(shù)器就遞增;引用結(jié)束,計(jì)數(shù)器遞減。什么時(shí)候可以卸載這個(gè)模塊?當(dāng)然只有這個(gè)計(jì)數(shù)器值為0的時(shí)候。例如,當(dāng)一個(gè)文件系統(tǒng)還安裝在系統(tǒng)中時(shí)就不能將其卸載,而當(dāng)這個(gè)文件系統(tǒng)不再被使用時(shí),引用計(jì)數(shù)器為0,可以卸載。在linux/module.h文件中定義了如下三個(gè)宏來(lái)維護(hù)計(jì)數(shù)器:MODINCUSECOUNT當(dāng)前模塊計(jì)數(shù)器加1MODDECUSECOUNT當(dāng)前模塊計(jì)數(shù)器減1MODmUSE計(jì)數(shù)器非0時(shí)返回真21可編輯ppt模塊引用計(jì)數(shù)器為了確保安全地卸載模塊,每個(gè)模塊都有一個(gè)引用內(nèi)核的編譯22可編輯ppt內(nèi)核的編譯22可編輯ppt內(nèi)核簡(jiǎn)介內(nèi)核是一個(gè)操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux的一個(gè)重要特點(diǎn)就是其源代碼的公開(kāi)性。其所有的內(nèi)核源程序都可以在/usr/src/Linux下找到,大部分應(yīng)用軟件都是遵循GPL設(shè)計(jì)的,用戶(hù)可以獲取相應(yīng)的源程序代碼。23可編輯ppt內(nèi)核簡(jiǎn)介內(nèi)核是一個(gè)操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)配置內(nèi)核所需指令#makeconfig 基于文本的、最為傳統(tǒng)的配置界面。#makemenuconfig 基于文本菜單的配置界面,字符終端下推薦使用。#makexconfig 基于圖形窗口模式的配置界面,Xwindow環(huán)境下推薦使用。#makeoldconfig 如果只想在原來(lái)內(nèi)核配置的基礎(chǔ)上修改一些小地方,用此命令會(huì)省去不少麻煩24可編輯ppt配置內(nèi)核所需指令#makeconfig24可編輯ppt1代碼成熟度選項(xiàng)對(duì)那些還在測(cè)試階段的代碼,驅(qū)動(dòng)模塊等的支持。對(duì)那些已經(jīng)老舊的,被現(xiàn)有文件替代了的驅(qū)動(dòng),代碼的支持,可以不選。
動(dòng)態(tài)加載模塊支持選項(xiàng)支持模塊加載功能
該項(xiàng)用來(lái)支持跨內(nèi)核版本的模塊支持。通過(guò)kerneld程序的幫助在需要的時(shí)候自動(dòng)載入或卸載那些可載入式的模塊。
系統(tǒng)類(lèi)型,主要是CPU類(lèi)型,以及于此相關(guān)的內(nèi)容
常用設(shè)備設(shè)置可熱拔插的設(shè)備的支持網(wǎng)絡(luò)支持systemV的進(jìn)程間通訊支持在不重啟情況下直接改變內(nèi)選一個(gè)模擬數(shù)學(xué)協(xié)處理器電源管理
MTD(flash,RAM等)存儲(chǔ)設(shè)備的設(shè)置支持對(duì)MTD的分區(qū)操作
所有MTD設(shè)備提供一個(gè)字符設(shè)備,以便進(jìn)行讀寫(xiě)操作支持利用RAM芯片作為緩存來(lái)使用MTD設(shè)備對(duì)NANDflash進(jìn)行設(shè)置網(wǎng)絡(luò)協(xié)議支持pppTcp/ip25可編輯ppt1代碼成熟度選項(xiàng)動(dòng)態(tài)加載模塊支持選項(xiàng)系統(tǒng)類(lèi)型,主要是CPU類(lèi)支持isdn服務(wù)若想啟動(dòng)該項(xiàng)支持ISDN通訊,應(yīng)啟動(dòng)前面提到的NetworkingDevices中的SLIP或PPP。
對(duì)輸入設(shè)備的支持鍵盤(pán)、鼠標(biāo)、游戲手柄等字符設(shè)備的設(shè)置虛擬終端虛擬終端控制臺(tái)串口設(shè)置對(duì)I2C設(shè)備的支持
26可編輯ppt支持isdn服務(wù)對(duì)輸入設(shè)備的支持字符設(shè)備的設(shè)置26可編輯pp多媒體設(shè)備的支持對(duì)視頻的支持(V4L)對(duì)音頻的支持文件系統(tǒng)的支持份額分配支持。支持對(duì)每個(gè)用戶(hù)使用的磁盤(pán)空間進(jìn)行限制。ROMfilesystemsupportEXT3EXT2網(wǎng)絡(luò)文件系統(tǒng)(NFS)光驅(qū)的支持對(duì)各國(guó)語(yǔ)言的支持。一些有關(guān)內(nèi)核調(diào)試及內(nèi)核運(yùn)行信息的選項(xiàng)可以全部關(guān)掉
控制臺(tái)設(shè)備支持
VGAtextconsolePc上使用FrameBuffer設(shè)備
640×48016bps27可編輯ppt多媒體設(shè)備的支持文件系統(tǒng)的支持一些有關(guān)內(nèi)核調(diào)試及內(nèi)核運(yùn)行信息內(nèi)核選項(xiàng)Y將該功能編譯進(jìn)內(nèi)核。N不將該功能編譯進(jìn)內(nèi)核。M將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊。28可編輯ppt內(nèi)核選項(xiàng)Y將該功能編譯進(jìn)內(nèi)核。28可編輯ppt編譯命令#makedep#makeclean#makebzlmage或makezlmagemakedep實(shí)際上讀取配置過(guò)程生成的配置文件,創(chuàng)建對(duì)應(yīng)于配置的依賴(lài)關(guān)系樹(shù),從而決定哪些需要編譯而哪些不需要;makeclean完全刪除前面步驟留下的文件,以避免出現(xiàn)一些錯(cuò)誤;makezlmage和makebzlmage命令則完全編譯內(nèi)核,二者生成的內(nèi)核都是使用gzip壓縮的,只要使用其中的一個(gè)命令就夠了,它們的區(qū)別在于使用makebzlmage命令可以生成稍大一點(diǎn)的內(nèi)核。這里建議大家使用makebzlmage命令。
29可編輯ppt編譯命令#makedep29可編輯ppt2.6內(nèi)核支持更多處理器,比如AMD64、一些大型機(jī)及嵌入式等,同時(shí)改進(jìn)了對(duì)已有處理器的支持。采用搶占式內(nèi)核,使交互式操作的響應(yīng)速度大大提高。修改了I/O子系統(tǒng)部分,保證在各種工作負(fù)荷下I/O都有很好的響應(yīng)速度。改進(jìn)和部分重寫(xiě)了Modules功能,使之更穩(wěn)定。改進(jìn)對(duì)USB的支持,使之能夠支持當(dāng)前多數(shù)主流的USB設(shè)備。加強(qiáng)對(duì)無(wú)線(xiàn)設(shè)備的支持。新內(nèi)核合并了uCLinux,添加了新的體系結(jié)構(gòu)和處理器類(lèi)型,包括對(duì)無(wú)MMU系統(tǒng)的支持。實(shí)際上2.6版內(nèi)核的很多新特性都是針對(duì)企業(yè)應(yīng)用的改進(jìn),比如最大支持64個(gè)CPU、64GB內(nèi)存、支持NUMA(非一致存儲(chǔ)訪(fǎng)問(wèn))等。對(duì)于普通PC用戶(hù),從2.6版內(nèi)核中感受到的將是USB支持、響應(yīng)速度、音頻、無(wú)線(xiàn)設(shè)備、PDA等方面的提高。30可編輯ppt2.6內(nèi)核支持更多處理器,比如AMD64、一些大型機(jī)及嵌入式Linux2.6內(nèi)核VSLinux2.4內(nèi)核
服務(wù)器領(lǐng)域文件系統(tǒng)嵌入式系統(tǒng)Linux2.6內(nèi)核擴(kuò)展多嵌入式平臺(tái)支持的一個(gè)主要途徑就是把uCLinux的大部分并入主流內(nèi)核功能中。目前許多嵌入式處理器如ARM系列等,很多都是無(wú)MMU的。uCLinux在嵌入式系統(tǒng)中的應(yīng)用非常廣泛。因此,Linux2.6對(duì)無(wú)MMU體系結(jié)構(gòu)的支持,及將Linux和uCLinux合并到統(tǒng)一的新內(nèi)核中,無(wú)疑為L(zhǎng)inux在嵌入式領(lǐng)域的廣泛應(yīng)用加重了砝碼。31可編輯pptLinux2.6內(nèi)核VSLinux2.4內(nèi)核服務(wù)器領(lǐng)此課件下載可自行編輯修改,此課件供參考!部分內(nèi)容來(lái)源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)與我聯(lián)系刪除!感謝你的觀(guān)看!此課件下載可自行編輯修改,此課件供參考!內(nèi)核裁剪篇33可編輯ppt內(nèi)核裁剪篇1可編輯ppt為什么要裁減內(nèi)核自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)
系統(tǒng)將擁有更多的內(nèi)存(內(nèi)核部分將不會(huì)被交換到虛擬內(nèi)存中)
不需要的功能編譯進(jìn)入內(nèi)核可能會(huì)增加被系統(tǒng)攻擊者利用的漏洞
將某種功能編譯為模塊方式會(huì)比編譯到內(nèi)核內(nèi)的方式速度要慢一些
34可編輯ppt為什么要裁減內(nèi)核自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)如何升級(jí)內(nèi)核添加進(jìn)內(nèi)核的方式:將新增加部分編譯到內(nèi)核中(build-in)把新增加部分編譯成模塊(module),動(dòng)態(tài)加載。各自特點(diǎn):編譯到內(nèi)核中,在內(nèi)核啟動(dòng)時(shí)就可以自動(dòng)支持相應(yīng)部分的功能,這樣的優(yōu)點(diǎn)是方便、速度快,機(jī)器一啟動(dòng),用戶(hù)就可以使用這部分功能了;缺點(diǎn)是會(huì)使內(nèi)核變得龐大起來(lái),不管你是否需要這部分功能,它都會(huì)存在。建議經(jīng)常使用的部分直接編譯到內(nèi)核中,比如網(wǎng)卡。如果編譯成模塊,就會(huì)生成對(duì)應(yīng)的.o文件,在使用的時(shí)候可以動(dòng)態(tài)加載,優(yōu)點(diǎn)是不會(huì)使內(nèi)核過(guò)分龐大,缺點(diǎn)是你得自己來(lái)調(diào)用這些模塊。
35可編輯ppt如何升級(jí)內(nèi)核添加進(jìn)內(nèi)核的方式:3可編輯ppt內(nèi)核的模塊式結(jié)構(gòu)內(nèi)核模塊是Linux內(nèi)核向外部提供的一個(gè)接口,其全稱(chēng)為動(dòng)態(tài)可加載內(nèi)核模塊(LoadableKernelModule,LKM),簡(jiǎn)稱(chēng)為模塊。Linux內(nèi)核之所以提供模塊機(jī)制,是因?yàn)樗旧硎且粋€(gè)單內(nèi)核(monolithickernel)。單內(nèi)核的最大優(yōu)點(diǎn)是效率高,因?yàn)樗械膬?nèi)容都集成在一起,但其缺點(diǎn)是可擴(kuò)展性和可維護(hù)性相對(duì)較差,模塊機(jī)制就是為了彌補(bǔ)這一缺陷。36可編輯ppt內(nèi)核的模塊式結(jié)構(gòu)內(nèi)核模塊是Linux內(nèi)核向外部提供的一個(gè)接口模塊
模塊是具有獨(dú)立功能的程序,它可以被單獨(dú)編譯,但不能獨(dú)立運(yùn)行。它在運(yùn)行時(shí)被鏈接到內(nèi)核作為內(nèi)核的一部分在內(nèi)核空間運(yùn)行,這與運(yùn)行在用戶(hù)空間的進(jìn)程是不同的。模塊通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成,用來(lái)實(shí)現(xiàn)一種文件系統(tǒng)、一個(gè)驅(qū)動(dòng)程序或內(nèi)核中其他上層的功能。
37可編輯ppt模塊模塊是具有獨(dú)立功能的程序,它可以被單獨(dú)編譯,但不能獨(dú)立模塊與內(nèi)核的關(guān)系模塊和內(nèi)核都在內(nèi)核空間運(yùn)行,模塊編程在一定意義上就是內(nèi)核編程。因?yàn)閮?nèi)核版本的每次變化使得其中的某些函數(shù)名也會(huì)相應(yīng)地發(fā)生變化,因此模塊編程與內(nèi)核版本密切相關(guān)。本課中所涉及的內(nèi)核編程基于的Linux內(nèi)核為2.4.x版本,對(duì)于其他版本,可能還需要做一些調(diào)整。38可編輯ppt模塊與內(nèi)核的關(guān)系模塊和內(nèi)核都在內(nèi)核空間運(yùn)行,模塊編程在一定應(yīng)用程序與內(nèi)核模塊的比較C語(yǔ)言應(yīng)用程序內(nèi)核模塊程序使用函數(shù)libc庫(kù)內(nèi)核函數(shù)運(yùn)行空間用戶(hù)空間內(nèi)核空間運(yùn)行權(quán)限普通用戶(hù)超級(jí)用戶(hù)入口函數(shù)main()init_module()出口函數(shù)exit()cleanup_module()編譯gcc-cgcc–c–D__KERNEl___DMOKULE連接gccGcc運(yùn)行直接運(yùn)行insmod調(diào)試gdbkdbug,kdb,kgdb等39可編輯ppt應(yīng)用程序與內(nèi)核模塊的比較C語(yǔ)言應(yīng)用程序內(nèi)核模塊程序使用函數(shù)l名字空間污染
namespacepullution
當(dāng)存在大量的函數(shù)和全局變量,并且它們的名字沒(méi)有明確的含義以至于難以區(qū)別時(shí),就會(huì)發(fā)生所謂的名字空間污染。程序員需花費(fèi)更多的時(shí)間和精力去記住這些已經(jīng)保留的名字并為新符號(hào)尋找一個(gè)不重復(fù)的名字。名字空間沖突可能照成很多問(wèn)題,如加載模塊失敗等古怪問(wèn)題解決辦法將所有符號(hào)定義為靜態(tài)變量對(duì)于非全局變量的符號(hào)前加上一個(gè)內(nèi)核中唯一的前綴。40可編輯ppt名字空間污染
namespacepullution當(dāng)存在用戶(hù)空間與內(nèi)核空間操作系統(tǒng)的作用為程序提供一個(gè)計(jì)算機(jī)硬件的一致視圖。負(fù)責(zé)程序的獨(dú)立操作以及保護(hù)資源不受非法訪(fǎng)問(wèn)。內(nèi)核運(yùn)行在最高級(jí)(管理員模式supervisormode),可以進(jìn)行所有操作。應(yīng)用程序運(yùn)行在優(yōu)先級(jí)最低即所謂的用戶(hù)模式(usermode),在這一級(jí)中處理器控制著對(duì)硬件的直接訪(fǎng)問(wèn)以及對(duì)內(nèi)存的非授權(quán)訪(fǎng)問(wèn)。41可編輯ppt用戶(hù)空間與內(nèi)核空間操作系統(tǒng)的作用9可編輯pptlsmod查看已注冊(cè)的內(nèi)核42可編輯pptlsmod查看已注冊(cè)的內(nèi)核10可編輯ppt內(nèi)核模塊實(shí)例
#define__KERNEL__
#defineMODULE#include<linux/module.h>#include<linux/kernel.h>intinit_module(void){ printk("HellowWorld!\n”); return0;)voidcleanup_module(void){ printk("Goodbye,cruelworld!\n”);) module_init(hello_init);
module_exit(hello_exit);
43可編輯ppt內(nèi)核模塊實(shí)例 #define__KERNEL__11可編模塊主要函數(shù)及定義頭文件及宏定義 #define__KERNEL__ #defineMODULE#include<linux/module.h>#include<linux/kernel.h>module_init():模塊的初始化函數(shù),
module_exit():模塊的卸載函數(shù),
初始化函數(shù)和卸載函數(shù)必須成對(duì)出現(xiàn)。模塊常用信息:作者、描述、版權(quán)等, MODULE_AUTHOR("author");
MODULE_DESCRIPTION("thedescription");
MODULE_LICENSE("GPL");寫(xiě)內(nèi)核或內(nèi)核模塊不能用寫(xiě)應(yīng)用程序時(shí)的系統(tǒng)調(diào)用或函數(shù)庫(kù).44可編輯ppt模塊主要函數(shù)及定義頭文件及宏定義12可編輯ppt模塊的編譯KDIR=/YF2410/kernelINCLUDEDIR=$(KDIR)/includeCFLAGS=-D__KERNEL__-DMODULE-I$(INCLUDEDIR)CC=arm-linux-gccOBJS=hello.o$(OBJS):hello.c $(CC)$(CFLAGS)-c$^clean: -rm-f$(OBJS)*.o45可編輯ppt模塊的編譯KDIR=/YF2410/kernel13可編模塊的加載與卸載Insmod./hello.ormmodhello46可編輯ppt模塊的加載與卸載Insmod./hello.o14可編輯pmodutils
modutils是管理內(nèi)核模塊的一個(gè)軟件包。用戶(hù)可以在任何提供內(nèi)核源代碼的地方獲取modutils(modutils-x.y.z.tar,gz)源代碼,然后選擇最高級(jí)別的、patch.x.y.z等于或小于當(dāng)前版本的內(nèi)核版本,安裝后在/sbin目錄下就會(huì)有insmod、rmmod、ksyms、lsmod、modprobe等實(shí)用程序。當(dāng)然,通常在加載Linux內(nèi)核時(shí),modutils已經(jīng)被載入。47可編輯pptmodutils modutils是管理內(nèi)核模塊的一個(gè)軟Modutils的常用命令insmod命令調(diào)用insmod程序,把需要插入的模塊以目標(biāo)代碼的形式插入到內(nèi)核中。在插入的時(shí)候,insmod自動(dòng)調(diào)用init_module()函數(shù)運(yùn)行。注意,只有超級(jí)用戶(hù)才能使用這個(gè)命令。格式 #insmod[path]modulename.ormmod命令調(diào)用rmmod程序,將已經(jīng)插入內(nèi)核的模塊從內(nèi)核中移出。rmmod會(huì)自動(dòng)運(yùn)行cleanup_module()函數(shù),格式: #rmmod[path]modulename.o48可編輯pptModutils的常用命令insmod命令16可編輯pptModutils的常用命令lsmod命令調(diào)用lsmod程序?qū)@示當(dāng)前系統(tǒng)中正在使用的模塊信息。實(shí)際上這個(gè)程序的功能就是讀?。痯roc/modules文件中的數(shù)據(jù)。格式為: #lsmodksyms命令Ksyms這個(gè)程序用來(lái)顯示內(nèi)核符號(hào)和模塊符號(hào)表的信息。與lsmod相似,它的功能是讀取/proc文件系統(tǒng)中另一個(gè)文件/proc/ksyms的內(nèi)容49可編輯pptModutils的常用命令lsmod命令17可編輯ppt模塊的導(dǎo)出和用戶(hù)空間的應(yīng)用程序不同的是,引入一個(gè)模塊的目的常常是為了給內(nèi)核提供一些routine,來(lái)完成特定的功能,很少有模塊什么符號(hào)都不導(dǎo)出。Linux為用戶(hù)提供了如下宏: EXPORT_SYMBOL(var);//輸出symbolvar
EXPORT_SYMBOL_GPL(var);//輸出的symbol版權(quán)為GPL
50可編輯ppt模塊的導(dǎo)出和用戶(hù)空間的應(yīng)用程序不同的是,引入一個(gè)模塊的目的常內(nèi)核符號(hào)表模塊與模塊之間的共享方式共享變量函數(shù)內(nèi)核只把各個(gè)模塊中主要的變量和函數(shù)放在一個(gè)特定的區(qū)段,這些變量和函數(shù)統(tǒng)稱(chēng)為符號(hào)。對(duì)于內(nèi)核這個(gè)特殊的母模塊,在kemel/ksyms.c中定義了可以從中“移出”的符號(hào)。51可編輯ppt內(nèi)核符號(hào)表模塊與模塊之間的共享方式19可編輯ppt模塊的依賴(lài)關(guān)系模塊依賴(lài) 如前所述,內(nèi)核符號(hào)表記錄了所有模塊可以訪(fǎng)問(wèn)的符號(hào)及相應(yīng)的地址。當(dāng)一個(gè)新的模塊被裝入內(nèi)核后,它所聲明的某些符號(hào)就會(huì)被登記到這個(gè)表中,使這些符號(hào)可能被其他模塊所引用,這就引出了模塊依賴(lài)問(wèn)題。一個(gè)模塊A引用從另一個(gè)模塊B中移出的符號(hào),叫做模塊B被模塊A引用,或者模塊A依賴(lài)模塊B。如果要鏈接模塊A,必須先鏈接模塊B。這種模塊間相互依賴(lài)的關(guān)系叫做模塊依賴(lài)。52可編輯ppt模塊的依賴(lài)關(guān)系模塊依賴(lài)20可編輯ppt模塊引用計(jì)數(shù)器為了確保安全地卸載模塊,每個(gè)模塊都有一個(gè)引用計(jì)數(shù)器。當(dāng)執(zhí)行模塊所涉及的操作時(shí)就遞增該模塊的計(jì)數(shù)器,在操作結(jié)束時(shí)就遞減這個(gè)計(jì)數(shù)器。另外,當(dāng)模塊B被模塊A引用時(shí),模塊B的引用計(jì)數(shù)器就遞增;引用結(jié)束,計(jì)數(shù)器遞減。什么時(shí)候可以卸載這個(gè)模塊?當(dāng)然只有這個(gè)計(jì)數(shù)器值為0的時(shí)候。例如,當(dāng)一個(gè)文件系統(tǒng)還安裝在系統(tǒng)中時(shí)就不能將其卸載,而當(dāng)這個(gè)文件系統(tǒng)不再被使用時(shí),引用計(jì)數(shù)器為0,可以卸載。在linux/module.h文件中定義了如下三個(gè)宏來(lái)維護(hù)計(jì)數(shù)器:MODINCUSECOUNT當(dāng)前模塊計(jì)數(shù)器加1MODDECUSECOUNT當(dāng)前模塊計(jì)數(shù)器減1MODmUSE計(jì)數(shù)器非0時(shí)返回真53可編輯ppt模塊引用計(jì)數(shù)器為了確保安全地卸載模塊,每個(gè)模塊都有一個(gè)引用內(nèi)核的編譯54可編輯ppt內(nèi)核的編譯22可編輯ppt內(nèi)核簡(jiǎn)介內(nèi)核是一個(gè)操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux的一個(gè)重要特點(diǎn)就是其源代碼的公開(kāi)性。其所有的內(nèi)核源程序都可以在/usr/src/Linux下找到,大部分應(yīng)用軟件都是遵循GPL設(shè)計(jì)的,用戶(hù)可以獲取相應(yīng)的源程序代碼。55可編輯ppt內(nèi)核簡(jiǎn)介內(nèi)核是一個(gè)操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)配置內(nèi)核所需指令#makeconfig 基于文本的、最為傳統(tǒng)的配置界面。#makemenuconfig 基于文本菜單的配置界面,字符終端下推薦使用。#makexconfig 基于圖形窗口模式的配置界面,Xwindow環(huán)境下推薦使用。#makeoldconfig 如果只想在原來(lái)內(nèi)核配置的基礎(chǔ)上修改一些小地方,用此命令會(huì)省去不少麻煩56可編輯ppt配置內(nèi)核所需指令#makeconfig24可編輯ppt1代碼成熟度選項(xiàng)對(duì)那些還在測(cè)試階段的代碼,驅(qū)動(dòng)模塊等的支持。對(duì)那些已經(jīng)老舊的,被現(xiàn)有文件替代了的驅(qū)動(dòng),代碼的支持,可以不選。
動(dòng)態(tài)加載模塊支持選項(xiàng)支持模塊加載功能
該項(xiàng)用來(lái)支持跨內(nèi)核版本的模塊支持。通過(guò)kerneld程序的幫助在需要的時(shí)候自動(dòng)載入或卸載那些可載入式的模塊。
系統(tǒng)類(lèi)型,主要是CPU類(lèi)型,以及于此相關(guān)的內(nèi)容
常用設(shè)備設(shè)置可熱拔插的設(shè)備的支持網(wǎng)絡(luò)支持systemV的進(jìn)程間通訊支持在不重啟情況下直接改變內(nèi)選一個(gè)模擬數(shù)學(xué)協(xié)處理器電源管理
MTD(flash,RAM等)存儲(chǔ)設(shè)備的設(shè)置支持對(duì)MTD的分區(qū)操作
所有MTD設(shè)備提供一個(gè)字符設(shè)備,以便進(jìn)行讀寫(xiě)操作支持利用RAM芯片作為緩存來(lái)使用MTD設(shè)備對(duì)NANDflash進(jìn)行設(shè)置網(wǎng)絡(luò)協(xié)議支持pppTcp/ip57可編輯ppt1代碼成熟度選項(xiàng)動(dòng)態(tài)加載模塊支持選項(xiàng)系統(tǒng)類(lèi)型,主要是CPU類(lèi)支持isdn服務(wù)若想啟動(dòng)該項(xiàng)支持ISDN通訊,應(yīng)啟動(dòng)前面提到的NetworkingDevices中的SLIP或PPP。
對(duì)輸入設(shè)備的支持鍵盤(pán)、鼠標(biāo)、游戲手柄等字符設(shè)備的設(shè)置虛擬終端虛擬終端控制臺(tái)串口設(shè)置對(duì)I2C設(shè)備的支持
58可編輯ppt支持isdn服務(wù)對(duì)輸入設(shè)備的支持字符設(shè)備的設(shè)置2
溫馨提示
- 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年二手房地產(chǎn)交易合同
- 二零二五年度綠化養(yǎng)護(hù)設(shè)備租賃合同3篇
- 2025年代理墊資合同
- 人員聘用合同范本
- 二零二五年度有機(jī)農(nóng)產(chǎn)品農(nóng)場(chǎng)租賃合同模板詳解3篇
- 二零二五年度定制化豪華門(mén)樓施工與維護(hù)服務(wù)合同4篇
- 2025年福建首鳴實(shí)業(yè)發(fā)展有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年江蘇鹽城市交通投資建設(shè)控股集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 二零二五年度某局勞務(wù)分包結(jié)算與客戶(hù)滿(mǎn)意度提升合同4篇
- 2025年華師大新版九年級(jí)歷史下冊(cè)月考試卷含答案
- 廣東省佛山市2025屆高三高中教學(xué)質(zhì)量檢測(cè) (一)化學(xué)試題(含答案)
- 人教版【初中數(shù)學(xué)】知識(shí)點(diǎn)總結(jié)-全面+九年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案
- 四川省成都市青羊區(qū)成都市石室聯(lián)合中學(xué)2023-2024學(xué)年七上期末數(shù)學(xué)試題(解析版)
- 2024-2025學(xué)年人教版七年級(jí)英語(yǔ)上冊(cè)各單元重點(diǎn)句子
- 2025新人教版英語(yǔ)七年級(jí)下單詞表
- 公司結(jié)算資金管理制度
- 2024年小學(xué)語(yǔ)文教師基本功測(cè)試卷(有答案)
- 未成年入職免責(zé)協(xié)議書(shū)
- 項(xiàng)目可行性研究報(bào)告評(píng)估咨詢(xún)管理服務(wù)方案1
- 5歲幼兒數(shù)學(xué)練習(xí)題
- 2024年全國(guó)體育單招英語(yǔ)考卷和答案
評(píng)論
0/150
提交評(píng)論