VirtualbBox:UEFI环境下安装VirtualBox

本文详细介绍了在使用UEFI的Ubuntu16.04系统中遇到的VirtualBox运行错误,深入分析了SecureBoot功能导致的问题原因,并提供了两种解决方案:关闭SecureBoot或为vboxdrv模块创建并添加数字签名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

造冰箱的大熊猫@cnblogs 2018/12/18

 

1、问题

在一台新计算机上安装VirtualBox,启动虚拟机时出现“Kernel driver not installed (rc=-1908)”错误。按照错误提示执行“sudo modprobe vboxdrv”无法解决问题。降级安装老版本的VirtualBox问题依旧。最后发现这个问题是与计算机使用UEFI导致的。

 

2、问题产生的原因

首先说明一下虚拟机安装环境:

  - 主机:使用UEFI

  - 主机的操作系统:Ubuntu 16.04(uname -a:4.15.0-42-generic)

  - VirtualBox:v5.1.38_Ubuntu r122592


UEFI[1]定义了计算机固件与操作系统之间的接口,是传统BIOS的替代者。UEFI的功能之一是提供所谓的“Secure Boot”功能。该功能只允许通过数字签名认证的操作系统或驱动被加载。VirtualBox所需的模块“vboxdrv”没有进行数字签名,导致该模块未能被加载,进而导致VirtualBox运行失败。

 

3、解决方法一

在计算机固件配置中关闭“Secure Boot”功能,VirtualBox就可以正常运行。但是,一旦重新启动“Secure Boot”,问题又会出现。

 

4、解决方法二

为xboxdvr创建数字签名,并将数字签名添加到UEFI中。具体操作步骤如下:

 

1)创建数字签名

在命令行中执行以下命令

openssl req -new -x509 -newkey rsa:2048 -keyout FILENAME.priv -outform DER -out FILENAME.der -nodes -days 36500 -subj "/CN=KEYNAME/"    

执行这个命令,会在当前路径下创建一对数字签名文件FILENAME.priv和FILENAME.der。你可以将FILENAME和KEYNAME设置为任何你喜欢的名字。

 

2)检查vboxdrv的位置

在命令行中执行以下命令

modinfo vboxdrv

返回如下执行结果(显示内容可能会因为操作系统和硬件的不同而略有不同)

filename:       /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko
version:        5.1.38_Ubuntu r122592 (0x002a0000)
license:        GPL
description:    Oracle VM VirtualBox Support Driver
author:         Oracle Corporation
srcversion:     6598048D64CD6300853C314
depends:        
retpoline:      Y
name:           vboxdrv
vermagic:       4.15.0-42-generic SMP mod_unload 
parm:           force_async_tsc:force the asynchronous TSC mode (int)

 

3)对vboxdrv进行数字签名

在命令行中执行一下命令

sudo /usr/src/linux-headers-4.15.0-42-generic/scripts/sign-file sha256 ./FILENAME.priv ./FILENAME.der /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko

 这里,

 - linux-headers-4.15.0-42-generic应当与“uname -a”命令返回的结果相匹配。

 - ./FILENAME.priv”、./FILENAME.der应当与步骤1)中生产的数字签名文件的路径相匹配。这上述例子中,我们假设一对数字签名文件处于命令行当前路径下。

 - /lib/modules/4.15.0-42-generic/updates/dkms/vboxdrv.ko:应当与步骤2)返回的“filename”保持一致。

 

4)将公钥添加至MOK

在命令行中执行以下命令,将vboxdrv的公钥添加到UEFI的MOK(Module Owned Keys)。执行命令过程中,要求用户输入密码,该密码用于步骤5。

sudo mokutil --import FILENAME.der

 

5)登记公钥

重启计算机,UEFI会检测到MOK中新添加了公钥,并提示用户是否登记新的公钥。用户根据屏幕提示执行即可(选择“Enroll key from disk”?2019/5/9补充,这句话可能写得不准,如果不对选择屏幕上其它选项)。

 

完成上述步骤后,VirtualBox中的虚拟机就可以正常运行了。

 

注意:升级内核后,这一问题会再次出现,需要重新对vboxdrv添加数字签名。

 

 

[1] 维基百科:UEFI

转载于:https://www.cnblogs.com/pandabang/p/10134822.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值