一、內核
- 內核一般是壓縮文件,使用內核之前,需要解壓縮然後加載到內存中
二、內核模塊(.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