Linux 系統設定 : insmod 命令詳解
insmod命令用於將給定的模組載入到核心中。Linux有許多功能是通過模組的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模組,通常是裝置驅動程式。
語法
insmod(選項)(引數)
選項
-f:不檢查目前kernel版本與模組編譯時的kernel版本是否一致,強制將模組載入; -k:將模組設定為自動卸除; -m:輸出模組的載入資訊; -o<模組名稱>:指定模組的名稱,可使用模組檔案的檔名; -p:測試模組是否能正確地載入kernel; -s:將所有資訊記錄在系統記錄檔案中; -v:執行時顯示詳細的資訊; -x:不要匯出模組的外部符號; -X:匯出模組所有的外部符號,此為預設定。
引數
核心模組:指定要載入的核心模組檔案。
例項
載入RAID1陣列級別模組,如下所示:
[[email protected] boot]# insmod /lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko
[[email protected] boot]# lsmod | grep raid1
raid1 25153 0
從以上顯示結果可知,RAID1模組已載入成功。只是在使用insmod命令載入模組時,需要使用絕對路徑方能載入,且載入時無法自動解決依賴關係。
詳解:
【insmod命令作用】
靜態載入就是把驅動程式直接編譯進核心,系統啟動後可以直接呼叫。靜態載入的缺點是除錯起來比較麻煩,每次修改一個地方都要重新編譯和下載核心,效率較低。若採用靜態載入的驅動較多,會導致核心容量很大,浪費儲存空間。
動態載入利用了Linux的module特性,可以在系統啟動後用insmod命令新增模組(.ko),在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪,將不需要的驅動去除,大大減小了核心的儲存容量。
【insmod與modprobe命令】
在Linux中,modprobe和insmod都可以用來載入module,不過現在一般都推薦使用modprobe而不是insmod了。 modprobe和insmod的區別是什麼呢?
1) modprobe可以解決load module時的依賴關係,比如load moudleA就必須先load mouduleB之類的,它是通過/lib/modules//modules.dep檔案來查詢依賴關係的。而insmod不能解決依賴問題。
2) modprobe預設會去/lib/modules/目錄下面查詢module,而insmod只在給它的引數中去找module(預設在當前目錄找)。 這樣,有時insmod也有它的有用之處,舉個例子吧。
有/root/my-mod.ko這個module,cd /root/,然後用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert這個module了,但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)卻提示"FATAL: Module my-mod.ko not found",這就是因為modprobe是到/lib/modules/`uname -r`/下去找module的,如果沒找到就是這樣了。
【檢查Linux核心】
安裝前要檢查核心版本和核心標頭檔案版本是否一致,否則報錯
由此可見核心版本和核心標頭檔案版本是一致的,都是4.2.0-27。
如果不一致的話在insmod一步必定出錯:Error inserting './hello.ko': -1 Invalid module format