內核模塊操作命令-lsmod+rmmod+modinfo+modprobe

lsmod-查看內核模塊信息

lsmod命令用於顯示已經加載到內核中的模塊的狀態信息。執行lsmod命令後會列出所有已載入系統的模塊。

Linux操作系統的核心具有模塊化的特性,應此在編譯核心時,可以不用把全部的功能都放入核心,而是將這些功能編譯成一個個單獨的模塊,待需要時再分別載入使用。

命令的輸出如下:

1
2
3
4
5
6
7
[root@lvs001 modprobe.d]# lsmod 
Module                  Size  Used by
iptable_nat             5923  0 
nf_nat                 22676  1 iptable_nat
nf_conntrack_ipv4       9186  3 iptable_nat,nf_nat
nf_conntrack           79537  3 iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4          1483  1 nf_conntrack_ipv4
1
2
3
4
5
[root@lvs001 modprobe.d]# lsmod | grep ip_vs
ip_vs_rr                1420  0 
ip_vs                 126705  2 ip_vs_rr
libcrc32c               1246  1 ip_vs
ipv6                  336368  913 ip_vs,ib_ipoib,ib_addr

說明:

  • 第1列:表示模塊的名稱。
  • 第2列:表示模塊的大小。
  • 第3列:表示該模塊調用其他模塊的個數
  • 第4列:顯示該模塊被其他什麼模塊調用

通常在使用lsmod命令時,都會採用類似lsmod | grep -i ipvs這樣的命令來查詢當前系統是否加載了某些模塊。

modinfo-查看內核模塊信息

modinfo會顯示kernel模塊的對象文件,以顯示該模塊的相關信息。

modinfo列出Linux內核中命令行指定的模塊的信息。若模塊名不是一個文件名,則會在/lib/modules/version 目錄中搜索,就像modprobe一樣。

modinfo默認情況下,爲了便於閱讀,以下面的格式列出模塊的每個屬性:fieldname : value。

1
2
3
4
5
6
參  數:
  -a或--author  顯示模塊開發人員。 
  -d或--description  顯示模塊的說明。 
  -h或--help  顯示modinfo的參數使用方法。 
  -p或--parameters  顯示模塊所支持的參數。 
  -V或--version  顯示版本信息。
1
2
3
4
5
6
7
[root@lvs001 modprobe.d]# modinfo ip_vs
filename:       /lib/modules/2.6.32-696.el6.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko
license:        GPL
srcversion:     0FB85919D62C4255E412E5C
depends:        ipv6,libcrc32c
vermagic:       2.6.32-696.el6.x86_64 SMP mod_unload modversions 
parm:           conn_tab_bits:Set connections' hash size (int)

注意,使用lsmod不能看到內核的相關參數配置,而使用modinfo命令則可以顯示

rmmod-卸載內核模塊

rmmod命令 用於從當前運行的內核中移除指定的內核模塊。

執行rmmod指令,可刪除不需要的模塊。

1
2
3
4
5
選項信息:
-v:顯示指令執行的詳細信息;
-f:強制移除模塊,使用此選項比較危險;
-w:等待着,直到模塊能夠被除時在移除模塊;
-s:向系統日誌(syslog)發送錯誤信息。
1
2
[root@lvs001 modprobe.d]# rmmod ip_vs
ERROR: Module ip_vs is in use by ip_vs_rr

使用rmmod卸載模塊的時候,提示信息會比使用modprobe -r 的輸出更詳細,此時會顯示該模塊的被調用情況

insmod-載入內核模塊

insmod(install module)命令用於載入模塊。

Linux有許多功能是通過模塊的方式,在需要時才載入kernel。如此可使kernel較爲精簡,進而提高效率,以及保有較大的彈性。這類可載入的模塊,通常是設備驅動程序。

語法:

1
insmod [-fkmpsvxX][-o <模塊名稱>][模塊文件][符號名稱 = 符號值]
1
2
3
4
5
6
7
8
9
10
11
參數說明:

