Wersja Ubuntu: 16.04
Wersja VirtualBox: 5.2.26
Aktualizacje, które coś „zepsuły”: te między ostatnim tygodniem a dniem dzisiejszym (2019/03/18)
Uruchomiłem Ubuntu Software Updater dziś rano, po włączeniu komputera. Następnie próbowałem uruchomić maszynę Virtual Box (wersja zainstalowana przez .deb, a nie Ubuntu Software Center) i otrzymałem ten słynny błąd:
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.
Po przeczytaniu o podobnych problemach i zrozumieniu, dlaczego powinienem to zrobić, wykonałem go (te same wyniki z „sudo /usr/lib/virtualbox/vboxdrv.sh setup” i innymi rozwiązaniami podobnych problemów / postów, które znalazłem na tej stronie ):
$ 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.
Czytając .log, widzę, że problem wydaje się być związany z funkcją „get_user_pages” iw tym momencie szczerze mówiąc nie mam pojęcia, jak go rozwiązać.
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
Próbowałem już wszystkich rozwiązań podobnych problemów z tym komunikatem o błędzie, ale żadne nie działa dla mnie.
Czy ktoś miał podobne problemy po ostatnich aktualizacjach Ubuntu?
AKTUALIZACJA: Całkowicie odinstalowałem VirtualBox, zrestartowałem system, ponownie zainstalowałem VirtualBox i nadal występuje ten sam błąd.
źródło
Odpowiedzi:
Na razie łatwa odpowiedź - użyj kompilacji testowej dostarczonej przez Vbox, czekając na łatę do jądra.
Możesz znaleźć kompilację tutaj . Będziesz musiał użyć bieżących linków podanych na tej stronie, ponieważ te użyte w tym przykładzie uległy zmianie.
Upewnij się, że odinstalowałeś bieżącą wersję:
Zainstaluj wersję testową (zmień adres URL, aby pasował do najnowszej wersji testowej dostarczonej przez virtualbox, korzystając z powyższego linku - https://www.virtualbox.org/wiki/Testbuilds ):
Jeśli potrzebujesz pakietu rozszerzeń (zmień adres URL, aby pasował do najnowszej wersji testowej udostępnionej przez virtualbox, korzystając z powyższego linku - https://www.virtualbox.org/wiki/Testbuilds ):
źródło
Mam te same problemy.
Wróciłem do poprzedniego jądra. Zobacz: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/
po tym zainstaluj ponownie wirtualne pudełko i znów działa.
Pozdrawiam Alex
źródło
Wygląda to bardzo podobnie do znanego błędu 1818049 o nazwie „Moduły Virtualbox dkms nie budują się z Linuksem 4.4.0-143.169 [błąd: zbyt wiele argumentów, aby można było użyć funkcji„ get_user_pages ”] .
Prawdziwe działające rozwiązanie byłoby takie samo jak w przypadku problemu TTY - usuń najnowsze jądra i zainstaluj poprzednie dobre ( 4.4.0-138-ogólny wygląda najlepiej dla mnie - USB 3.0 bezpiecznie usunie się zadziała, problem getty będzie nieobecny):
i uruchom ponownie później. Musimy więc poczekać na normalne stabilne, dobrze przetestowane jądro.
Ostrzeżenie: nie aktualizuj jądra do wersji 4.4.0-143-generic, jeśli potrzebujesz VirtualBox na gościach i hostach. Subskrybuj błąd 1818049, a po potwierdzeniu poprawki zainstaluj ponownie najnowsze jądro za pomocą
sudo apt-get install linux-image-generic linux-headers-generic
.źródło
Najłatwiejszą poprawką dla Ubuntu 16.04 jest aktualizacja jądra do tej samej wersji, z której korzysta Ubuntu 18.04, poprzez uruchomienie następującego polecenia:
sudo apt-get install --install-recommends linux-generic-hwe-16.04
Uruchom ponownie po uruchomieniu powyższej komendy.
Jeśli uruchomisz dkms, nie będziesz musiał ponownie instalować dodatków gości po ponownym uruchomieniu komputera. W przeciwnym razie zainstaluj ponownie dodatki dla gości, a teraz powinno działać dobrze w Ubuntu 16.04
źródło
Bardzo jak Alberto
Gotowy do pracy!
źródło
Po dość trudnych próbach jego rozwiązania (ani DKMS, ani Synaptics nie wydają się przydatne jako obejście problemu), nie byłem w stanie tego zrobić, więc jako rozwiązanie TYMCZASOWE dla tych, którzy mogą być w tej samej sytuacji i tylko w celu aby móc kontynuować pracę z maszynami-gośćmi, sugeruję obniżyć VirtualBox do wersji oferowanej przez USC.
Po prostu odinstaluj aktualną wersję VirtualBox (zrobiłem to przez Synaptics, ale GDebi też idealnie by działało).
Zainstaluj wersję VirtualBox USC (za pośrednictwem USC lub Synaptics)
Zmień wersję (odinstaluj-zainstaluj) moduł VBoxGuestAdditions na maszynie hosta.
Na maszynach gości pamiętaj o obniżeniu wersji VBoxGuestAdditions (włóż starą płytę CD VBoxGuestAdditions i uruchom ją).
Problem / błąd nadal występuje, ponieważ nie pozwala na użycie ostatniej wersji VirtualBox, mam nadzieję, że to pomoże, ale byłbym wdzięczny za najlepsze rozwiązanie, aby móc ponownie zainstalować i używać wersji .deb.
AKTUALIZACJA: Jak dotąd wydaje się, że nie ma ostatecznego rozwiązania, więc w moim przypadku * ten wciąż jest najprostszy. (* Osobiście wolę obniżyć wersję VirtualBox zamiast wracać do poprzednich jąder Ubuntu).
Jeśli jednak z jakiegoś powodu ktoś musi użyć / zainstalować ostatnią wersję VirtualBox, może to zrobić zgodnie z instrukcjami, o których wspominają także inni użytkownicy: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + błąd / 1818049 / komentarze / 27
źródło
Widziałem także ten problem. Mam Ubuntu 16.04 LTS. Zaktualizowano do jądra 4.4.0-143. Virtualbox (5.2.14) nie zbudowałby vboxdrv.ko. Zmiana na jądro 4.4.0-142 (a następnie usunięcie -143) rozwiązało problem.
źródło