몇 년 동안 작동했지만 이제는 FreeBSD 13 및 14 코드에 최근 추가된 변경 사항으로 인해 더 이상 작동하지 않습니다. 저는 Nvidia를 통해 호스트 운영 체제(FreeBSD 14.0)에서 이 작업을 수행할 수 있는 기능에 대해 이야기하고 있습니다. GPU)를 모든 Linux 가상 머신에 적용할 수 있습니다. "어제"까지 작동했던 동일한 절차가 더 이상 작동하지 않습니다.
개발자가 더 이상 내 메시지에 응답하지 않습니다. 나는 그것이 보이는 것처럼 실제로 버그가 있는지 확인하고 싶고 내가 실수를 저질렀다는 것은 아닙니다. 그럼 이 기능을 활성화하는 방법을 설명하겠습니다. 누군가가 이것을 시도하거나 작동하는 다른 절차를 시도하기를 바랍니다. 가장 중요한 것은 이 기능을 활성화할 수 있다는 것입니다.
그래서 얼마 전에 개발자가 나에게 순서대로 실행할 스크립트 3개를 주었습니다. 그들은:
가) 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 "$@"
다) 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
여기요. 이것은 FreeBSD 14.0에서 nvidia gpu에 대한 경로를 사용할 수 있게 해주는 작동하는 bhyve 시스템 파일을 생성하는 컴파일을 시작하기 위해 수행한 작업입니다.
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 위키는 nvidia gpu에 대해서는 논의하지 않고 네트워크 인터페이스에 대해서만 논의합니다. 나를 돕고 싶다면, nvidia 카드가 있고 이를 Linux VM에 전달하려면 내가 이미 설명한 단계를 반복해야 합니다. 코드를 성공적으로 컴파일할 수 있는지 알려주세요.
감사해요
답변1
TAG로 확인하세요
라벨을 확인하려면:
- 먼저 모든 태그를 수집해 보겠습니다.
git fetch --all --tags
- 사용 가능한 태그를 찾은 후:
git checkout tags/<tag> -b <branch>
TAG와 BRANCH NAME은 상대적으로 일치해야 합니다.
Fetch 명령을 업데이트하거나 개발자에게 제공한 스크립트에서 태그를 수집한 다음 인쇄하여 선택한 태그 또는 최신 태그를 가져오도록 지시하면 됩니다.
두 번째 방법
- 방문하다북마크 페이지.
- 보시다시피 14는 아직 태그가 지정되지 않았지만
/usr/corvon/src
준비가 되면 소스 tarball을 다운로드하여 해당 위치에 추출할 수 있습니다.
소스 코드를 빌드할 준비가 되면 제공한 방법을 사용하면 됩니다. 작업 진행 표시진행중인 작업. 항상 빌드되지는 않는 일일/야간 빌드로 이것을 생각하십시오.