Linux可加載內核模塊剖析

Linux可加載內核模塊剖析

ID:44209334

大?。?58.69 KB

頁數(shù):8頁

時間:2019-10-19

Linux可加載內核模塊剖析_第1頁
Linux可加載內核模塊剖析_第2頁
Linux可加載內核模塊剖析_第3頁
Linux可加載內核模塊剖析_第4頁
Linux可加載內核模塊剖析_第5頁
資源描述:

《Linux可加載內核模塊剖析》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫

1、Linux可加載內核模塊剖析2.6內核透視圖簡介:Linux?可加載內核模塊(從內核的1.2版木開始引入)是Linux內核的最重要創(chuàng)新Z-o它們提供了可伸縮的、動態(tài)的內核。探索隱藏在可加載模塊后面的原理,并學習這些獨立的對象如何動態(tài)地轉換成Linux內核的一部分。Linux就是通常所說的單內核(monolithickernel),即操作系統(tǒng)的人部分功能都被稱為內孩;并在特權模式下運行。它與微型內核不同,后者只把基木的功能(進程間通信[IPC]、調度、基木的輸入/輸出[I/O]和內存管理)當作內核運行,而把其他功能(驅動程序、網絡堆棧和文件系統(tǒng))排除在特權空間

2、之外。因此,您可能認為Linux是一個完全靜態(tài)的內核,但事實恰恰相反。通過Linux內核模塊(LKM)可以在運行時動態(tài)地更改LinuxodeveloperWorksTim所著的其他剖析系列文章?Linuxflash文件系統(tǒng)咅lj析?Security-EnhancedLinux(SELinux)剖析?實時Linux架構剖析?LinuxSCSI子系統(tǒng)咅lj析?Linux文件系統(tǒng)剖析?Linux網絡棧剖析?Linux內核剖析?Linuxslab分配器剖析?Linux同步方法剖析?Tim所著的所有畀瞞……系列文章/T動,杏更攻是指可以將新的功能加載到內核、從內核去除

3、某個功能,甚至添加使用其他LKM的新LKMoLKM的優(yōu)點是可以最小化內核的內存占用,只加載需要的元素(這是嵌入式系統(tǒng)的重要特性)。Linux不是可以進行動態(tài)更改的惟一(也不是第一個)單內核。BerkeleySoftwareDistribution(BSD)的變體、SunSolaris>更老的內核(比如OpenVMS),以及其他流行的操作系統(tǒng)(比如Microsoft?Windows?和AppleMacOSX)都支持可加載模塊。剖析內核模塊LKM與直接編譯到內核或典型程序的元素有根本區(qū)別。典型的程序有一個main函數(shù),其中LKM包含entry和exit函數(shù)(在2

4、.6版本,您可以任意命名這些函數(shù))。當向內核插入模塊時,調用entry函數(shù),從內核刪除模塊時則調用exit函數(shù)。因為entry和exit函數(shù)是用戶定義的,所以存在module_init和module_exit宏,用于定義這些函數(shù)屬于哪種函數(shù)。LKM還包含一-組必姿的宏和一組可拡的宏,用于定義模塊的許可證、模塊的作者、模塊的描述等等。圖1提供了一個非常簡單的LKM的視圖。圖1.簡單LKM的源代碼視圖frincl^deUniili-cletinitMODULE_LICENSEInG?I.,r1;ModuleMODULE_AUTH

5、OR:''ModuleAuthor^);macrosMODULE_DESCRIPTIONI:;Stetict__initmod_?ntry_func:mid)j1returnD;JModulecontractor/hvoid?xit.mod^exit_func!void)idestructor1x?tuxtiJmodule^init(OKxi_en):Entry/exitmoduleexit(B?od_exlt_func);macros2.6版本的Linux內核提供了一個新的更簡單的方法,用于構建LKM。糙LKM時,可以使用典型的用戶工具管理模塊(盡管內部

6、己經改變):標準insmod(安裝LKM),rmmod(刪除LKM),modprobc(insmod和rmmod的包裝器),depmod(用于創(chuàng)建模塊依賴項),以及modinfo(用于為模塊宏查找值)。更多關于為2.6版本內核構建LKM的信息,請查看參考資料。回頁首剖析內核模塊對象LKM只不過是一個特殊的可執(zhí)行可鏈接格式(ExecutableandLinkableFormat,ELF)對象文件。通常,必須鏈接對象文件才能在可執(zhí)行文件屮解析它們的符號和結果。由于必須將LKM加載到內核后LKM才能解析符號,所以LKM仍然是一個ELF對象。您可以在LKM上使用標準

7、對象工具(在2.6版木屮,內核對象帶有后綴?ko,)。例如,如果在LKM上使用objdump實用工具,您將發(fā)現(xiàn)一些熟悉的區(qū)段(section),也口.方ext(說明)、?data。己初始化數(shù)據(jù))和?方ss(塊開始符號或未初始化數(shù)據(jù))。您還可以在模塊屮找到其他支持動態(tài)特性的區(qū)段。.init.text區(qū)段包含modulc_init代碼,?exit,text區(qū)段包含module_exit代碼(參見圖2)o.modinfo區(qū)段包含各種表示模塊許可證、作聶和描述等的宏文本。了解LKM的基礎知識之后,現(xiàn)在我們進一步探索模塊是如何進入內核的,以及在內核內部是如何管理模塊的

8、。回頁首LKM的生命周期在用戶空間屮,insmod(

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。