1. 程式人生 > >Linux 系統設定 : insmod 命令詳解

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