Versão do Ubuntu: 16.04
Versão do VirtualBox: 5.2.26
Atualizações que "quebraram" algo: aquelas entre a semana passada e hoje (18/03/2019)
Eu executei o Ubuntu Software Updater hoje de manhã, depois de ligar o computador. Depois, tentei iniciar uma máquina Virtual Box (versão instalada via .deb, não a Ubuntu Software Center) e obtive o famoso erro:
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.
Depois de ler sobre problemas semelhantes e entender por que devo fazê-lo, executei-o (mesmos resultados com 'sudo /usr/lib/virtualbox/vboxdrv.sh setup' e outras soluções para problemas / posts semelhantes que encontrei neste site ):
$ 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.
Ao ler o .log, vejo que o problema parece estar relacionado à função "get_user_pages" e, neste ponto, sinceramente não tenho idéia de como resolvê-lo.
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
Eu já tentei todas as soluções para problemas semelhantes com essa mensagem de erro, mas nenhuma funciona para mim.
Alguém teve problemas semelhantes após as últimas atualizações do Ubuntu?
ATUALIZAÇÃO: Desinstalei completamente o VirtualBox, reiniciei o sistema, instalei o VirtualBox novamente e continuo com o mesmo erro.
fonte
Respostas:
A resposta fácil, por enquanto - use o testbuild fornecido pelo Vbox enquanto aguardamos um patch do kernel.
Você pode encontrar a compilação aqui . Você precisará usar os links atuais fornecidos nessa página porque os usados aqui no exemplo foram alterados.
Certifique-se de desinstalar sua versão atual:
Instale a versão de teste (altere o URL para corresponder à versão de teste mais recente fornecida pelo virtualbox usando o link acima - https://www.virtualbox.org/wiki/Testbuilds ):
Se você precisar do pacote de extensão (altere o URL para corresponder à versão de teste mais recente fornecida pelo virtualbox usando o link acima - https://www.virtualbox.org/wiki/Testbuilds ):
fonte
Eu tenho os mesmos problemas.
Voltei ao kernel anterior. Veja isto: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/
depois disso, reinstale a caixa virtual e ela estará funcionando novamente.
Atenciosamente Alex
fonte
Isso parece muito semelhante ao bug conhecido 1818049 chamado "módulos dbox virtualbox falham ao criar com o linux 4.4.0-143.169 [erro: muitos argumentos para funcionar 'get_user_pages']" .
A solução real seria a mesma que para o problema TTY - remova os kernels mais recentes e instale o anterior (o 4.4.0-138-genérico parece melhor para mim - a remoção com segurança do USB 3.0 funcionará, o problema getty estará ausente):
e reinicie depois. Portanto, precisamos aguardar o kernel normal e bem testado, estável .
Aviso: não atualize o kernel para 4.4.0-143-generic se você precisar do VirtualBox em convidados e hosts. Assine o bug 1818049 e após a confirmação da correção - instale novamente o kernel mais recente
sudo apt-get install linux-image-generic linux-headers-generic
.fonte
A correção mais fácil para o Ubuntu 16.04 é atualizar o kernel para a mesma versão que o Ubuntu 18.04 usa executando o seguinte comando:
sudo apt-get install --install-recommends linux-generic-hwe-16.04
Reinicie após executar o comando acima.
Se você executar dkms, não precisará reinstalar as adições de convidados após a reinicialização da máquina. Caso contrário, reinstale as adições de convidados e agora deve funcionar bem no Ubuntu 16.04
fonte
Muito parecido com o de Alberto
Em funcionamento novamente!
fonte
Depois de tentar bastante resolvê-lo (nem o DKMS nem o Synaptics parecem ser úteis como solução alternativa para o problema), não consegui fazer isso, por isso, como solução TEMPORÁRIA para aqueles que poderiam estar na mesma situação e em ordem para poder continuar trabalhando com máquinas convidadas, sugiro fazer o downgrade do VirtualBox para a versão que a USC oferece.
Apenas desinstale a versão atual do VirtualBox (eu o fiz via Synaptics, mas o GDebi também funcionaria perfeitamente).
Instale a versão oferecida pelo VirtualBox USC (via USC ou Synaptics)
Faça o downgrade (desinstale-instale) o módulo VBoxGuestAdditions na máquina host.
Nas máquinas convidadas, lembre-se de fazer o downgrade do VBoxGuestAdditions (insira o CD antigo do VBoxGuestAdditions e execute-o).
O problema / erro ainda está lá, pois não permite usar a última versão do VirtualBox, espero que ajude, mas gostaria de ter uma solução definitiva para poder instalar e usar a versão .deb novamente.
ATUALIZAÇÃO: Até agora, parece que não há solução definitiva, portanto, no meu caso *, este continua sendo o mais simples. (* Pessoalmente, prefiro fazer o downgrade do VirtualBox em vez de voltar aos kernels anteriores do Ubuntu).
No entanto, se por algum motivo alguém precisar usar / instalar a última versão do VirtualBox, poderá fazê-lo seguindo estas instruções, também mencionadas por outros usuários: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + bug / 1818049 / comentários / 27
fonte
Eu também vi esse problema. Eu tenho o Ubuntu 16.04 LTS. Ele foi atualizado para o kernel 4.4.0-143. O Virtualbox (5.2.14) não criaria o vboxdrv.ko. A atualização para o kernel 4.4.0-142 (removendo -143) resolveu o problema.
fonte