資源描述:
《嵌入式Linux內(nèi)核模塊加載技術(shù)的分析.pdf》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、4.,.第19卷第期廣東經(jīng)濟管理學院學報Vol19No4204年8月JoumalOfGuangdongInstituteofBusinessAdministrationAug.2004x嵌入式Linu內(nèi)核模塊加載技術(shù)的分析李淑文,(廣東經(jīng)濟管理學院廣東廣州510260),:分析x摘要嵌入式Linu中利用模塊加載技術(shù)實現(xiàn)對其核心動態(tài)更新的機制和原理詳。x細給出了Linu模塊載入與卻載的具體實現(xiàn):Linux;內(nèi)核模塊;關(guān)鍵詞加載技術(shù)中圖分類號:TP316文獻標識碼:A文章編號:1672一4100(2004)04一0()78一03onLo
2、adTechnologyofEmbeddedLinuxKelModulerneLiShuwen,,(GuangdongInstituteofBusinessAdministrationGuan邵hou510260)s:-AbtractThepaperanalyzeshowthemoduleloadteehnolo盯15即pliedtodynamieallyrenewthein..ternalsofembeddedLinuxItstudiesthedetailedproeessoftheloadandunloadofLinuxkern
3、elmodules,,Keywords:Linuxkemelmoduleloadteehnolo群,Linux嵌人式內(nèi)核結(jié)構(gòu)借助微內(nèi)核設(shè)計思為了滿足某些特定場合的要求需要利用模,x,、。想使Linu運行效率高方便系統(tǒng)的定制更新塊的動態(tài)加載對內(nèi)核進行有效的裁減和改造這,。。和移植必須深人理解x這與模塊動態(tài)加載特性有關(guān)Linu內(nèi)核的運行機制以下企圖,。nUux中模塊是未被編譯進內(nèi)核的一種目標說明,文件它們可以經(jīng)過鏈接進內(nèi)核生成可執(zhí)行的機、。一內(nèi)核與模塊技術(shù)分析器代碼需要時借助某些手段可很快地將其編譯,。x,進內(nèi)核實現(xiàn)內(nèi)核的更新模塊加載由
4、運行的加載在Linu內(nèi)核中與模塊相關(guān)的主要數(shù)據(jù)結(jié)。。,程序完成加載過程中模塊的重定位和地址綁定構(gòu)有:module和symboljable其中module用于記。。系統(tǒng)啟動時或系統(tǒng)啟動后都能進行模塊加載這錄模塊的信息和相互調(diào)用關(guān)系symbol」able則用。,些即謂模塊的動態(tài)加載功能于將模塊動態(tài)鏈接進核心它是一個很重要的數(shù)。,:模塊動態(tài)加載有很好的特性當某些功能模據(jù)結(jié)構(gòu)主要記錄了兩方面的信息一是模塊提供,。的函數(shù)和變量;塊暫時不需要時可以從內(nèi)核中卸載需要用到時二是模塊的引用信息前者用于核。,又能進行添加這樣不僅把內(nèi)核的鏡像文件保持心和
5、模塊間的通信后者則用于記錄該模塊引用,。。而且最大限度地節(jié)省內(nèi)存Ux其它模塊的情況這兩個數(shù)據(jù)結(jié)構(gòu)是通過由在最小利用nu模,medem」e塊動態(tài)加載特性可以靈活地完成對系統(tǒng)的擴展ul指向它對應(yīng)的syoblabl指針聯(lián)系起來,,,。和更新例如可以將驅(qū)動程序封裝成模塊形式的,,,像網(wǎng)絡(luò)接口驅(qū)動終端驅(qū)動網(wǎng)絡(luò)文件系統(tǒng)驅(qū)動模塊為了使用所需資源必須有一個機制使,。。,等在需要的情形下能被加載或卸載核心能夠找到它們例如模塊需要調(diào)用核心內(nèi)存:24一一n收稿日期006作者簡介:19一),女,廣東陽春人,。李淑文(68廣東經(jīng)濟管理學院信息工程系教師。。o
6、C分配例程kmal()來分配內(nèi)存模塊在創(chuàng)建時并完成某些任務(wù)的代理,,不知道kmalloC()在內(nèi)存中的位置這樣核心必須如圖1所示無論是直接手工加載模塊還是,oCkemeld守護進程動態(tài)加載在使用這些模塊前修改模塊中對kmal()的引由都需要通過調(diào)用。。,用地址核心在其核心符號表中維護著一個核心insmed命令實現(xiàn)執(zhí)行insmod命令時必須指出資源鏈表,這樣當我們加載模塊時它能夠解析出所要裝載模塊的位置,即模塊的路徑名。insmod。,,另外Lix還允許存可以找到內(nèi)核的導(dǎo)出符模塊中對核心資源的引用mi利用一個特權(quán)系統(tǒng)調(diào)用,。,,,在模
7、塊堆棧以供它在模塊之間相互調(diào)用時使號表其中符號是成對出現(xiàn)的一個是符號名稱。,。用例如VFAT文件系統(tǒng)模塊可能需要FAT文件另外一個是符號的值如符號的地址,系統(tǒng)模塊的服務(wù)因為VFAT文件系統(tǒng)多少是從insn1Od。FAT文件系統(tǒng)中擴展而來某個模塊對其它模塊用戶請求mouedl的服務(wù)或資源的需求類似于模塊對核心本身資源,,或服務(wù)的請求不過此時所請求的服務(wù)是來自另用戶態(tài);核心態(tài)。,外一個事先已加載的模塊每當加載模塊時核心圖1模塊載入圖insmod命令執(zhí)行時系統(tǒng)的動作過程為:將把新近加載模塊輸出的所有資源和符號添加到。,核心符號表中(l)模
8、塊讀到它本身的虛擬內(nèi)存中利用內(nèi),,。當試圖卸載某個模塊時核心需要知道此模核導(dǎo)出的符號表修正模塊在內(nèi)存中的映象塊沒有被引用,同時它需要某種方法來通知這個(2)利用特權(quán)系統(tǒng)調(diào)用請求內(nèi)核分配足夠的。。即將被卸載的模塊而且模塊必須能夠在從核心