在 Gentoo 中建構 VirtualBox 模組
我有一個 gentoo 安裝,我之前
make mrproper
在裡面發布了/usr/src/linux
.我想安裝 VirtualBox 模組,所以我複制
/boot/System.map
並複製/boot/config
到/usr/src/linux
(配置複製到 /usr/src/linux/.config)。然後我跑了:
emerge -1 =app-emulation/virtualbox-modules-4.3.32
其中發出以下警告:
make[3]: Entering directory '/usr/src/linux-3.18.25-gentoo-r1' test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \ echo >&2; \ echo >&2 " ERROR: Kernel configuration is invalid."; \ echo >&2 " include/generated/autoconf.h or include/config/auto.conf are missing.";\ echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ echo >&2 ; \ /bin/false) mkdir -p /var/tmp/portage/app-emulation/virtualbox-modules-4.3.32/work/vboxpci/.tmp_versions ; rm -f /var/tmp/portage/app-emulation/virtualbox-modules-4.3.32/work/vboxpci/.tmp_versions/* WARNING: Symbol version dump ./Module.symvers is missing; modules will have no dependencies and modversions.
出現並沒有失敗,但是當它完成時,我無法載入模組:
# modprobe -v vboxdrv insmod /lib/modules/3.18.25-gentoo-r1-09-07-2015/misc/vboxdrv.ko modprobe: ERROR: could not insert 'vboxdrv': Exec format error
誰能給我一個建議如何解決這個問題?
您很可能在核心中啟用了模組簽名選項。VirtualBox 模組不會自動簽名,每次建構新核心時,我都會重新建構模組並對其進行簽名。
如果是這種情況 - 在終端中輸入以下內容(如果您在 proc 中嵌入了核心配置):
zcat /proc/config.gz | grep CONFIG_MODULE_SIG
如果您沒有嵌入核心配置,請找到您的核心配置 - 它可能位於
/usr/src/linux/.config
或/etc/kernels/kernel-config-<the-corresponding-kernel-version>
例如,您應該看到以下或類似的輸出 (YMMV):
CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_FORCE=y CONFIG_MODULE_SIG_ALL=y # CONFIG_MODULE_SIG_SHA1 is not set # CONFIG_MODULE_SIG_SHA224 is not set # CONFIG_MODULE_SIG_SHA256 is not set # CONFIG_MODULE_SIG_SHA384 is not set CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512" CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
根據選擇的散列函式,您應該使用相同的散列函式來簽署您的模組。有一個實用程序叫做
sign-file
.在早期版本中,它
sign-file
位於 中/usr/src/linux/
,至於4.5
核心,它現在位於/usr/src/linux/scripts/
(同樣是 YMMV)。啟用簽名模組並實際啟動帶有簽名模組的系統
should
通常意味著您已經擁有生成的密鑰和 x509 文件(您可以自己生成簽名密鑰)。執行以下命令:
/usr/src/linux/scripts/sign-file sha512 /usr/src/linux/certs/signing_key.pem /usr/src/linux/certs/signing_key.x509 /lib/modules/<your-kernel-version>/misc/vboxdrv.ko
應該有效地簽署您的模組,並且應該準備好使用
modprobe
.找到 x509 文件和您的簽名密鑰,然後替換上述命令中的路徑。
- 僅供參考,有 4 個 virtualbox 模組需要簽名 -
vboxdrv
、vboxnetflt
和.vboxnetadp``vboxpci