内核升级后 VirtualBox 无法启动

mat*_*pen 15 upgrade virtualbox kernel

昨天我收到了内核升级,重启后,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
Run Code Online (Sandbox Code Playgroud)

我很久以前安装了 VirtualBox

sudo apt install linux-headers-$(uname -r)
sudo apt install virtualbox-dkms virtualbox virtualbox-qt
Run Code Online (Sandbox Code Playgroud)

每天使用,内核更新从来没有问题。我现在收到的错误是

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 '
Run Code Online (Sandbox Code Playgroud)

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

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

小智 9

我面临同样的问题。内核升级后,我的 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
Run Code Online (Sandbox Code Playgroud)

经过这些步骤 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
Run Code Online (Sandbox Code Playgroud)

再次安装它们

sudo apt-get install linux-generic linux-signed-generic
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get purge virtualbox-dkms virtualbox virtualbox-qt
sudo apt-get install virtualbox-5.2
Run Code Online (Sandbox Code Playgroud)

而且,我们在最新模块中支持 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)
Run Code Online (Sandbox Code Playgroud)


Org*_*ble 4

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

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

一旦发现根本原因,我就可以通过卸载并重新安装新内核来修复系统。这修复了我的图形驱动程序,但在启动到新内核后我必须发出sudo /sbin/vboxconfig修复 virtualbox 的问题。

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