AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 481269
Accepted
sisisisi
sisisisi
Asked: 2018-11-13 06:13:55 +0800 CST2018-11-13 06:13:55 +0800 CST 2018-11-13 06:13:55 +0800 CST

构建 virtualbox pci-passthrough 内核模块时出错 - 出了什么问题?

  • 772

我正在尝试使用 pci-passthrough 扩展让 virtualbox 在我的机器上工作。尝试运行 VM 时,我收到以下错误消息:

Kernel driver not installed (rc=-1908)
[message asking me to install the vboxdrv kernel driver
by executing /sbin/vboxconfig as root]

所以我这样做了,得到了这个:

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

查看 dmesg,安装没有添加新条目。

查看日志文件,它在最后一个模块失败:

Building the main VirtualBox module.
Building the net filter module.
Building the net adaptor module.
Building the PCI pass-through module.

这意味着这是失败的代码,/usr/lib/virtualbox/vboxdrv.sh从以下位置调用/sbin/vboxconfig:

log "Building the PCI pass-through module."
if ! myerr=`$BUILDINTMP \
    --use-module-symvers /tmp/vboxdrv-Module.symvers \
    --module-source "$MODULE_SRC/vboxpci" \
    --no-print-directory install 2>&1`; then
    log "Error building the module:"
    module_build_log "$myerr"
    failure "Look at $LOG to find out what went wrong"
fi

$BUILDINTMP指向可运行文件的位置/usr/share/virtualbox/src/vboxhost/build_in_tmp

这就是我在故障排除方面的进展,我不知道下一步该做什么。

一些信息:

  • IOMMU / VT-D 已启用
  • 内核版本是4.10.0-38-generic
  • 操作系统是 Linux Mint 18.3
  • 据我所知,内核头文件已安装,“据我所知”意味着该路径/lib/modules/4.10.0-38-generic/build/include/linux存在并且充满了 .h 文件和其他子目录
  • Virtualbox 版本为 5.2.20
  • 当我将 PCI 直通扩展安装到 VBox 时,它表明安装成功
kernel-modules virtualbox
  • 1 1 个回答
  • 745 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2018-11-14T23:31:50+08:002018-11-14T23:31:50+08:00

    从问题评论:

    modprobe: ERROR: could not insert 'vboxdrv': Required key not available
    

    这表明模块已经构建,但尚未签名以满足安全启动要求。

    最简单的解决方法是禁用安全启动。VirtualBox 5.2 尤其如此,因为:

    • 它使用自己的模块构建系统而不是 DKMS,并且
    • 据我所知,它没有将模块签名命令添加到其模块构建过程的设施

    (我真的希望 VirtualBox 的未来版本将转向使用 DKMS,或者至少会提供挂钩以允许将自定义脚本绑定到 VirtualBox 模块安装过程中。)


    对此问题的“正确”解决方法是创建您自己的安全启动密钥,并使用它来完全控制系统固件中的安全启动,或者将其注册为机器所有者密钥(引导加载程序级别的扩展安全启动),如果那是不可能的或太难了。

    这永远不可能完全自动化,因为这种自动化将被视为安全启动规避设备,并将被UEFI 论坛包含在UEFI 撤销列表中。此列表嵌入到新的 UEFI 固件版本中。幸运的是,注册是一次性的过程。

    将密钥注册到安全启动后,您可以使用该密钥对模块进行签名,以使它们为系统所接受。每次更新内核或 VirtualBox 时,您都必须重复模块签名。

    根据 Ubuntu 文档,您应该能够创建一个合适的密钥,sudo update-secureboot-policy --new-key然后将其注册为机器所有者密钥 (MOK)sudo update-secureboot-policy --enroll-key并重新启动。重新启动时,shim.efi应该自动启动 MokManager 程序,这将要求您确认机器所有者密钥的注册,因为只有在启动时它才能确认输入来自用户而不是其他地方。这样做是为了确保安全启动密钥的任何自定义都在系统所有者/管理员的明确控制下发生。

    重新安装操作系统不会从 UEFI 固件变量中删除 MOK,但 UEFI 固件升级或将所有 UEFI 固件设置重置为默认值可能会这样做。在这种情况下,您需要重新进行注册程序。

    一旦 MOK 成功注册,密钥应由固件自动传递给内核,并可用于对模块进行签名。VirtualBox 5.2 将其模块安装到/lib/modules/<kernel version number>/misc/目录。要在其中签署模块,您将使用kmodsign 命令。例如,要签署vboxdrv.ko模块:

    cd /lib/modules/$(uname -r)/misc
    kmodsign sha512 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der vboxdrv.ko
    

    对您将在此目录中找到的每个模块重复此操作。应该至少有四个:vboxdrv.ko、vboxnetadp.ko和。vboxnetflt.kovboxpci.ko

    • 0

相关问题

  • 在 Fedora 27 中未检测到 Broadcom 无线

  • Kali Linux 安装 - 内核崩溃

  • 无法为您的系统找到可用的默认提供程序(VM 无法识别)

  • 在启动时加载设备

  • 通过静态 IP(NAT?)访问 VM

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve