VirtualBox启动报“Kernel driver not installed”错误,主因是vboxdrv内核模块未编译、未签名或被Secure Boot拦截;需依次执行:重装DKMS依赖并运行vboxconfig、禁用Secure Boot或签名模块、将用户加入vboxusers组、关闭Hyper-V等冲突服务、手动modprobe加载并用dmesg定位日志错误。

如果您尝试启动VirtualBox虚拟机时遇到“Kernel driver not installed”或类似内核模块加载失败的错误,则表明vboxdrv等核心内核模块未正确编译、未签名或被系统安全机制阻止加载。以下是解决此问题的步骤:
一、重新编译并安装VirtualBox内核模块
该方法适用于Linux主机在内核更新后,原有vboxdrv模块失效的情况。VirtualBox依赖DKMS动态构建与当前内核版本匹配的驱动模块,缺失头文件或编译环境将导致模块无法生成。
1、打开终端,执行命令安装必需的内核开发包:sudo apt install linux-headers-$(uname -r) dkms build-essential
2、执行内核模块重配置命令:sudo /sbin/vboxconfig
3、验证模块是否加载成功:lsmod | grep vboxdrv,若输出包含vboxdrv则表示加载正常
二、禁用Secure Boot以允许未签名模块加载
UEFI Secure Boot会拒绝加载未经微软密钥签名的第三方内核模块(如vboxdrv),这是现代Linux发行版(如Ubuntu 22.04+、Fedora 36+)中常见拦截原因。
1、重启主机,在GRUB菜单出现时按Shift(BIOS)或Esc(UEFI)进入启动选项
2、选择“Advanced options for Ubuntu”,再选择带“recovery mode”的内核项
3、在恢复菜单中选择“root Drop to root shell prompt”
4、执行命令临时禁用Secure Boot验证:mokutil --disable-validation
5、重启后根据屏幕提示在UEFI界面中确认禁用操作(需输入此前设置的MOK密码)
三、将当前用户加入vboxusers组并修正设备节点权限
vboxdrv模块虽已加载,但/dev/vboxdrv设备节点若权限不足或用户未归属对应组,仍会导致VirtualBox主程序无法访问驱动接口。
1、执行命令将当前用户添加至vboxusers组:sudo usermod -aG vboxusers $USER
2、立即刷新组权限,无需重启:newgrp vboxusers
3、检查设备节点是否存在且可读写:ls -l /dev/vboxdrv,预期输出应含“crw-rw----”及组名为vboxusers
四、关闭宿主机冲突的虚拟化服务
Windows或部分Linux发行版默认启用Hyper-V、Windows Subsystem for Linux 2(WSL2)、Credential Guard等组件,它们独占硬件虚拟化资源(VT-x/AMD-V),导致VirtualBox无法获取CPU虚拟化支持。
1、在Windows中以管理员身份运行PowerShell,执行:bcdedit /set hypervisorlaunchtype off
2、执行命令彻底禁用Windows虚拟化平台:dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All /NoRestart
3、禁用Windows安全中心中的内核隔离功能:打开“Windows安全中心”→“设备安全性”→“内核隔离详细信息”→关闭“内存完整性”
4、完成全部操作后必须重启主机
五、手动加载vboxdrv模块并检查日志异常
当自动配置失败时,可绕过vboxconfig直接调用modprobe加载模块,并通过内核日志定位具体拦截点。
1、卸载可能残留的旧模块:sudo modprobe -r vboxdrv vboxnetadp vboxnetflt vboxpci
2、强制加载核心模块:sudo modprobe vboxdrv
3、立即查看内核报错详情:dmesg | tail -n 20 | grep -i vbox
4、若输出含“module verification failed”字样,则确认为Secure Boot拦截;若含“Operation not permitted”,则需检查SELinux/AppArmor策略限制


















