内核升级后 VirtualBox 无法启动

内核升级后 VirtualBox 无法启动

昨天我收到了内核升级,重启后,VirtualBox 停止工作。

这是我的系统信息(内核升级后):

matteo@workstation:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
matteo@workstation:~$ uname -a
Linux workstation 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

我很久以前就安装了 VirtualBox

sudo apt install linux-headers-$(uname -r)
sudo apt install virtualbox-dkms virtualbox virtualbox-qt

每天都在使用,从未遇到过内核更新问题。我现在收到的错误是

matteo@workstation:~$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Exec format error
matteo@workstation:~$ dmesg | tail -n 1
[ 1413.167311] vboxdrv: version magic '4.4.0-116-generic SMP mod_unload modversions ' should be '4.4.0-116-generic SMP mod_unload modversions retpoline '

我发现一个论坛帖子中有此错误消息这里三天前,不幸的是没有解决方案。因此,我尝试从 Ubuntu 存储库中删除 VirtualBox 包,并使用安装最新的 5.2此程序。然而,即使重启机器后,错误仍然存​​在。

在这种情况下我能做什么?

答案1

我遇到了同样的问题。内核升级后,我的 gcc 版本显示为 5.4.1。将此版本降级到 5.4.0 帮助我为 vboxdrv 内核模块提供了 retpoline。

按照此步骤关联帮助我解决了我的问题:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:ubuntu-toolchain-r/test
#Select gcc version 5 using update-alternatives manually
sudo update-alternatives --config gcc

完成这些步骤后,gcc --version 应该是 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609

然后清除所有新的 Linux 标头(4.4.0-116)

sudo apt-get purge linux-headers-4.4.0-116 linux-headers-4.4.0-116-generic linux-image-4.4.0-116-generic linux-image-extra-4.4.0-116-generic linux-signed-image-4.4.0-116-generic

再次安装它们

sudo apt-get install linux-generic linux-signed-generic

然后重新安装 virtualbox,这次我安装了最新的 virtualbox-5.2,但是 virtualbox 的默认 5.0 版本也应该可以正常工作。

sudo apt-get purge virtualbox-dkms virtualbox virtualbox-qt
sudo apt-get install virtualbox-5.2

并且,我们在最新模块中提供了 retpoline 支持

anirudh@AHDRMD34579:~$ modinfo vboxdrv 
filename:       /lib/modules/4.4.0-116-generic/misc/vboxdrv.ko
version:        5.2.6 r120293 (0x00290000)
license:        GPL
description:    Oracle VM VirtualBox Support Driver
author:         Oracle Corporation
srcversion:     4880B21EFF1B605D6402982
depends:        
vermagic:       4.4.0-116-generic SMP mod_unload modversions retpoline 
parm:           force_async_tsc:force the asynchronous TSC mode (int)

答案2

@ricab 的评论中列出的相关问题已追溯到新内核的问题,需要特定版本级别的 gcc 才能成功编译内核模块。

在我的系统上,gcc 更新是在内核更新之后推出的,导致重新编译失败。

找到根本原因后,我可以通过卸载并重新安装新内核来修复系统。这修复了我的显卡驱动程序,但我必须sudo /sbin/vboxconfig在启动新内核后修复 VirtualBox。

我的系统是 14.04,所以我无法建议你为你的 16.04 系统选择合适的 gcc 版本,但这在https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/1750937

答案3

我最近也遇到了这个问题,并在这里发布了一个问题。我做了一些调查,这确实是一个已知问题。

错误报告在我的链接中。

Virtualbox 突然停止工作

我认为普遍的共识是启动 4.4 内核,直到问题解决。(这对我来说当然是最简单的解决方案。)

相关内容