Linux(入門基礎)113---內核模塊(depmod、lsmod、modinfo、insmod、rmmod、modprobe)

一、內核

  • 內核一般是壓縮文件,使用內核之前,需要解壓縮然後加載到內存中

二、內核模塊(.ko文件)

  • 內核都具有【可讀取模塊化驅動程序】的功能

三、內核與內核模塊的文件目錄

  • 內核文件:/boot/vmlinuz或/boot/vmlinuz-version
  • 內核解壓縮所需的RAM或DIsk:/boot/initramfs或/boot/initramfs-version
  • 內核模塊:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel
  • 內核源代碼:/usr/src/linux或/usr/src/kernel/(要安裝纔有,默認不安裝)

如果內核被順利加載到系統中,有幾個信息會記錄下來

  • 內核版本:/proc/version
  • 系統內核功能:/proc/sys/kernel/

四、編譯內核模塊

如果我們有個新的硬件,但是操作系統不支持,可以進行內核的重新編譯

  • 重新編譯內核,並加入最新的硬件的驅動程序源代碼
  • 將該硬件的驅動程序編譯成模塊,在啓動時加載該模塊即可

五、內核模塊放置目錄

  • 內核模塊一般都放置在/lib/modules/version/kernel/這個目錄內,這個目錄內有分爲幾個目錄

 

  • arch:與硬件平臺有關的選項。例如CPU的等級等
  • crypto:內核所支持的加密技術,例如md5或des等
  • drivers:一些硬件的驅動程序,例如顯卡、網卡、PCI相關硬件等
  • fs:內核所支持的文件系統,例如vfat、reiserfs、nfs等
  • lib:一些函數庫
  • net:與網絡有關的各項協議數據,還有防火牆模塊(net/ipv4/netfilter/*等)
  • sound:與音效有關的各項模塊

六、modules.dep文件

  • 這個文件位於/lib/modules/version/目錄下,記錄了所有的內核模塊的各項依賴性

七、depmod命令

1.功能

  • depmod會跑到模塊標準放置目錄/lib/modules/version/kernel/,並依據相關目錄的定義將全部的模塊讀出來分析,最終將分析的模塊依賴性結果寫入modules.dep文件中

2.命令格式

  • depmod  [-Ane]

相關參數與選項

  • 不加任何選項時:depmod命令會分析目前內核的模塊,並且重新寫入modules.dep文件中
  • -A:加了-A參數,depmod會查找比modules.dep內還要新的模塊,只將新的模塊寫入到modules.dep文件中
  • -n:不將內核模塊寫入modules.dep文件中,而是將結果輸出到屏幕上查看
  • -e:顯示出目前以加載的不可執行的模塊名稱

3.演示案例

例如我有一個網卡驅動程序,文件名爲a.ko,因爲是新加入的模塊,所以我使用depmod來更新模塊依賴性的記錄文件

  • depmod    //直接輸入這個即可

八、lsmod命令

1.功能

  • 查看目前內核加載了多少的模塊

2.查看

信息被分爲三欄

  • Modele:模塊名稱
  • Size:模塊的大小
  • Used by:此模塊是否被其他模塊所使用

九、模塊依賴性

  • 從上面lsmod顯示的信息的Used by欄可以看出,vsock模塊被加載之後,vmw_vsock_vmci_transport模塊纔可以被加載。這就是模塊的依賴性

十、modinfo命令

1.功能

  • 查看單一內核模塊的相關信息,也可以用來當【檢查模塊】使用

2.命令格式

  • modinfo  [選項]  內核模塊文件名

相關參數與選項

  • -a:僅列出作者名稱
  • -d:僅列出該模塊的說明
  • -l:僅列出模塊授權
  • -n:僅列出該模塊的詳細路徑

3.演示案例

  • 案例一:列出drom模塊的相關信息

十一、內核模塊的加載與刪除

  • modprobe:可以加載/刪除模塊
  • insmod:加載模塊
  • rmmod:刪除insmod加載的模塊
  • 區別①:insmond是手動的去加載一個模塊,你要給出該模塊的絕對路徑,而modprobe是根據modules.dep文件的內容自動加載/刪除模塊
  • 區別②:如果模塊之間有依賴性,那麼使用insmod和rmmod加載/刪除模塊時就會出錯,不允許這樣操作。但是modprobe根據modules.dep文件的內容自動加載/刪除模塊,可以解決依賴性問題

insmod命令

  • 格式:insmod  模塊完整路徑名

注意事項

  • 模塊必須使用完整路徑名

演示案例

  • 加載fat.ko這個模塊:insmod   /lib/modules/4.4.0-31-generic/kernel/fs/fat/fat.ko

rmmod命令

  • 格式:rmmod  [-fw]  模塊名
  • -f:強制將該模塊刪除,不論是否正在被使用

演示案例

  • 將剛剛加載的fat模塊刪除:rmmod  fat.ko

modprobe命令

  • 格式:modprobe  [-cfr]  模塊名
  • -c:列出目前系統所有的模塊(更詳細的代號對應表)
  • -f:強制加載該模塊
  • -r:刪除該模塊

注意事項

  • modprobe是根據modules.depmodules.dep文件的內容自動加載/刪除模塊,可以解決依賴性問題
  • 並且後面的模塊名不需要絕對路徑

演示案例

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