-f  不檢查目前kernel版本與模塊編譯時的kernel版本是否一致,強制將模塊載入。
-k  將模塊設置爲自動卸除。
-m  輸出模塊的載入信息。
-o<模塊名稱>  指定模塊的名稱,可使用模塊文件的文件名。
-p  測試模塊是否能正確地載入kernel。
-s  將所有信息記錄在系統記錄文件中。
-v  執行時顯示詳細的信息。
-x  不要匯出模塊的外部符號。
-X  匯出模塊所有的外部符號,此爲預設置。

在Linux中,modprobe和insmod都可以用來加載module,不過現在一般都推薦使用modprobe而不是insmod了。
modprobe和insmod的區別是什麼呢?

  • modprobe可以解決load module時的依賴關係,比如load moudleA就必須先load mouduleB之類的,它是通過/lib/modules//modules.dep文件來查找依賴關係的。而insmod不能解決依賴問題。
  • modprobe默認會去/lib/modules/目錄下面查找module,而insmod只在給它的參數中去找module(默認在當前目錄找)。

但是insmod也有它的有用之處,舉個例子吧。

有/root/my-mod.ko這個module,cd /root/,然後用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert這個module了,

但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)卻提示”FATAL: Module my-mod.ko not found”,這就是因爲modprobe是到/lib/modules/uname -r/下去找module的,如果沒找到就是這樣了。

depmod-分析模塊依賴性

modprobe-內核模塊操作

modprobe命令用於智能地向內核中加載模塊或者從內核中移除模塊。

modprobe可載入指定的個別模塊,或是載入一組相依的模塊。

modprobe會根據depmod所產生的相依關係,決定要載入哪些模塊。若在載入過程中發生錯誤,在modprobe會卸載整組的模塊。

1
2
3
4
5
6
7
8
9
10
11
參數選項

-a或--all:載入全部的模塊/指定模塊;
-c或--show-conf:顯示所有模塊的設置信息;
-d或--debug:使用排錯模式;
-l或--list:顯示可用的模塊;
-r或--remove:卸載模塊;
-t或--type:指定模塊類型;
-v或--verbose:執行時顯示詳細的信息;
-V或--version:顯示版本信息;
-help:顯示幫助。

例如:

1
2
卸載:modprobe -r ip_vs 
載入:modprobe -a ip_vs

get_module

需要安裝sysfsutils包之後才能產生該命令

1
yum -y install sysfsutils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@lvs001 modprobe.d]# get_module ip_vs
	initstate            : live
	refcnt               : 2
	srcversion           : 0FB85919D62C4255E412E5C

Parameters:
	conn_tab_bits        : 12
Sections:
	.altinstr_replacement : 0xffffffffa039c2b8
	.altinstructions     : 0xffffffffa039ef98
	.bss                 : 0xffffffffa03a1c60
	.data                : 0xffffffffa039ff00
	.data.cacheline_aligned : 0xffffffffa03a1580
	.data.read_mostly    : 0xffffffffa03a1040
	.exit.text           : 0xffffffffa039c40e
	.gnu.linkonce.this_module : 0xffffffffa03a1a20
	.init.text           : 0xffffffffa03aa000
	.note.gnu.build-id   : 0xffffffffa039c454
	.rheldata            : 0xffffffffa039fee0
	.rodata              : 0xffffffffa039c480
	.rodata.str1.1       : 0xffffffffa039d6e8
	.rodata.str1.8       : 0xffffffffa039dc90
	.smp_locks           : 0xffffffffa039eb68
	.strtab              : 0xffffffffa03ae2f8
	.symtab              : 0xffffffffa03aa4d0
	.text                : 0xffffffffa038a000
	__kcrctab_gpl        : 0xffffffffa039f540
	__kcrctab            : 0xffffffffa039fe80
	__ksymtab_gpl        : 0xffffffffa039f4f0
	__ksymtab_strings    : 0xffffffffa039f590
	__ksymtab            : 0xffffffffa039fdc0
	__mcount_loc         : 0xffffffffa039f6e8
	__param              : 0xffffffffa039f568
	__verbose            : 0xffffffffa03a1980
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章