1. 程式人生 > >核心模組程式設計之模組工具的使用

核心模組程式設計之模組工具的使用

一.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後不加字尾。