内核模块构建导致错误
由于 vmlinux 不可用,正在跳过 BTF 生成 [我的模块名称]。
此操作在我之前使用内核 5.8.0.55* 的 Ubuntu 20.10 版本中运行良好。我最近更新到 Ubuntu 版本 21.04 —— 我的内核模块构建出现了这个错误。
小智 14
这对我在 ubuntu 22.04 上有用。我不再收到错误“正在跳过 BTF 生成...”。
apt install dwarves
cp /sys/kernel/btf/vmlinux /usr/lib/modules/`uname -r`/build/
Run Code Online (Sandbox Code Playgroud)
当然,您首先必须检查您的 vmlinux 确实位于/sys/kernel/btf
.
小智 7
好吧,这就是答案。
之前在我的 Ubuntu 21.10 下启动任何虚拟机都失败。从VMWare的角度来看,问题是
Could not open /dev/vmmon: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
请确保加载了内核模块“vmmon”。
(vmnet
并且)
这个命令:sudo vmware-modconfig --console --install-all
给出了这个错误(并且仍然如此!)
Skipping BTF generation for /tmp/modconfig-9O1P2c/vmmon-only/vmmon.ko due to unavailability of vmlinux
Run Code Online (Sandbox Code Playgroud)
解决方案
在我的情况下,我正在将虚拟机从 Windows 平台迁移到安装了安全启动的 Ubuntu 笔记本电脑
虽然上面的编译并不完美,但它正在创建必要的二进制文件,但因为它们没有签名,所以无法在 Ubuntu 启动时加载
因此,我收到了 BTF 错误消息,我认为这些消息阻止了 VMNware 启动,但我错了。
此链接 https://github.com/mkubecek/vmware-host-modules/issues/87#issuecomment-800051833 解释了签署二进制文件所需的折磨
# generate a key
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
# import to UEFI database
sudo mokutil --import MOK.der (generate a password need next step)
# reboot system and import in UEFI BIOS
# (use same password)
sudo shutdown -r now
# once rebooted need to sign the binaries
sudo kmodsign sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
sudo kmodsign sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
# on reboot new signed binaries used
sudo shutdown -r now
# now good to start VMware and use any VM
Run Code Online (Sandbox Code Playgroud)
一旦 UEFI BIOS 获悉并签署了驱动程序二进制文件,VMware 就可以正常运行,世界再次得到拯救
所以我没有完全解决编译问题,但似乎我将此错误消息与VMware无法运行混为一谈,这是错误的。