Linux內核模塊管理(查看、添加和刪除)
模塊的全稱是動態可加載內核模塊,它是具有獨立功能的程序,可以被單獨編譯,但不能獨立運行。模塊是為內核或其他模塊提供功能的代碼集合。這些模塊可以是 Linux 源碼中自帶的,也可以是由硬件廠商開發的(可以想象成驅動)。不過內核因為發布時間較長,所以自帶的模塊可能版本較低,還有一些新硬件可能就不自帶模塊了,只能由硬件廠商在發布硬件的同時發布新模塊。
也就是說,安裝模塊一般有兩種方法:
- 第一種方法在編譯內核時,手工調整內核模塊功能,加入所需的模塊。這種方法有一個問題,就是內核必須支持這個硬件或功能才可以通過編譯內核加入模塊。如果硬件比內核新,內核本身并不支持硬件,就不能通過重新編譯內核來加入新的硬件的支持。
- 第二種方法就是下載廠商發布的新硬件的驅動模塊,或下載驅動程序,再編譯成驅動模塊,然后手工安裝。
本節我們主要來學習第二種方法,也就是如果我已經得到了一個模塊,該如何手工安裝?這個模塊該如何得到呢?
如果是新硬件的驅動,則可以到硬件官方網站下載內核驅動或內核模塊。如果下載的是內核模塊,則直接安裝即可;如果下載的是內核驅動源碼,則只需要編譯源碼包,就會生成模塊(具體編譯過程和源碼包安裝非常類似,可以查看驅動的說明)。如果需要加入的模塊不是硬件的驅動,而只是內核中的某項功能,那么,只要部分重新編譯內核,就可以生成新功能的模塊(我們會通過 NTFS 文件系統支持來學習這種方法),然后安裝這個模塊即可。
內核模塊保存位置與模塊保存文件
內核模塊的保存位置在什么地方?其實在 /lib/modules/ 內核版本 /kernel/ 目錄中,在 CentOS 6.x 中這個目錄就是:
[root@localhost ~]# cd /lib/modules/2.6.32-279.el6. i686/kemel/
查看一下目錄內容:
[root@localhost kernel]#ls
arch
與硬件相關的模塊
crypto
#內核支持的加密技術的相關模塊
drivers
#硬件的驅動程序模塊,如顯卡、網卡等
fs
#文件系統模塊,如 fat、vfat、nfs等
lib
#函數庫
net
#網絡協議相關模塊
sound
#音效相關模塊
[root@localhost ~]# depmod [選項]
#不加選項,depmod命令會掃描系統中的內核模塊,并寫入modules.dep文件
- -a:掃描所有模塊;
- -A:掃描新模塊,只有有新模塊時,才會更新modules.dep文件;
- -n:把掃描結果不寫入modules.dep文件,而是輸出到屏幕上;
我們把 modules.dep 文件刪除,看看使用 depmod 命令是否可以重新生成這個文件。命令如下:
[root@localhost ~]# cd /lib/modules/2.6.32-279.el6.i686/
#進入模塊目錄
[root@localhost 2.6.32-279.el6.i686]# rm -rf modules.dep
#刪除 modules.dep文件
[raot@localhost 2.6.32-279.el6.i686]# depmod
#重新掃描模塊
[root@localhost 2.6.32-279.el6.i686]# ls -l modules.dep
-rw-r--r--. 1 root root 191899 5 月 23 07:09 modules.dep
#再查看一下,modules.dep文件又生成了
內核模塊的查看
使用 lsmod 命令可以查看系統中到底安裝了哪些內核模塊。命令如下:
[root@localhost ~]# lsmod
Module Size Used by
autofs4 20981 3
sunrpc 215000 1
ipt_REJECT 1867 2
nf_conntrack_ipv4 7694 2
nf_defrag_ipv4 1039 1 nf_conntrack_ipv4
…省略部分輸出…
- Module:模塊名。
- Size:模塊大小。
- Used by:模塊是否被其他模塊調用。
我們還可以使用 modinfo 命令來查看這些模塊的說明,命令格式如下:
[root@localhost ~]# modinfo 模塊名 例如:
[root@localhost ~]# modinfo autofs4
filename:/lib/modules/2.6.32-279.el6.i686/kernel/fs/autofs4/autofs4.ko
license: GPL
srcversion: 4F798AD1AD66D2CBBB5D953
depends:
vermagic:2.6.32-279.el6.i686 SMP mod_unload modversions 686
#能夠看到模塊名,來源和簡易說明
內核模塊的添加與刪除
其實,如果模塊已經下載到本機了,那么安裝模塊的方法非常簡單。首先需要把模塊復制到指定位置,一般復制到 /lib/modules/2.6.32-279.el6.i686/kemel/ 目錄中,模塊的擴展名一般是 *.ko;然后需要執行 depmod 命令掃描這些新模塊,并寫入 modules.dep 文件;最后就可以利用 modprobe 命令安裝這些模塊了。命令格式如下:[root@localhost ~]# modprobe [選項] 模塊名
選項:- -I:列出所有模塊的文件名,依賴 modules.dep 文件;
- -f:強制加載模塊;
- -r:刪除模塊;
舉個例子,我們需要安裝 vfat 模塊(fat32 文件系統的模塊),那么需要執行如下命令即可:
[root@localhost ~]# modprobe vfat
#安裝vfat模塊
[root@localhost ~]# Ismod | grep vfat
vfat 8575 0
fat 47049 1 vfat
那么,如何刪除這個模塊呢?命令如下:
[root@localhost ~]# modprobe -r vfat
[root@localhost ~]# lsmod | grep vfat
#查找為空
beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。
通俗易懂,深入淺出,一篇文章只講一個知識點。
文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。
文章不涉及代碼,不燒腦細胞,人人都可以學習。
當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!