首頁 > linux教程 > Linux系統啟動管理 閱讀:0更新時間:2020-03-28 01:03:09

Linux內核模塊管理(查看、添加和刪除)

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
#音效相關模塊

Linux 中所有的模塊都存放在 /lib/modules/2.6.32-279.el6.i686/modules.dep 文件中,在安裝模塊時,依賴這個文件査找所有的模塊,所以不需要指定模塊所在位置的絕對路徑,而且也依靠這個文件來解決模塊的依賴性。如果這個文件丟失了怎么辦?不用擔心,使用 depmod 命令會自動掃描系統中已有的模塊,并生成 modules.dep 文件。命令格式如下:

[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文件又生成了

depmod 命令會掃描系統中所有的內核模塊,然后把掃描結果放入 modules.dep 文件。后續的模塊安裝或刪除就依賴這個文件中的內容。也就是說,如果我們要手工安裝一個模塊,則需要先把模塊復制到指定位置,一般復制至 /lib/modules/2.6.32-279.el6.i686/kernel/ 目錄中,使用 depmod 命令掃描之后,才能繼續安裝。

內核模塊的查看

使用 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
…省略部分輸出…

lsmod命令的指定結果共有三列。
  • 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

vfat 模塊是系統中的默認模塊,所以不需要執行 depmod 命令進行掃描。如果是外來模塊,則必須執行 depmod 命令。因為已經把模塊的完整文件名寫入了 modules.dep 文件,所以安裝模塊的命令不需要寫絕對路徑。

那么,如何刪除這個模塊呢?命令如下:

[root@localhost ~]# modprobe -r vfat
[root@localhost ~]# lsmod | grep vfat
#查找為空

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