尝试在 FreeBSD 14.0 上为 Bhyve Linux 虚拟机启用一个 Nvidia gpu 的密码

尝试在 FreeBSD 14.0 上为 Bhyve Linux 虚拟机启用一个 Nvidia gpu 的密码

多年来它一直有效,但现在,也许由于最近在 FreeBSD 13 和 14 代码上添加的更改,它不再工作了:我正在谈论从主机操作系统(FreeBSD 14.0 中)通过一个 Nvidia GpU 的能力这种情况)到任何 Linux 虚拟机。直到“昨天”有效的相同程序不再有效(对我来说)。

开发者不再回复我的消息。我想确定它确实被窃听了,就像看起来一样,而不是我犯了一些错误。因此,我将解释我如何启用此功能。我希望有人也想尝试或者尝试一种有效的不同程序。最重要的是我们将能够启用该功能。

所以,不久前开发人员给了我 3 个脚本来按顺序运行。他们是:

a)setup_git_140.sh

git clone https://github.com/beckhoff/freebsd-src /usr/corvin-src-140

b)build_branch_140.sh

    #!/bin/sh
    
    usage() {
        cat >&2 << EOF
    Usage: ${0} <branch> [<build_options>]
        Checkouts to <branch> and builds it with 
    <build_options> (see build.sh for more information).
    EOF
        exit 1
    }
    
    set -e
    set -u
    
    readonly script_path="$(cd "$(dirname "${0}")" && pwd)"
    readonly branch="${1?Missing <branch>$(usage)}"
    shift
    echo $branch
    
    cd /usr/corvin-src-140
    git fetch --all --prune
    git checkout -f "${branch}"
    
    ${script_path}/build_140.sh "$@"

c)build_build_140.sh

    #!/bin/sh
    
    usage() {
        cat >&2 << EOF
    Usage: ${0} [--no-bhf] [--reboot] [--verbose] [--without-
    kernel]
        Builds bhyve
    EOF
        exit 1
    }
    
    build_module() {
        local _path
        _path="${1}"
    
        # change to module path
        cd "${_path}"
    
        # clean module
        if test "${clean}" = "true"; then
            make clean > "${cmd_redirect}" 2>&1
        fi
    
        # build module
        make > "${cmd_redirect}" 2>&1
    
        # install module
        make install > "${cmd_redirect}"
    }
    
    build() {
        build_module "${src_dir}/include"
        build_module "${src_dir}/lib/libvmmapi"
        build_module "${src_dir}/sys/modules/vmm"
    
        # build kernel
        if test "${with_kernel}" = "true"; then
            cd "${src_dir}"
            local kern_opts
            kern_opts="-j$(sysctl -n hw.ncpu)"
            if test "${with_bhf}" = "true"; then
                kern_opts="${kern_opts} 
    KERNCONF=BHF"
            fi
            if ! test "${clean}" = "true"; then
                kern_opts="${kern_opts} 
    NO_CLEAN=YES"
            fi
            make kernel ${kern_opts} > "${cmd_redirect}" 2>&1
        fi
    
        build_module "${src_dir}/usr.sbin/bhyve"
        build_module "${src_dir}/usr.sbin/bhyvectl"
        build_module "${src_dir}/usr.sbin/bhyveload"
    
        if test "${with_reboot}" = "true"; then
            reboot
        fi
    }
    
    set -e
    set -u
    
    while test $# -gt 0; do
        case "${1-}" in
            --clean)
                clean="true"
                shift
                ;;
            --reboot)
                with_reboot="true"
                shift
                ;;
            --src-dir=*)
                src_dir="${1#*=}"
                shift
                ;;
            --verbose)
                cmd_redirect="/dev/stdout"
                shift
                ;;
            --without-bhf)
                with_bhf="false"
                shift
                ;;
            --without-kernel)
                with_kernel="false"
                shift
                ;;
            *)
                usage
                ;;
        esac
    done
    
    readonly clean="${clean-"false"}"
    readonly cmd_redirect="${cmd_redirect-"/dev/null"}"
    readonly src_dir="${src_dir-"/usr/corvin-src-140"}"
    echo $src_dir
    readonly with_bhf="${with_bhf-"true"}"
    readonly with_kernel="${with_kernel-"true"}"
    readonly with_reboot="${with_reboot-"false"}"
    
    build

开始了。这就是我开始编译时所做的,该编译应该生成工作 bhyve 系统文件,这些文件将允许在 FreeBSD 14.0 上使用一个 nvidia gpu 的通路:

a) ./setup_git_140.sh

b) ./build_branch_140.sh origin/phab/corvink/14.0/nvidia-wip --without-bhf --verbose

好的。它编译代码时没有给出错误,直到某个点,当它发生如下所示的情况时。我想了解代码是否有错误。请帮我 :

/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1174:21: 
error: use of undeclared identifier 'ctx'
                passthru_cfgwrite(ctx, vcpu, pi, offset - 
0x88000, size, value);
                                  ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1174:26: 
error: use of undeclared identifier 'vcpu'
                passthru_cfgwrite(ctx, vcpu, pi, offset - 
0x88000, size, value);
                                       ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1209:20: 
error: use of undeclared identifier 'ctx'
                passthru_cfgread(ctx, vcpu, pi, offset - 
0x88000, size, (uint32_t *)&val);
                                 ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1209:25: 
error: use of undeclared identifier 'vcpu'
                passthru_cfgread(ctx, vcpu, pi, offset - 
0x88000, size, (uint32_t *)&val);
                                      ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1302:29: 
error: use of undeclared identifier 'ctx'
                        if (vm_unmap_pptdev_mmio(ctx, sc-
>psc_sel.pc_bus,
                                                 ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1309:27: 
error: use of undeclared identifier 'ctx'
                        if (vm_map_pptdev_mmio(ctx, sc-
>psc_sel.pc_bus,
                                               ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1327:29: 
error: use of undeclared identifier 'ctx'
                        if (vm_unmap_pptdev_mmio(ctx, sc-
>psc_sel.pc_bus,
                                                 ^
/usr/corvin-src-140/usr.sbin/bhyve/pci_passthru.c:1334:27: 
error: use of undeclared identifier 'ctx'
                        if (vm_map_pptdev_mmio(ctx, sc-
>psc_sel.pc_bus,
                                               ^
8 errors generated.
*** Error code 1

如果你不按照我所解释的操作,Linux 虚拟机内的一张 nvidia 卡的通路将无法工作。 FreeBSD wiki 不讨论 nvidia gpu,而只讨论网络接口。如果你想帮助我,如果你有一张 nvidia 卡,如果你想在 Linux VM 中传递它,你应该重复我已经解释过的步骤。并告诉我您是否能够成功编译代码。

谢谢

答案1

按TAG结账

要签出标签:

  1. 首先,让我们收集所有标签:git fetch --all --tags
  2. 找到可用标签后:git checkout tags/<tag> -b <branch>

TAG 和 BRANCH NAME 应该相对匹配。

您只需要更新 Fetch 命令,或者告诉开发人员在他给您的脚本中收集标签,然后打印并获取您选择的或最新的标签。

第二种方法

  1. 参观标签页
  2. 正如您所看到的,14 还没有标签,但是您可以下载源 tarball 并/usr/corvon/src在准备好后将其解压到您的位置。

当源代码准备好构建时,使用您提供的方法将起作用。在制品表示工作正在进行中。将此视为不会总是构建的每日/每晚构建。

相关内容