核心模組程式設計之模組工具的使用
一.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在安裝核心模組時,不需要路徑資訊和模組後的字尾
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後不加字尾。