Версия Ubuntu: 16.04
Версия VirtualBox: 5.2.26
Обновления, которые «сломали» что-то: между прошлой неделей и сегодняшним днем (2019/03/18)
Сегодня утром я запустил Ubuntu Software Updater после включения компьютера. После этого я попытался запустить машину Virtual Box (версию, установленную через .deb, а не Ubuntu Software Center), и получил известную ошибку:
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 setup», и любые другие решения похожих проблем / сообщений, которые я нашел на этом сайте). ):
$ 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, и все еще та же самая ошибка.
источник
Ответы:
Простой ответ, пока что - используйте testbuild, предоставленный Vbox, пока мы ждем патча для ядра.
Вы можете найти сборку здесь . Вам нужно будет использовать текущие ссылки, представленные на этой странице, потому что те, которые использовались здесь в примере, изменились.
Убедитесь, что вы удалили текущую версию:
Установите тестовую сборку (измените URL-адрес, чтобы он соответствовал последней тестовой сборке, предоставленной virtualbox, используя вышеуказанную ссылку - https://www.virtualbox.org/wiki/Testbuilds ):
Если вам нужен пакет расширений (измените URL-адрес, чтобы он соответствовал последней тестовой сборке, предоставленной virtualbox, по указанной выше ссылке - https://www.virtualbox.org/wiki/Testbuilds ):
источник
У меня такие же проблемы.
Я переключился обратно на предыдущее ядро. Смотрите это: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/
после этого переустановите виртуальный ящик и он снова заработает.
С уважением Алекс
источник
Это выглядит очень похоже на известную ошибку 1818049, названную «модули dkms virtualbox не могут быть собраны с linux 4.4.0-143.169 [ошибка: слишком много аргументов для функции 'get_user_pages']» .
Реальное рабочее решение будет таким же, как и для проблемы TTY - удалите последние ядра и установите предыдущее хорошее ( мне подходит 4.4.0-138-generic - безопасное удаление USB 3.0 будет работать, проблема getty будет отсутствовать):
и перезагрузите потом. Поэтому нам нужно дождаться нормального стабильного, хорошо протестированного ядра.
Предупреждение: не обновляйте ядро до 4.4.0-143-generic, если вам нужен VirtualBox на гостях и хостах. Подпишитесь на ошибку 1818049 и после подтверждения исправления установите новое ядро обратно с помощью
sudo apt-get install linux-image-generic linux-headers-generic
.источник
Самым простым решением для Ubuntu 16.04 является обновление ядра до той же версии, которую использует Ubuntu 18.04, с помощью следующей команды:
sudo apt-get install --install-recommends linux-generic-hwe-16.04
Перезагрузитесь после запуска вышеуказанной команды.
Если вы запустите dkms, вам не придется переустанавливать гостевые дополнения после перезагрузки машины. Иначе, переустановите гостевые дополнения, и теперь оно должно нормально работать в Ubuntu 16.04.
источник
Очень похоже на Альберто
И снова работает!
источник
После довольно сложных попыток решить ее (ни DKMS, ни Synaptics не кажутся полезными в качестве обходного пути к проблеме), я не смог это сделать, так как ВРЕМЕННОЕ решение для тех, кто может оказаться в той же ситуации и просто по порядку. чтобы иметь возможность продолжать работу с гостевыми машинами, я предлагаю понизить VirtualBox до версии, предлагаемой USC.
Просто удалите текущую версию VirtualBox (я сделал это через Synaptics, но GDebi тоже будет отлично работать).
Установите предлагаемую версию VirtualBox USC (через USC или Synaptics)
Понизить (удалить-установить) модуль VBoxGuestAdditions на хост-компьютере.
На гостевых машинах не забудьте понизить версию VBoxGuestAdditions (вставьте старый компакт-диск VBoxGuestAdditions и запустите его).
Проблема / ошибка все еще существует, поскольку она не позволяет использовать последнюю версию VirtualBox, хотя я надеюсь, что это поможет, но я был бы признателен за окончательное решение, чтобы иметь возможность установить и использовать версию .deb снова.
ОБНОВЛЕНИЕ: Пока что кажется, что нет окончательного решения, так что в моем случае * это продолжает оставаться самым простым. (* Лично я предпочитаю понизить версию VirtualBox, а не возвращаться к предыдущим ядрам Ubuntu).
Однако, если по какой-либо причине кому-то понадобится использовать / установить самую последнюю версию VirtualBox, он может сделать это, следуя этим инструкциям, также упомянутым другими пользователями: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + ошибка / 1818049 / комментарии / 27
источник
Я тоже видел эту проблему. У меня Ubuntu 16.04 LTS. Обновлено ядро до 4.4.0-143. Virtualbox (5.2.14) не будет создавать vboxdrv.ko. Переход на ядро 4.4.0-142 (затем удаление -143) решил проблему.
источник