内核模块构建导致错误
由于 vmlinux 不可用,跳过 BTF 生成 [我的模块名称]。
此操作在我之前的 Ubuntu 20.10 版本(内核为 5.8.0.55*)中运行良好。我最近更新到了 Ubuntu 版本 21.04——我的内核模块构建出现了此错误。
答案1
这在 ubuntu 22.04 上对我有用。我不再收到“跳过 BTF 生成...”错误。
apt install dwarves
cp /sys/kernel/btf/vmlinux /usr/lib/modules/`uname -r`/build/
当然,你首先要检查你的 vmlinux 确实在/sys/kernel/btf
。
答案2
好的,这就是答案。
之前,我的 Ubuntu 21.10 下的任何虚拟机启动都失败了。从 VMWare 的角度来看,问题是
Could not open /dev/vmmon: No such file or directory.
请确保内核模块‘vmmon’已加载。
(vmnet
并且)
此命令:sudo vmware-modconfig --console --install-all
出现此错误(现在仍然如此!)
Skipping BTF generation for /tmp/modconfig-9O1P2c/vmmon-only/vmmon.ko due to unavailability of vmlinux
解决方案
在我的情况中,我将虚拟机从 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
一旦 UEFI BIOS 被通知,并且驱动程序二进制文件被签名,那么 VMware 就可以正常运行,世界又被拯救了
因此,我并没有完全解决编译问题,但似乎我将此错误消息与 VMware 无法运行混为一谈,这是错误的。
答案3
他们改变了文件“vmlinux.xz”的位置
尝试ln -sf /usr/lib/modules/$(uname -r)/vmlinux.xz /boot/