由于未加载内核模块,Virtual Box 无法启动

由于未加载内核模块,Virtual Box 无法启动

我在 Ubuntu 22.04 机器上顺利运行 Virtualbox。在最近的一次更新之后(已经更新了好几次,我不知道是哪一次坏了),virtualbox 无法启动,抱怨说没有加载必要的内核模块。

内核模块不存在。我卸载了 virtualbox*,清除了它及其依赖项,然后尝试重新安装。这始终无法构建内核模块。

有任何想法吗?

virtualbox-6.1.34,内核 5.15.0-47-generic,gcc(Ubuntu 10.3.0-15ubuntu1)10.3.0。

gcc-11(Ubuntu 11.2.0-19ubuntu1)11.2.0 已安装并处于活动状态,但不是默认的 gcc。

安装日志:

Setting up virtualbox-dkms (6.1.34-dfsg-3~ubuntu1.22.04.1) ...
Loading new virtualbox-6.1.34 DKMS files...
Building for 5.15.0-47-generic
Building initial module for 5.15.0-47-generic
Error! Bad return status for module build on kernel: 5.15.0-47-generic (x86_64)
Consult /var/lib/dkms/virtualbox/6.1.34/build/make.log for more information.

make.log的内容:

DKMS make.log for virtualbox-6.1.34 for kernel 5.15.0-47-generic (x86_64)
wo 14 sep 2022 11:36:34 CEST
make: Entering directory '/usr/src/linux-headers-5.15.0-47-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0
  You are using:           gcc (Ubuntu 10.3.0-15ubuntu1) 10.3.0
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvGip.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvSem.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvTracer.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPLibAll.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/initterm-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/memobj-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/mpnotification-r0drv.o
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
  CC [M]  /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/powernotification-r0drv.o
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/linux/SUPDrv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrv.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvSem.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPLibAll.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvGip.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/SUPDrvTracer.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/powernotification-r0drv.o] Error 1
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/alloc-r0drv.o] Error 1
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/initterm-r0drv.o] Error 1
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
gcc: error: unrecognized command-line option ‘-mharden-sls=all’
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/memobj-r0drv.o] Error 1
make[2]: *** [scripts/Makefile.build:297: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv/r0drv/mpnotification-r0drv.o] Error 1
make[1]: *** [scripts/Makefile.build:560: /var/lib/dkms/virtualbox/6.1.34/build/vboxdrv] Error 2
make: *** [Makefile:1881: /var/lib/dkms/virtualbox/6.1.34/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.15.0-47-generic'

答案1

我也遇到了类似的问题:将 Ubuntu 内核升级到 6.1.0-1015-oem 后,我的虚拟机无法启动,出现以下错误:VirtualBox 内核驱动程序未安装(rc=1908),结果代码为:

ns_error_failure (0x80004005)

原来是由于 Ubuntu 内核升级不一致造成的,即在 Linux 内核版本升级后,virtualbox-dkms 安装用于构建适当的 VirtualBox Linux 内核文件的 linux-header 文件丢失了。所以我是这样修复问题的(在需要的地方使用 sudo):

  1. 检查当前的 Ubuntu 内核版本:

    uname -r
    
  2. 检查是否有适合你的内核版本的 Linux 头文件

    apt search linux-headers-$(uname -r)
    
  3. 如果在适当的位置已经有一些文件:

    ls -l /usr/src/linux-headers-$(uname -r)
    

    (预期:“无法访问”,因为当前没有文件 - 所以应该安装它们)

  4. 应用这些命令:

    sudo apt update && sudo apt install linux-headers-$(uname -r)
    

    现在,来自 3 的相同命令应该返回头文件列表

  5. 重新安装 virtualbox-dkms,以便可以在安装过程中构建 virtualbox 内核驱动文件:

    sudo apt remove virtualbox-dkms
    sudo apt install virtualbox-dkms
    

执行这些命令后,我就能再次使用 VirtualBox 机器了!!

答案2

问题是你的/usr/bin/gcc没有指向默认的 gcc 编译器,而是指向一个较旧的编译器。构建脚本使用通用gcc编译器,即使它与任何早于 的编译器都不兼容gcc-11。构建脚本最好明确使用gcc-11

为了解决这个问题,让我们/usr/bin/gcc指向/usr/bin/gcc-11

答案3

我在 Ubuntu 22.04 机器上顺利运行 Virtualbox。在最近的一次更新之后(已经更新了好几次,我不知道是哪一次坏了),virtualbox 无法启动,抱怨说没有加载必要的内核模块。

我遇到了完全相同的问题。就我而言,virtualbox 抱怨模块未签名。我没有启用安全启动(三重检查),所以这不是问题所在。

我尝试使用 apt 重新安装 virtualbox,从官方 deb、较旧的 deb(virtualbox 6.1.36,而不是最新的 6.1.38)、预发布版本(如 @Rishon JR 所建议的),但都不起作用。

然后我想也许内核版本存在一些不兼容问题。我和你一样,内核版本也是 5.15.0-47-generic。

我如何修复它

我使用以下方法将内核版本降级到 5.10.133-0510133-generic主线:看看这个回答。我是从 PPA 安装的。

您需要重启电脑并从高级选项中选择以内核版本 5.10.x 启动 Linux。请不要删除 5.15.x 版本,以确保您没有破坏任何东西。

然后,我从 Oracle 的存储库安装了 Virtualbox:详细信息这里。添加密钥和 sources.list,以及apt purge旧的 virtualbox,执行apt updateapt install virtualbox

这为我解决了这个问题。

如果您对结果满意,则可以删除 5.15.x 内核或编辑 grub,以便系统默认使用 5.10.x 内核启动。编辑默认 grub 条目的步骤如下这里

希望能帮助到你!

相关内容