內核模塊編程之模塊工具的使用
Author:tiger-john
Time:2013-08-01
mail:[email protected]
Blog:http://blog.csdn.net/tigerjibo/article/details/9708967
轉載請註明出處!
[摘要]:本文主要介紹了在內核模塊中,如何使用模塊工具加載模塊驅動、卸載模塊驅動、顯示已經加載的內核模塊信息,以及如何通過模塊工具查看內核模塊之間的依賴關係、以及如何查看模塊的附加信息。並講解了insmod和modprobe的區別以及rmmod和modprobe的區別。
一..insmod
1.功能:
用來加載內核模塊。
2.使用方法:
insmod module_name.ko
如果模塊不在當前目錄,需要給出模塊的具體路徑名:
insmod /home/jibo/helloworld/helloworld.ko
二.modprobe
1.功能:
主要用來裝載內核模塊到運行的內核中,也可以結合參數執行一些其它功能。
2.使用方法:
modprobe module_name
直接跟內核模塊名,不用加具體的路徑信息。
note:insmod和modprobe又有什麼相同點和不同點呢。
(1)相同點:
在Linux中,modprobe和insmod都可以用來加載module。
(2)區別:
1>依賴關係
modprobe可以解決load modue時的依賴關係,比如load moduleA就必須先load moduleB之類的,它是通過/lib/modules/<kernel-version>/modules.dep文件來查找依賴關係的,該依賴文件是通過depmod生成的。因此modprobe可以一次將所有依賴關係的驅動全部加載到內核。insmod不能解決依賴關係。
2》安裝方式
modprobe默認會去/lib/modules/<kernel-version>/下面尋找module,一次將所有依賴關係的驅動全部加載到內核,即modprobe在安裝內核模塊時,不需要路徑信息和模塊後的後綴.ko。而insmod只在給它的參數中去找module(默認在當前目錄找),insmod一次只能加載特定的一個設備驅動,即insmod加載內核模塊時要指定內核模塊的絕對路徑,如果不指定則表示在當前目錄下,並且要加模塊的後綴.ko。因此,當模塊不在/lib/modules/<kernel-version>/下時,選擇使用insmod比較好。如果使用modprobe則會提示:
FATAL: Modulemy-mod.ko not found
3>其他功能
modprobe加-r選項可以用來刪除模塊,而insmod沒有該功能。
3.常見參數用法
-a/-all:加載全部的模塊
-c/--show-conf 顯示所有模塊的設置信息
-d/--debug使用debug模式
-l/--list顯示可用的模塊
-r/--remove:用於刪除模塊
-v/--verbose:執行時顯示詳細的信息
-V/-version:顯示版本信息
-C/--config configfile :指定版本信息
eg:
modprobe -r module_name 刪除模塊module_name
modprobe -l | grep module_name 查看module_name是否編譯進內核。等價於lsmod| grep module_name
三.rmmod
1.功能:
刪除不需要的模塊。
2.使用方法:
rmmod module_name
-a:刪除所有目前不需要的模塊
-s:把信息輸出至syslog常駐服務,而非終端機界面。
-w:若該模塊組正被使用,則rmmod會等待該模塊組被使用完畢後,才移除他。
note:
用rmmod來去除內存中的模塊,加不加後綴ko都可以,而且在任何路徑都可以。和modprobe不同,rmmod不會刪除一個模塊所依賴的模塊。如果要想刪除模塊的依賴模塊,則可以使用modprobe -r。
四.lsmod
1.功能:
列出內核已經加載模塊的狀態,它只是將/proc/modules的內容以格式化式的形式輸出。
2.使用方法:
直接使用lsmod就可以。其輸出格式爲:
Module(模塊名) Size(模塊大小) Used by(被..使用)
五.depmod
1.功能:
分析可加載模塊的依賴性,生成modules.dep文件和映射文件。depmod讀取在/lib/modules/version目錄下的所有模塊,並檢查每個模塊導出的symbol和需要的symbol,然後創建一個依賴關係列表。默認地,該列表寫入到/lib/modules/version目錄下的modules.dep文件中。
2.使用方法:
-a:爲所有列在/etc/modprobe.conf或/etc/modules.conf 中的所有模塊創建依賴關係,並且寫入到modules.dep文件
-e:列出已掛載但不可用的模塊
-n:列出所有模塊的依賴關係,但僅僅是輸出出來(Write the dependency file onstdout only)
note:
modules.dep 位於/lib/modules/<shell uname -r> 目錄
六.modinfo
1.功能:
顯示內核模塊的信息,包括模塊的作者,模塊的說明,某模塊所支持的參數以及vermagic。不過這些信息要在內核模塊中通過以下函數進行模塊聲明:
MODULE_AUTHOR(“author”);// 作者
MODULE_DESCRIPTION(“description”);// 描述
MODULE_VERSION(”version_string“);// 版本
MODULE_DEVICE_TABLE(“table_info”);// 設備表
對於 USB , PCI 等設備驅動,通常會創建一個 MODULE_DEVICE_TABLE
MODULE_ALIAS(”alternate_name“);// 別名
2.使用方法:
#modinfo module_name
note:
module_name後不加後綴。