linux內核模塊相關命令:lsmod,depmod,modprobe,modinfo,insmod,rmmod 使用說明

 

linux 其餘知識目錄html

 

原文連接:http://www.cnblogs.com/jacklikedogs/p/4659249.html linux

inux內核模塊相關命令:lsmod,depmod,modprobe,modinfo,insmod,rmmod 使用說明小程序

加載內核驅動的一般流程:ide

1.先將.ko文件拷貝到/lib/module/`uname -r`(內核版本號)/kernel/driver/...目錄下,post

    根據具體用途的區別分爲net、ide、scsi、usb、video、parport、md、block、ata等等。測試

2.運行depmod -a,更新模塊依賴新,主要是更新modules.dep文件ui

3.運行modprobe加載內核模塊this

lsmod

功能:列出內核已載入模塊的狀態
用法:lsmod
描述:
lsmod 以美觀的方式列出/proc/modules的內容。
輸出爲:
Module(模塊名)    Size(模塊大小)   Used by(被…使用)
eg. ne2k_pci           8928               0
8390                 9472              1 ne2k_pci
在/proc/modules中相應的是:
(模塊名,模塊大小,被…使用,模塊地址(猜的,之後確認))
ne2k_pci 8928 0 – Live 0×3086400
8390 9472 1 ne2k_pci , Live 0xe086000

depmod

功能:分析可加載模塊的依賴性,生成modules.dep文件和映射文件。
用法:depmod [-b basedir] [-e] [-F System.map] [-n] [-v] [version] [-A]
depmod [-e] [-F System.map] [-n] [-v] [version] [filename...]
描述:
Linux內核模塊能夠爲其它模塊提供提供服務(在代碼中使用EXPORT_SYMBOL),這種服務被稱做」symbols」。若第二個模塊使用了這個symbol,則該模塊很明顯依賴於第一個模塊。這些依賴關係是很是繁雜的。
depmod讀取在/lib/modules/version 目錄下的全部模塊,並檢查每一個模塊導出的symbol和須要的symbol,而後建立一個依賴關係列表。默認地,該列表寫入到/lib/moudules /version目錄下的modules.dep文件中。若命令中的filename有指定的話,則僅檢查這些指定的模塊(不是頗有用)。
若命令中提供了version參數,則會使用version所指定的目錄生成依賴,而不是當前內核的版本(uname -r 返回的)。
選項:
-b basedir  –basedir basedir  若你的模塊並無正確的在/lib/mdules/version下,能夠指定目錄生成依賴。
-e  –errsyms  和-F選項一塊兒使用,當一個模塊須要的symbol在其它模塊裏面沒有提供時,作出報告。正常狀況下,模塊沒有提供的symbol都在內核中有提供。
-F  –filesyms System.map 提供一個System.map文件(在內核編譯時生成的)許-e選項報告出unresolved symbol。
-n  –dry_run  將結果modules.dep和各類映射文件輸出到標準輸出(stdout),而不是寫到模塊目錄下。
-A –quick  檢查是否有模塊比modues.dep中的模塊新,若沒有,則退出不從新生成文件。

modprobe

