一、环境配置
系统版本:ubuntu16.04 LTS
内核版本可通过:
uname -r
命令查看
内核版本:升级前=>4.4.0-142-generic 升级后=>4.4.0-143-generic
二、出现的问题
virtualbox在打开启动一个虚拟环境后,报错,并提示:
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 /sbin/vboxconfig
后,又有报错提示。
三、解决方案
将ubuntu内核降级到原版本,即4.4.0-143-generic=>4.4.0-142-generic。我们直接用简单粗暴的移除当前最新版本的方法,当然你需要保证之前的内核版本还存在。顺序执行以下命令
1)此命令查看当前系统中存在哪些内核版本,可以查看install状态的是不是还有上一个内核版本,如果没有,咱们这个方法就不管用了,你要另寻他法
sudo dpkg --get-selections |grep linux-image
2)移除当前内核版本
sudo apt remove linux-image-4.4.0-143-generic
3)记得要删除boot文件中相关的内核文件
sudo rm /boot/*4.4.0-143*
4)删除一些无用的包
sudo apt update
sudo apt autoremove
sudo apt autoclean
5)重启系统
6)再次执行
sudo /sbin/vboxconfig
若无报错,即完成修复,可以正常打开虚拟机
四、这一段是我自己因为gcc版本造成的另一个问题,如果你在完成上面步骤没有出错,就不需要参考一下内容了。
因为之前手贱,通过以下命令升级了gcc版本
1)sudo add-apt-repository ppa:jonathonf/gcc-7.1
2)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
3)//此命令会出现可供选择的gcc版本列表,然后提示我们选择。如果不出现,证明已应用此版本
sudo update-alternatives --config gcc
所以,在内核降级完成后,执行
sudo /sbin/vboxconfig
命令仍然报错,提示:
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.
然后根据提示输入dmesg命令,显示的日志中最后一行是:
vboxdrv: version magic '4.4.0-142-generic SMP mod_unload modversions ' should be '4.4.0-142-generic SMP mod_unload modversions retpoline '
经查询,是因为当前内核版本和gcc版本不匹配造成,之前的gcc版本我给忘了,所以直接安装了一个gcc-5,幸好成功了。下面是降低gcc版本的命令:
1)sudo apt installl gcc-5
2)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100
3)输入该命令后,选择需要的gcc版本前的序号
sudo update-alternatives --config gcc
gcc降低版本后,再次执行sudo /sbin/vboxconfig命令,vboxxdrv成功被编译,至此解决了我的问题,虚拟机正常运行。。。