<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2012-03-31 來源:網(wǎng)絡 收藏

          1. 引言

          系統(tǒng)開放源代碼、系統(tǒng)漏洞少,在面對病毒和黑客入侵時能提供更好的安全性和穩(wěn)定性,基于以上這些優(yōu)點,近年來對操作系統(tǒng)及其相關技術的應用和研究越來越多。對操作系統(tǒng)擴充或裁剪功能需要在重新編譯內核上花費大量的時間。機制由于大大縮短了開發(fā)和測試的時間,在 Linux開發(fā)、研究的過程中起到了舉足輕重的作用。

          主要包括內核模塊在操作系統(tǒng)中的加載和卸載兩部分功能,內核模塊是一些在啟動的操作系統(tǒng)內核需要時可以載入內核執(zhí)行的代碼塊,不需要時由操作系統(tǒng)卸載。它們擴展了操作系統(tǒng)內核功能卻不需要重新編譯內核、啟動系統(tǒng)[1]。如果沒有內核模塊,就不得不反復編譯生成操作系統(tǒng)的內核鏡像來加入新功能,當附加的功能很多時,還會使內核變得臃腫。

          2. 的編寫和編譯

          2.1 內核模塊的基本結構

          一個內核模塊至少包含兩個函數(shù),模塊被加載時執(zhí)行的初始化函數(shù)init_module()和模塊

          被卸載時執(zhí)行的結束函數(shù)cleanup_module()。在最新內核穩(wěn)定版本2.6中,兩個函數(shù)可以起

          任意的名字,通過宏module_init()和module_exit()實現(xiàn)[2]。唯一需要注意的地方是函數(shù)必須在宏的使用前定義。例如:

          static int __init hello_init(void){}

          static void __exit hello_exit(void ){}

          module_init(hello_init);

          module_exit(hello_exit);

          這里聲明函數(shù)為static的目的是使函數(shù)在文件以外不可見,__init的作用是在完成初始化后收回該函數(shù)占用的內存,宏__exit用于模塊被編譯進內核時忽略結束函數(shù)。這兩個宏只針對模塊被編譯進內核的情況,而對動態(tài)加載模塊是無效的。這是因為編譯進內核的模塊是沒有清理收尾工作的,而動態(tài)加載模塊卻需要自己完成這些工作。

          2.2 內核模塊的編譯

          編譯時需要提供一個makefile來隱藏底層大量的復雜操作,使用戶通過make命令就可以完成編譯的任務。下面就是一個簡單的編譯hello.c的makefile文件:

          obj-m += hello.ko

          KDIR := /lib/modules/$(shell uname -r)/build

          PWD := $(shell pwd)

          default:

          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

          編譯后獲得可加載的模塊文件hello.ko。

          內核版本2.6中使用.ko文件后綴代替了.o,這是為了與普通可執(zhí)行文件相區(qū)別。[3]

          3. LKM的主要功能

          3.1 模塊的加載

          模塊的加載有兩種方法,第一種是使用insmod命令加載,另一種是當內核發(fā)現(xiàn)需要加載某個模塊時,請求內核后臺進程kmod加載適當?shù)哪K。當內核需要加載模塊時,kmod被喚醒并執(zhí)行modprobe,同時傳遞需加載模塊的名字作為參數(shù)。modprobe像insmod一樣將模塊加載進內核,不同的是在模塊被加載時查看它是否涉及到當前沒有定義在內核中的任何符號。如果有,在當前模塊路徑的其他模塊中查找。如果找到,它們也會被加載到內核中。但在這種情況下使用insmod,會以“未解析符號”信息結束[4]。

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

          上一頁 1 2 3 下一頁

          關鍵詞: LKM Linux 零拷貝

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();