功能:Linux內核添加刪除模塊
用法:
modprobe [ -v ] [ -V ] [-C config-file] [ -n ] [ -i ] [ -q ] [ -o modulename] [ modulename ] [ module parameters ... ]
modprobe [ -r ] [ -v ] [ -n ] [ -i ] [ modulename ... ]
modprobe [ -l ] [ -t dirname ] [ wildcard ]
modprobe [ -c ]
描述:
modprobe可智能地添加和刪除Linux內核模塊(爲簡便起見,模塊名中’_'和’-'是同樣的)。modprobe會查看模塊 目錄/lib/modules/’uname -r’裏面的全部模塊和文件,除了可選的/etc/modprobe.conf配置文件和/etc/modprobe.d目錄外。
modprobe須要一個最新的modules.dep文件,能夠用depmod來生成。該文件列出了每個模塊須要的其餘模塊,modprobe使用這個去自動添加或刪除模塊的依賴。
選項:
-v –verbose  顯示程序在幹什麼,一般在出問題的狀況下,modprobe才顯示信息。
-C –config  重載(^_^,意思取C++的重載)默認配置文件(/etc/modprobe.conf或/etc/modprobe.d)。
-c –showconfig  輸出配置文件並退出
-n –dry-run  能夠和-v選項一塊兒使用,調試很是有用
-i –ignore-install –ignore-remove 該選項會使得modprobe忽略配置文件中的,在命令行上輸入的install和remove命令。
-q –quiet 通常modprobe刪除或插入一個模塊時,若沒有找到會提示錯誤。使用該選項,會忽略指定的模塊,並不提示任何錯誤信息。
-r –remove  該選項會致使modprobe去刪除,而不是插入一個模塊。一般沒有沒有理由去刪除內核模塊,除非是一些有bug的模塊。你的內核也不必定支持模塊的卸載。
-V –verssion 版本信息
-f –force  和同時使用–force-vermagic ,–force-modversion同樣。使用該選項是比較危險的。
-l –list 列出全部模塊
-a –all 插入全部命令行中的模塊
-t –type 強制 -l 顯示dirname中的模塊
-s –syslog 錯誤信息寫入syslog

modinfo

功能:顯示內核模塊的信息
用法:
modinfo [ -0 ] [ -F field] [modulename | filename ... ]
modinfo -V
modinfo -h
描述:
modinfo列出Linux內核中命令行指定的模塊的信息。若模塊名不是一個文件名,則會在/lib/modules/version 目錄中搜索,就像modprobe同樣。
modinfo默認狀況下,爲了便於閱讀,如下面的格式列出模塊的每一個屬性:fieldname : value。
選項:
-V –version 版本
-F –field 僅在一行上顯示field值,這對於腳本較爲有用。經常使用的field有:author, description, licence, param, depends, alias, filename。
-0 –NULL 使用’/0′字符分隔field值,而不是一個新行。對腳本比較有用。
-a -d -l -p -n 這些分別是author, description, license, param ,filename的簡短形式。

insmod

功能:向Linux內核中插入一個模塊
用法:insmod [filename] [modue options ...]
描述:
insmod是一個向內核插入模塊的小程序:若文件名是一個連字符’-',模塊從標準輸入輸入。大多數用戶使用modprobe,由於它比較智能化。

rmmod

功能:刪除內核中的一模塊
用法:rmmod [ -f ] [ -w ] [ -s ] [ -v ] [ modulename ]
描述:
rmmod是一個能夠從內核中刪除模塊的小程序,大多數用戶使用modprobe -r去刪除模塊。
選項:
-v –verbose  顯示程序正在作些什麼,通常只顯示執行時的錯誤信息。
-f –force  該選項是很是危險:除非編譯內核時,CONFIG_MODULE_FORCE_UNLOAD被設置該命令纔有效果,不然沒效果。用該選項能夠刪除正在被使用的模塊,設計爲不能刪除的模塊,或者標記爲unsafe的模塊。
-w –wait 一般,rmmod拒絕刪除正在被使用的模塊。使用該選項後,指定的模塊會被孤立起來,直到不被使用。
-s  –syslog  將錯誤信息寫入syslog,而不是標準錯誤(stderr)。
-V  –version 版本信息

以上內容是參考man翻譯的,如有疑問請用man …查看原始文檔,翻譯可能有誤。spa

 

其它:命令行

(1)lsmod 顯示當前加載的全部模塊,至關於cat /proc/modules,

    假設你沒有設定開機加載某個模塊,好比ntfs,那麼開機後執行lsmod,列表裏不會有ntfs這個模塊的,

    這時你再執行 mount -t ntfs xxx後,執行lsmod後列表裏就會有ntfs這個模塊了。
    還要注意的是lsmod顯示的是模塊名,而不是別名(alias)。

