8、Linux內核與內核模塊

既然要處理內核模塊,自然就得要了解內核提供的模塊之間的相關性。基本上,內核模塊的放置處是在/lib/modules/$(uname -r)/kernel,裏面主要分成幾個目錄:

arch:與硬件平臺有關的選項,例如CPU的等級等。

crypto:內核所支持的加密技術,例如md5或者是des等。

drivers:一些硬件的驅動程序,例如顯卡、網卡、PCI相關硬件等。

fs:內核所支持的文件系統,例如vfat、reiserfs、nfs等。

lib:一些函數。

net:與網絡有關的各項協議數據,還有防火牆模塊(net/ipv4/netfilter/*)等。

sound:與音效有關的各項模塊。

Linux Kernel2.6.X版本的內核模塊擴展名一定是以“.ko”結尾的

① depmod

如果要我們一個一個去檢查這些模塊的主要信息,然後去定義出他們的依賴性,這樣肯定不現實。

Liunx提供了一些模塊的依賴性的解決方案,就是檢查/lib/modules/$(uname -r)/modules.dep這個文件,那麼如何創建這個文件?

#depmod [-Ane]

參數

不加任何參數,depmod會主動去分析目前內核的模塊,並重新寫入/lib/modules/$(uname -r)/modules.dep當中。

-A:查找比modules.dep文件中新的模塊,如果找到新模塊,纔會更新。

-n:不寫入modules.dep文件中,而是將結果輸出到屏幕上。

-e:顯示目前已加載的不可執行的模塊名稱。

② 查看內核模塊

a.  lsmod

#lsmod

圖片.png 

Module:模塊名稱;

Size:模塊的大小;

Used by:此模塊是否被其他模塊所使用;

如上圖所示,nf_nat_ipv4會被iptable_nat所使用,簡單說,當你要加載iptable_nat模塊時,需要先加載nf_nat_ipv4模塊纔可以。

b.  modinfo

查看模塊信息

#modinfo [-adln] [module_name|filename]

參數:

-a:僅列出作者名稱;

-d:僅列出該module的說明;

-l:僅列出該module的授權;

-n:僅列出該module的詳細路徑;

 

#modinfo -a e1000e

圖片.png 

#modinfo -d e1000e

圖片.png
 

#modinfo -l e1000e

圖片.png
 

#modinfo -n e1000e

圖片.png
 

③ 內核模塊的加載與刪除

如果想自行加載內核模塊,最簡單的方法是使用modprobe命令,因爲modprobe會主動去查找modules.dep的內容,首先會克服模塊的依賴性,才決定需要加載的模塊有哪些。

insmod則完全由用戶自行加載一個完整文件名的模塊,並不會主動分析模塊依賴性。

a.  insmod

#insmod [/full/path/module_name] [parameters]

例如:

#insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko

圖片.png

#lsmod |grep cifs.ko

b.  rmmod

#rmmod [-fw] module_name

參數:

-f:強制將該模塊刪除,不論是否正被使用

-w:若該模塊正被使用,則等待該模塊被使用完畢後刪除它

#rmmod cifs

c.  modprobe

#modprobe [-lcfr] module_name

參數:

-c:列出目前系統所有的模塊

-l:列出目前在/lib/modules/$(uname -r)/kernel當中的所有模塊完整文件

-f:強制加載該模塊

-r:類似rmmod,刪除某個模塊

例子:

加載cifs模塊

#modprobe cifs

圖片.png 

刪除cifs模塊

#modprobe -r cifs

圖片.png

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