在上一次(Ubuntu)软件更新后出现VirtualBox错误


19
  • Ubuntu版本:16.04

  • VirtualBox版本:5.2.26

  • 发生了“损坏”的更新:上周到今天之间的更新(2019/03/18)

打开计算机后,今天早上我运行了Ubuntu Software Updater。之后,我尝试启动Virtual Box机器(通过.deb安装的版本,而不是Ubuntu软件中心安装的版本),并收到该著名错误:

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

在阅读了类似的问题并理解了为什么要这样做之后,我执行了它(与“ sudo /usr/lib/virtualbox/vboxdrv.sh安装程序相同的结果”以及我在本网站上发现的类似问题/帖子的任何其他解决方案) ):

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

通过阅读.log,我发现问题似乎与“ get_user_pages”功能有关,目前我还不知道如何解决该问题。

Building the main VirtualBox module.
Error building the module:
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/4.4.0-143-generic/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules
make[1]: warning: -jN forced in submake: disabling jobserver mode.
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
make -f ./scripts/Makefile.build obj=/tmp/vbox.0
[...]
[...]
[...]
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeLockUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1122:33: warning: passing argument 6 of ‘get_user_pages’ makes pointer from integer without a cast [-Wint-conversion]
                                 fWrite,                 /* force write access. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct page **’ but argument is of type ‘int’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1124:33: warning: passing argument 7 of ‘get_user_pages’ from incompatible pointer type [-Wincompatible-pointer-types]
                                 &pMemLnx->apPages[0],   /* Page array. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1112:18: error: too many arguments to function ‘get_user_pages’
             rc = get_user_pages(pTask,                  /* Task for fault accounting. */
                  ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
  gcc -Wp,-MD,/tmp/vbox.0/r0drv/linux/.mpnotification-r0drv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include  -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -Iubuntu/include  -D__KERNEL__ -fno-pie -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-pie -no-pie -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-maybe-uninitialized -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -I/lib/modules/4.4.0-143-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -Wno-declaration-after-statement -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(mpnotification_r0drv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/r0drv/linux/.tmp_mpnotification-r0drv-linux.o /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.c
scripts/Makefile.build:285: recipe for target '/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o' failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/SUPDrv.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/SUPDrv.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o"; fi; fi;
Makefile:1454: recipe for target '_module_/tmp/vbox.0' failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:101: recipe for target 'vboxdrv' failed
make: *** [vboxdrv] Error 2

我已经尝试过使用此错误消息解决类似问题的所有解决方案,但没有一个适合我。

上次Ubuntu更新后有人遇到过类似的问题吗?

更新:我已经完全卸载了VirtualBox,重新启动了系统,再次安装了VirtualBox,仍然是同样的错误。


2
绝对。我不明白的是,有人声称3月10日就可以为Trusty和Xenial解决以前的错误“版本”,而今天我们有了问题的“新版本”。
AlbertoMartín

您是否尝试过VB 6.0?
heynnema

1
在将几台主机更新为4.4.0-143之后,我今天看到了这一点。其中一个具有相当旧的VirtualBox版本(5.0.x),另一个具有5.2.x(因此不太旧)。更新后,它们都无法启动我的VM,显示内核模块未安装问题。我都升级/还原到5.1.38,最终让它们运行VM。但是,当我尝试在其中一个来宾上安装来宾添加时,在vboxadd-install.log文件中收到get_user_pages错误。
cosimo193

最近,当我尝试安装Virtualbox 5.2.18然后安装v6.0时,我遇到了同样的错误,我的latop是带有安全启动的UEFI系统,因此增加了一个麻烦,那就是您的UEFI系统,如果让我据我所知,如何解决此问题并可以提供解决方案。您可以通过运行以下命令来确认系统是否为UEFI:cd / sys / firmware / efi

Answers:


13

就目前而言,简单的答案-在等待内核补丁时使用Vbox提供的testbuild。

您可以在此处找到构建。您将需要使用该页面上提供的当前链接,因为示例中此处使用的链接已更改。

确保卸载当前版本:

sudo apt remove virtualbox*
dkpk -r virtualbox 
# the tab key will autocomplete the version if there's one for dpkg to remove

安装测试版本(更改URL匹配使用上面的链接通过的VirtualBox提供的最新测试版本- https://www.virtualbox.org/wiki/Testbuilds):

wget https://www.virtualbox.org/download/testcase/VirtualBox-6.0.5-129423-Linux_amd64.run
chmod +x VirtualBox-6.0.5-129423-Linux_amd64.run
sudo ./VirtualBox-6.0.5-129423-Linux_amd64.run

如果你需要的扩展包(更改URL匹配使用上面的链接通过的VirtualBox提供的最新测试版本- https://www.virtualbox.org/wiki/Testbuilds):

wget https://www.virtualbox.org/download/testcase/Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack

1
感谢Robco。我没有时间尝试一下。我降级了VirtualBox,原则上我只等它修复好或等到下一个内核(我真的不需要VirtualBox的最新版本)。但是,对于我来说,对于需要最后一个/最后一个版本的人来说,您的解决方案似乎是最好的,因为它很稳定。你自己尝试过吗?稳定吗?
AlbertoMartín

嗨,阿尔贝托。是的,我不想降级内核,而是尝试降级vbox(也许我还没有做得足够远),但是仍然无法构建驱动程序。我已经为4个用户完成了此操作,没有任何问题。
罗布科

1
感谢您对Robco的反馈。听起来不错。在那种情况下,我认为这是迄今为止解决该问题的最优雅的方法。
阿尔贝托·马丁

1
您可以在此页面上找到最新的测试版本:virtualbox.org/wiki/Testbuilds
Tom Saleeba

2
需要注意的是:“如果仍需要支持32位主机,请使用5.2版,因为在6.0中已不再提供支持。” virtualbox.org/wiki/Downloads。仍支持32位来宾
Piskvor


4

这看上去与已知的错误1818049非常相似,该错误名为“ virtualbox dkms模块无法使用linux 4.4.0-143.169构建[错误:函数'get_user_pages'的参数过多”]”

真正有效的解决方案将与TTY问题相同-删除最新的内核并安装以前的好内核(4.4.0-138-generic最适合我-USB 3.0安全删除将正常工作,getty问题将不存在):

sudo apt-get purge linux-image-generic linux-headers-generic
sudo apt-get purge linux-image-4.4.0-139-generic linux-headers-4.4.0-139-generic \
linux-image-4.4.0-140-generic linux-headers-4.4.0-140-generic \
linux-image-4.4.0-141-generic linux-headers-4.4.0-141-generic \
linux-image-4.4.0-142-generic linux-headers-4.4.0-142-generic \
linux-image-4.4.0-143-generic linux-headers-4.4.0-143-generic

sudo apt-get install amd64-microcode intel-microcode thermald
sudo apt-get autoremove

sudo apt-get install linux-image-4.4.0-138-generic linux-image-extra-4.4.0-138-generic
sudo apt-get install linux-headers-4.4.0-138 linux-headers-4.4.0-138-generic

然后重启。因此,我们需要等待经过测试的正常稳定内核。

警告:如果在来宾和主机上需要VirtualBox,请不要将内核升级到4.4.0-143-generic。订阅bug 1818049,并在确认修复后,使用sudo apt-get install linux-image-generic linux-headers-generic


3

Ubuntu 16.04的最简单修复是通过运行以下命令将内核升级到Ubuntu 18.04使用的相同版本:

sudo apt-get install --install-recommends linux-generic-hwe-16.04

运行以上命令后重新启动。

如果运行dkms,则在计算机重新引导后,您将不必重新安装来宾添加项。否则,请重新安装来宾添加项,现在在Ubuntu 16.04中应该可以正常工作


谢谢,为我工作
杰森·摩根

2

非常像阿尔贝托的

  1. sudo /usr/lib/virtualbox/vboxdrv.sh设置(出现错误,但停止了VBox ...)
  2. sudo dpkg -l | grep virtualbox(获取VBox版本。)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt(第2步中的XYZ版本)
  4. 从Ubuntu软件安装:降级到5.1.38

重新启动并运行!


2

在尝试解决该问题(DKMS或Synaptics似乎都不是解决该问题的方法)之后,我一直无法做到这一点,因此对于那些可能处于相同情况并且只是为了有条理的人而言,使用TEMPORARY解决方案为了能够继续使用客户机,我建议将VirtualBox降级为USC提供的版本。

  • 只需卸载当前的VirtualBox版本(我是通过Synaptics完成的,但是GDebi也会完美地工作)。

  • 安装VirtualBox USC提供的版本(通过USC或Synaptics)

  • 在主机中降级(卸载)VBoxGuestAdditions模块。

  • 在来宾计算机中,请记住要降级VBoxGuestAdditions(插入旧的VBoxGuestAdditions CD并运行它)。

问题/错误仍然存​​在,因为它不允许使用最新的VirtualBox版本,但我希望它能有所帮助,但我希望最终的解决方案能够再次安装和使用.deb版本。

更新: 到目前为止,似乎还没有最终的解决方案,所以就我而言*,这个解决方案一直是最简单的解决方案。(*就个人而言,我更喜欢降级VirtualBox,而不是回到以前的Ubuntu内核)。

但是,如果出于任何原因需要使用/安装VirtualBox的最新版本,则可以按照其他用户也提到的这些说明进行操作:https : //bugs.launchpad.net/ubuntu/+source/virtualbox/ + bug / 1818049 / comments / 27


1

我也看到了这个问题。我有Ubuntu 16.04 LTS。它更新为4.4.0-143内核。Virtualbox(5.2.14)无法生成vboxdrv.ko。降级到内核4.4.0-142(然后删除-143)解决了该问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.