Ubuntu

如何在 Ubuntu 中載入壓縮的核心模組?

  • June 12, 2020

我想在我的系統上使用 LZMA 壓縮的核心模組。不幸的是,Canoncial 在核心和使用者空間工具中都禁用了該功能。這是我到目前為止所做的:

  1. 使用以下命令編譯並安裝目前的14.04.05-LTS 核心(v4.4.19):
CONFIG_MODULE_COMPRESS=y
CONFIG_MODULE_COMPRESS_XZ=y

安裝後,我現在可以.ko.xz/lib/modules/4.4.19-37.56+/kernel/. 2. 將kmod_22包從 Xenial (16.04) 反向移植到使用該--with-xz選項配置的 Trusty (14.04)。這似乎也有效。 3. 執行update-initrams -u -k 4.4.19-37.56+

到目前為止有效的方法:

  • 對未壓縮模組的任意操作(例如由 DKMS 建構的模組):
$ modinfo nvidia_370
filename:       /lib/modules/4.4.19-37.56+/updates/dkms/nvidia_370.ko
[…]
  • 按完整路徑顯示壓縮模組:
modinfo /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
  • 通過完整路徑載入沒有(缺少)依賴項的壓縮模組:
insmod /lib/modules/4.4.19-37.56+/kernel/fs/jfs/jfs.ko.xz
  • 解除安裝此類模組:
rmmod jfs

什麼不起作用:

  • 卸貨modprobe -r
  • 任何其他只有包名但沒有路徑的操作,例如:
# insmod jfs
insmod: ERROR: could not load module jfs: No such file or directory
# modprobe jfs
modprobe: FATAL: Module jfs not found in directory /lib/modules/4.4.19-37.56+

因此,對於沒有依賴jfs項的模組,有一種解決方法,我可以指定完整的模組文件路徑insmodmodprobe.

我想核心模組目錄不會以某種方式獲取壓縮的模組文件。如何按名稱載入壓縮核心模組modprobe

你需要執行depmod.

depmod(預設情況下)讀取下的模組/lib/modules/$(uname -r),找到它們導出的符號以及它們自己需要的符號,然後使用這些資訊創建模組之間的符號(模組)依賴關係,並將其保存在文件中/lib/modules/$(uname -r)/modules.dep並創建二進制雜湊/lib/modules/$(uname -r)/modules.dep.bin

它還創建了另外兩個文件:

  • /lib/modules/$(uname -r)/modules.symbols(它是二進制雜湊/lib/modules/$(uname -r)/modules.dep.bin):包含每個模組導出的符號
  • /lib/modules/$(uname -r)/modules.devname: 包含/dev需要為必要模組創建的條目,包含模組名稱、/dev條目名稱和主、次編號

請注意,您還可以depmod針對特定核心版本或特定模組執行,檢查man depmod.

引用自:https://unix.stackexchange.com/questions/308870