(2) modprobe與insmod

    modprobe -l            #顯示當前能夠加載的模塊

    modprobe xxx.ko        #加載某個模塊
    modprobe -r xxx.ko     #卸載某個模塊

 

    經過了解modprobe的manpage咱們知道,我能夠經過modprobe -l來顯示能夠當前能夠加載的模塊,所謂當前能夠加載的模塊,

    實際上就是modules.dep文件中包含的那些模塊,而不是manpage裏說的modprobe會加載/lib/modules/`uname -r`下的全部模塊(也許是我理解錯誤),下面咱們將會證實這一點.

    insmod 與 modprobe 都是載入 kernel module,不過通常差異於 modprobe 可以處理 module 載入的相依問題。

比方你要載入 a module,可是 a module 要求系統先載入 b module 時,直接用 insmod 掛入一般都會出現錯誤訊息,不過 modprobe 卻是可以知道先載入 b module  後才載入 a module,如此相依性就會知足。

不過 modprobe 並非大神,不會厲害到知道 module 之間的相依性爲什麼,該程式是讀取 /lib/modules/2.6.xx/modules.dep 檔案得知相依性的。而該檔案是透過 depmod 程式所創建。

(3)上面(1)中提到modprobe加載某個模塊是根據/lib/modules/`uname -r`目錄下的modules.dep文件中的模塊列表,這個文件中有的模塊modprobe會正確加載,不然就會出錯。
咱們還拿ntfs這個模塊來舉例:
vi /lib/modules/`uname -r`/modules.dep
註釋掉/lib/modules/2.6.18-4-k7/kernel/fs/ntfs/ntfs.ko這一行,就是加個#號.
這個修改是即便生效的。
modinfo ntfs
modinfo: could not find module ntfs
modprobe ntfs
FATAL: Module ntfs not found.
重啓機器,執行一樣的命令會獲得一樣的結果,說明開機不會自動執行depmod的,而
locate ntfs.ko
/lib/modules/2.6.18-4-k7/kernel/fs/ntfs/ntfs.ko
證實咱們並無轉移ntfs模塊。
注意若是重啓機器以前進行mount仍是能夠的,重啓以後就會報錯了,而上邊的都是即時生效的。
還有若是modules.dep裏註釋掉了ntfs,那麼在/etc/modules裏寫上也是不起做用的,說明這個和mount同樣都是依賴 modprobe來完成加載模塊命令的。而insmod是能夠的,由於insmod後面跟的是絕對路徑,它和modules.dep沒什麼關係。 insmod比較重要的用途是用來測試模塊的正確性,加載通常都是依靠modprobe。(這個可能也不起做用了,都用modprobe吧)
這一切只是由於咱們註釋掉了modules.dep中關於ntfs.ko的那一行,而模塊並無刪除或轉移。既然modules.dep文件如此重要,那麼它是怎麼生成的呢?這就和下一個命令有關了,depmod。

(4)depmod

man depmoddepmod -- program to generate modules.dep and map files. Blank lines, and lines starting with a '#' (ignoring spaces) are ignored in modules.dep.depmod是一個用來產生modules.dep和map文件的程序。在modules.dep文件中空白行和以'#'開頭的行將被忽略.Linux kernel modules can provide services (called "symbols") for  othermodules  to  use (using EXPORT_SYMBOL in the code).  linux核心模塊能夠提供服務給其餘模塊,稱之爲"symbols"depmod  creates  a  list of module dependencies, by reading each moduleunder /lib/modules/version and determining what symbols it exports, andwhat  symbols it needs. depmod經過讀取/lib/modules/version目錄下的每個模塊來建立一個記錄模塊相依性的列表。這個列表就是/lib/modules/version目錄下的modules.dep。If a version is provided, then that kernel version's  module  directoryis  used, rather than the current kernel version (as returned by "uname-r").若是給定version的話,那麼depmod會檢查這個version對應的modules目錄而不是當前運行的kernel對應的modules目錄。depmod will also generate various map files in this directory, for  useby the hotplug infrastructure.depmod也會在/lib/modules/version目錄下建立許多map文件,這些文件將會被hotplug用到。OPTIONS:-a --all  Probe  all  modules.  This option is enabled by default if no            file names are given in the command-line.檢查全部的模塊,這個命令是默認的若是你沒有指定模塊名字的話。-A --quick  This option scans to see if any modules are  newer  than  the                 modules.dep file before any work is done%3

相關文章
相關標籤/搜索