熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Linux可加載內核模塊機制的研究與應用

Linux可加載內核模塊機制的研究與應用

作者: 時間:2012-03-31 來源:網絡 收藏

關于模塊加載,可以用圖3.1來簡要描述:

圖3.1 模塊的裝入

insmod程序必須找到要求加載的內核模塊,這些內核模塊是已鏈接的目標文件,與其他文件不同的是,它們被鏈接成可重定位映象即映象沒有被鏈接到特定地址上。insmod將執(zhí)行一個特權級系統(tǒng)調用來查找內核的輸出符號,這些符號都以符號名和數值形式如地址值成對保存。內核輸出符號表被保存在內核維護的模塊鏈表的第一個module結構中。只有特殊符號才被添加,它們在內核編譯與鏈接時確定。insmod將模塊讀入虛擬內存并通過使用內核輸出符號來修改其未解析的內核函數和資源的引用地址。這些工作采取由insmod程序直接將符號的地址寫入模塊中相應地址來進行。

當insmod修改完模塊對內核輸出符號的引用后,它將再次使用特權級系統(tǒng)調用申請足夠的空間容納新模塊。內核將為其分配一個新的module結構以及足夠的內核內存來保存新模塊,并將其插入到內核模塊鏈表的尾部,最后將新模塊標志為UNINITIALIZED。insmod將模塊拷貝到已分配空間中,如果為它分配的內核內存已用完,將再次申請,但模塊被多次加載必然處于不同的地址。另外此重定位工作包括使用適當地址來修改模塊映象[5]。如果新模塊也希望將其符號輸出到系統(tǒng)中,insmod將為其構造輸出符號映象表。每個內核模塊必須包含模塊初始化和結束函數,所以為了避免沖突它們的符號被設計成不輸出,但是insmod必須知道這些地址,這樣可以將它們傳遞給內核。在所有這些工作完成以后,insmod將調用初始化代碼并執(zhí)行一個特權級系統(tǒng)調用將模塊的初始化和結束函數地址傳遞給內核。當將一個新模塊加載到內核中時,內核必須更新其符號表并修改那些被新模塊使用的老模塊[6]。那些依賴于其他模塊的模塊必須在其符號表尾部維護一個引用鏈表并在其module數據結構中指向它。內核調用模塊的初始化函數,如果成功將安裝此模塊。模塊的結束函數地址被存儲在其module結構中,將在模塊卸載時由內核調用,模塊的狀態(tài)最后被設置成RUNNING。

3.2 模塊的卸載

模塊可以使用rmmod命令刪除,但是請求加載模塊在其使用計數為0時,自動被系統(tǒng)刪除。kmod在其每次idle定時器到期時都執(zhí)行一個系統(tǒng)調用,將系統(tǒng)中所有不再使用的請求加載模塊刪除。

關于模塊卸載,可以用圖3.2來描述:

內核中其他部分還在使用的模塊不能被卸載。例如系統(tǒng)中安裝了多個VFAT文件系統(tǒng)則不能卸載VFAT模塊。執(zhí)行l(wèi)smod將看到每個模塊的引用計數。模塊的引用計數被保存在其映象的第一個常字中,這個字還包含autoclean和visited標志。如果模塊被標記成autoclean,則內核知道此模塊可以自動卸載。visited標志表示此模塊正被一個或多個文件系統(tǒng)部分使用,只要有其他部分使用此模塊則這個標志被置位。每次系統(tǒng)要將沒有被使用的請求加載模塊刪除時,內核將在所有模塊中掃描,但是一般只查看那些被標志為autoclean并處于running狀態(tài)的模塊。如果某模塊的 visited標記被清除則它將被刪除。其他依賴于它的模塊將修改各自的引用域,表示它們間的依賴關系不復存在。此模塊占有的內核內存將被回收。

4. 的應用

基本思想是:數據分組從網絡設備到用戶程序空間傳遞的過程中,減少數據拷貝次數,減少系統(tǒng)調用,實現(xiàn)CPU的零參與,徹底消除CPU在這方面的負載。的實現(xiàn)分為實現(xiàn)DMA數據傳輸和地址映射兩個部分。其中DMA數據傳輸與本文關系不大,就不詳細敘述了,這里主要介紹應用機制實現(xiàn)的地址映射。

地址映射的基本原理是在內核空間申請內存,通過proc文件系統(tǒng)和mmap函數將其映射到用戶空間來允許應用程序訪問,這樣就消除了內核空間到應用程序空間的數據拷貝。地址映射部分的實現(xiàn)主要分為以下三步:

第一,建立LKM的基本結構,包括編寫初始化和結束函數等。

第二,聲明完成映射功能所需要的函數,主要有分配和初始化內核內存函數init_mem(),釋放內核內存函數del_mem(),向內核內存輸入內容的函數put_mem()等。

第三,在初始化函數中應用第二步建立的函數分配一塊內存空間、輸入內容、建立proc文件系統(tǒng)入口。在結束函數中釋放已分配的內核內存,刪除proc文件系統(tǒng)入口。

編寫應用程序測試該LKM,發(fā)現(xiàn)已經達到了映射內核內存到應用程序空間的目的。在實現(xiàn)的過程中采用LKM機制不但便于調試而且大大減少了開發(fā)時間。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


關鍵詞: LKM Linux 零拷貝

評論


相關推薦

技術專區(qū)

關閉