內核模塊編程之模塊工具的使用

內核模塊編程之模塊工具的使用


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後不加後綴。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章