![尝试在 FreeBSD 14.0 上为 Bhyve Linux 虚拟机启用一个 Nvidia gpu 的密码](https://linux22.com/image/229462/%E5%B0%9D%E8%AF%95%E5%9C%A8%20FreeBSD%2014.0%20%E4%B8%8A%E4%B8%BA%20Bhyve%20Linux%20%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%90%AF%E7%94%A8%E4%B8%80%E4%B8%AA%20Nvidia%20gpu%20%E7%9A%84%E5%AF%86%E7%A0%81.png)
多年来它一直有效,但现在,也许由于最近在 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结账
要签出标签:
- 首先,让我们收集所有标签:
git fetch --all --tags
- 找到可用标签后:
git checkout tags/<tag> -b <branch>
TAG 和 BRANCH NAME 应该相对匹配。
您只需要更新 Fetch 命令,或者告诉开发人员在他给您的脚本中收集标签,然后打印并获取您选择的或最新的标签。
第二种方法
- 参观标签页。
- 正如您所看到的,14 还没有标签,但是您可以下载源 tarball 并
/usr/corvon/src
在准备好后将其解压到您的位置。
当源代码准备好构建时,使用您提供的方法将起作用。在制品表示工作正在进行中。将此视为不会总是构建的每日/每晚构建。