跳过 BTF 第 xxx 代。由于 vmlinux 在 Ubuntu 21.04 上不可用

som*_*ula 11 kernel

内核模块构建导致错误

由于 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无法运行混为一谈,这是错误的。