在 Ultra96/Ultra96-V2 上运行 Debian GNU/Linux 并安装 XRT (Xilinx Runtime) 版本为2.8版
首先筆者提供 Debian GNU/Linux 給 Ultra96/Ultra96-V2 (ZynqMP)。另外,XRT (Xilinx Runtime) 是 Xilinx 公司提供的一個環境,用於在 Vitis 開發環境中運行在該平台上開發的程式。
正常情况下,MPSoC Edge Device的XRT只能在Xilinx提供的Linux环境(Petalinux)上运行。但是,以下文章介绍了在Ultra96/Ultra96-V2适用的Debian GNU/Linux上运行XRT的Debian包的构建方法。
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)』@Qiita
这篇文章是关于XRT的续篇,介绍了如何在Ultra96/Ultra96-V2上,针对Debian GNU/Linux或Ubuntu 20.04构建XRT的2.8.0版本。
请注意这个文章中介绍的Debian软件包并非Xilinx公司的官方产品。
XRT Debian 软件包的供应为了构建XRT的Debian安装包,需要配置构建环境,这非常麻烦。因此,我们提供了已经构建好的Debian安装包。如果您认为自己构建很麻烦,请使用这个。
“Debian 10 使用”
-
リポジトリ: https://github.com/ikwzm/ZynqMP-FPGA-XRT
“Debian 10 使用”
-
リポジトリ: https://github.com/ikwzm/ZynqMP-FPGA-XRT
- リポジトリ: https://github.com/ikwzm/ZynqMP-FPGA-XRT
ブランチ名: 2020.2_EDGE_1_Debian_10
パッケージファイル名: xrt_202020.2.8.1_Edge_Debian_10-arm64.deb
fpga@ubuntu-fpga:~/work$ git clone --depth 1 --branch 2020.2_EDGE_1_Debian_10 https://github.com/ikwzm/ZynqMP-FPGA-XRT.git
fpga@ubuntu-fpga:~/work$ sudo apt install ./ZynqMP-FPGA-XRT/xrt_202020.2.8.1_Edge_Debian_10-arm64.deb
请使用 Ubuntu 20.04 版本。
-
リポジトリ: https://github.com/ikwzm/ZynqMP-FPGA-XRT
- リポジトリ: https://github.com/ikwzm/ZynqMP-FPGA-XRT
ブランチ名: 2020.2_EDGE_1_Ubuntu_20.04
パッケージファイル名: xrt_202020.2.8.1_Edge_Ubuntu_20.04-arm64.deb
fpga@ubuntu-fpga:~/work$ git clone --depth 1 --branch 2020.2_EDGE_1_Ubuntu_20.04 https://github.com/ikwzm/ZynqMP-FPGA-XRT.git
fpga@ubuntu-fpga:~/work$ sudo apt install ./ZynqMP-FPGA-XRT/xrt_202020.2.8.1_Edge_Ubuntu_20.04-arm64.deb
XRT 的构建
构建环境将XRT构建为针对ZynqMP-FPGA-Linux的版本有点麻烦。构建XRT需要使用诸如Ubuntu或CentOS等Linux发行版。构建还需要安装各种开发工具。另外,为了制作Debian软件包,或者为了交叉编译为ARM64而将PC用作主机,也非常麻烦。
在Ultra96-V2上运行Debian 10或Ubuntu 18.04,并在其上进行自主构建。Ultra96-V2使用的Debian 10和Ubuntu 18.04可在以下URL中找到。
https://github.com/ikwzm/ZynqMP-FPGA-Linux
https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Ultra96
下载XRT请从以下网址下载XRT源代码,分支版本为2020.2_EDGE。
-
リポジトリ名: https://github.com/ikwzm/XRT
- リポジトリ名: https://github.com/ikwzm/XRT
ブランチ名: 2020.2_EDGE
这个仓库是基于 Xilinx 公司在 github 上公开的 https://github.com/Xilinx/XRT 的分支,并进行了各种修改。修正的具体内容将在下一节中进行说明。
fpga@debian-fpga:~/work$ git clone --depth 1 --branch 2020.2_EDGE https://github.com/Xilinx/XRT
Cloning into 'XRT'...
remote: Enumerating objects: 2142, done.
remote: Counting objects: 100% (2142/2142), done.
remote: Compressing objects: 100% (1885/1885), done.
remote: Total 2142 (delta 653), reused 626 (delta 220), pack-reused 0
Receiving objects: 100% (2142/2142), 20.80 MiB | 1.22 MiB/s, done.
Resolving deltas: 100% (653/653), done.
Checking out files: 100% (1958/1958), done.
安装构建所需的Debian软件包。安装构建所需的软件包。幸运的是,XRT 提供了一个安装构建所需软件包的脚本。
如果以超级用户权限运行./src/runtime_src/tools/scripts/xrtdeps.sh,则apt程序将安装缺失的Debian软件包。
fpga@debian-fpga:~/work/XRT$ sudo ./src/runtime_src/tools/scripts/xrtdeps.sh
Installing packages...
Reading package lists... Done
Building dependency tree
Reading state information... Done
:
(中略)
:
The following packages were automatically installed and are no longer required:
libgl2ps1.4 libibverbs1 liblept5 libnetcdf-c++4 libnl-route-3-200
libopencv-flann-dev libopencv-flann3.2 libopencv-ml-dev libopencv-ml3.2
libopencv-photo-dev libopencv-photo3.2 libopencv-shape-dev
libopencv-shape3.2 libopencv-ts-dev libopencv-video-dev libopencv-video3.2
libtcl8.6 libtesseract4 libtk8.6 libxss1
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.
尝试建造
在切换到build目录后,通过在其中运行带有“-edge”选项的build.sh脚本来开始构建。在Ultra96/Ultra96-V2上,构建过程需要相当长的时间。在我的环境下大约需要1小时30分钟。
fpga@debian-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ./build.sh -edge
env XRT_EDGE_BUILD=yes cmake -DRDI_CCACHE=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../../src
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Host system processor is aarch64
-- Target system processor is aarch64
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29")
-- Checking for module 'libdrm'
-- Found libdrm, version 2.4.97
-- Looking for DRM - found at /usr 2.4.97
-- Checking for module 'OpenCL'
-- Found OpenCL, version 2.2
-- Looking for OPENCL - found at /usr 2.2 /usr/include
:
(後略)
:
real 1m28.030s
user 1m8.790s
sys 0m15.279s
fpga@debian-fpga:~/work/XRT/build$
fpga@debian-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ./build.sh -edge
env XRT_EDGE_BUILD=yes cmake -DRDI_CCACHE=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../../src
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Host system processor is aarch64
-- Target system processor is aarch64
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29")
-- Checking for module 'libdrm'
-- Found libdrm, version 2.4.97
-- Looking for DRM - found at /usr 2.4.97
-- Checking for module 'OpenCL'
-- Found OpenCL, version 2.2
-- Looking for OPENCL - found at /usr 2.2 /usr/include
:
(後略)
:
real 1m28.030s
user 1m8.790s
sys 0m15.279s
fpga@debian-fpga:~/work/XRT/build$
当编译完成后,会在build/Edge目录下生成Debian包。
fpga@debian-fpga:~/work/XRT/build$ ls -1 Edge/xrt_*
Edge/xrt_202020.2.8.1_Edge_Debian_10-arm64.deb
Edge/xrt_202020.2.8.1_Edge_Debian_10-arm64.tar.gz
这些中,Ultra96/Ultra96-V2 所需的 Debian 包是 Edge/xrt_202020.2.8.1_Edge_Debian_10-arm64.deb。
XRT的修改内容。在本章中,我将解释我对原始的XRT(https://github.com/Xilinx/XRT 分支2020.2)进行的个人修改。
添加 XRT_EDGE_BUILD。
如果原始代码中的主处理器和目标处理器是相同的,那么变量XRT_NATIVE_BUILD将被设置为”yes”。并且,在XRT_NATIVE_BUILD为”yes”(即主处理器和目标处理器相同时)时,将构建src/runtime_src/core/pcie;而在XRT_NATIVE_BUILD为”no”(即主处理器和目标处理器不同时)时,将构建src/runtime_src/core/edge。这是在src/runtime_src/core/CMakeLists.txt文件中定义的。
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
add_subdirectory(include)
add_subdirectory(common)
if (${XRT_NATIVE_BUILD} STREQUAL "yes")
add_subdirectory(pcie)
add_subdirectory(tools)
else()
add_subdirectory(edge)
endif()
如果原始代码中的主处理器和目标处理器是相同的,那么变量XRT_NATIVE_BUILD将被设置为”yes”。并且,在XRT_NATIVE_BUILD为”yes”(即主处理器和目标处理器相同时)时,将构建src/runtime_src/core/pcie;而在XRT_NATIVE_BUILD为”no”(即主处理器和目标处理器不同时)时,将构建src/runtime_src/core/edge。这是在src/runtime_src/core/CMakeLists.txt文件中定义的。
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
add_subdirectory(include)
add_subdirectory(common)
if (${XRT_NATIVE_BUILD} STREQUAL "yes")
add_subdirectory(pcie)
add_subdirectory(tools)
else()
add_subdirectory(edge)
endif()
此外,当XRT_NATIVE_BUILD设置为”yes”时(即主机处理器与目标处理器相同时),将包含 src/CMake/nativeLnx.cmake 文件,该文件用于构建和安装主机驱动程序,具体指令如下。
:
(前略)
:
include (CMake/dkms.cmake)
include (CMake/dkms-aws.cmake)
include (CMake/dkms-azure.cmake)
include (CMake/dkms-container.cmake)
:
(後略)
如果在 Ultra96-V2 上运行 Ubuntu 18.04,并进行自行构建时,主机处理器和目标处理器将为相同的 arm64。按照这种情况,构建将产生 PCIe 而不是针对边缘设备的版本。
于是,在 src/CMakfile.txt 文件中添加 XRT_EDGE_BUILD 变量。
:
(前略)
:
set(XRT_EDGE_BUILD "no")
if (XRT_NATIVE_BUILD STREQUAL "no")
set(XRT_EDGE_BUILD "no")
endif()
if (DEFINED ENV{XRT_EDGE_BUILD})
set(XRT_EDGE_BUILD $ENV{XRT_EDGE_BUILD})
endif():
:
(後略)
当XRT_EDGE_BUILD的值为”yes”时,将修改各个文件以进行边缘构建。
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
add_subdirectory(include)
if (${XRT_EDGE_BUILD} STREQUAL "yes")
add_subdirectory(common)
add_subdirectory(edge)
add_subdirectory(tools)
else()
add_subdirectory(common)
add_subdirectory(pcie)
add_subdirectory(tools)
endif()
:
(前略)
:
if (${XRT_EDGE_BUILD} STREQUAL "yes")
include (CMake/dkms-edge.cmake)
else()
include (CMake/dkms.cmake)
include (CMake/dkms-aws.cmake)
include (CMake/dkms-azure.cmake)
include (CMake/dkms-container.cmake)
endif()
:
(後略)
另外,在 src/runtime_src/CMakeLists.txt 文件中,当 XRT_NATIVE_BUILD 的值为 “yes” 时(即主机处理器和目标处理器相同时),编译选项中会添加 “-Wall” 和 “-Werror” 的设置。
:
(前略)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_NATIVE_BUILD} STREQUAL "yes")
add_compile_options("-Wall" "-Werror")
endif()
:
(後略)
如果存在”-Werror”选项,会在src/runtime_src/core/edge目录下构建时出现错误,并导致编译失败。因此,若XRT_EDGE_BUILD为”yes”时,将不会在编译选项中添加”-Wall”和”-Werror”,需要修改src/runtime_src/CMakeLists.txt文件。
:
(前略)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_EDGE_BUILD} STREQUAL "no")
add_compile_options("-Wall" "-Werror")
endif() :
(後略)
最终,对 build/build.sh 进行修改,如果主处理器为 arm64 并且添加了”-edge”选项,将修正 XRT_EDGE_BUILD 为 “yes” 的情况使其生效。
:
(前略)
:
if [[ $CPU == "aarch64" ]] && [[ $edge == 1 ]]; then
mkdir -p $edge_dir
cd $edge_dir
if [[ $nocmake == 0 ]]; then
echo "env XRT_EDGE_BUILD=yes $CMAKE -DRDI_CCACHE=$ccache -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../../src"
time env XRT_EDGE_BUILD=yes $CMAKE -DRDI_CCACHE=$ccache -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../../src
fi
if [[ $nobuild == 0 ]]; then
echo "make -j $jcore $verbose DESTDIR=$PWD install"
time make -j $jcore $verbose DESTDIR=$PWD install
if [[ $noctest == 0 ]]; then
time ctest --output-on-failure
fi
time make package
fi
if [[ $docs == 1 ]]; then
echo "make xrt_docs"
make xrt_docs
fi
fi
:
(後略)
改变包文件名
在原始的XRT中,构建的Debian软件包的名称为xrt_202010.2.8.0_18.04-arm64-xrt.deb。为了明确其为适用于Debian 10或Ubuntu的软件包,我们将在此之后添加Linux发行版名称,同时附加关键词”Edge”。
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 4f45f97a..9f6eebe4 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -79,7 +79,7 @@ else ()
SET (CPACK_GENERATOR "TGZ")
endif()
-SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CPACK_REL_VER}-${CPACK_ARCH}")
+if (${XRT_EDGE_BUILD} STREQUAL "yes")
+ SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_Edge_${LINUX_FLAVOR}_${CPACK_REL_VER}-${CPACK_ARCH}")
+else()
+ SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CPACK_REL_VER}-${CPACK_ARCH}")
+endif()
message("-- ${CMAKE_BUILD_TYPE} ${PACKAGE_KIND} package")
DKMS-Edge相关的修复。在安装了在Debian 10或Ubuntu 20.04上构建的Debian软件包时,通过dkms(动态内核模块支持)机制,自动编译XRT的适用于Edge的Linux内核模块zocl。然而,遗憾的是,原始版本并不能正常工作,因此需要进行一些修正。
添加 postinst 和 prerm。为了将Xilinx的原始Debian软件包自动包含用于安装时执行的postinst脚本和卸载时执行的prerm脚本,需要将src/CMake/cpackLin.cmake文件进行以下修改。
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 0f38c922..3d32674f 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -84,6 +84,11 @@ if (${LINUX_FLAVOR} MATCHES "^(Ubuntu|Debian)")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
endif()
+ if (${XRT_EDGE_BUILD} STREQUAL "yes")
+ SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/prerm")
+ SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
+ endif()
+
elseif (${LINUX_FLAVOR} MATCHES "^(RedHat|CentOS|Amazon|Fedora)")
execute_process(
COMMAND uname -m
@@ -140,7 +145,11 @@ else ()
SET (CPACK_GENERATOR "TGZ")
endif()
添加不足的文件另外,Xilinx原版并不包含dkms所需的一些文件。因此,我们将对src/CMake/dkms-edge.cmake进行修改,并添加缺少的文件。
diff --git a/src/CMake/dkms-edge.cmake b/src/CMake/dkms-edge.cmake
index 48e4ad1e..83d9d8ec 100644
--- a/src/CMake/dkms-edge.cmake
+++ b/src/CMake/dkms-edge.cmake
@@ -35,6 +35,7 @@ SET (XRT_DKMS_CORE_COMMON_DRV ${XRT_DKMS_CORE_DIR}/common/drv)
SET (XRT_DKMS_DRIVER_SRCS
zocl/include/sched_exec.h
+ zocl/include/zocl_aie.h
zocl/include/zocl_bo.h
zocl/include/zocl_cu.h
zocl/include/zocl_dma.h
@@ -53,6 +54,7 @@ SET (XRT_DKMS_DRIVER_SRCS
zocl/LICENSE
zocl/Makefile
zocl/sched_exec.c
+ zocl/zocl_aie.c
zocl/zocl_bo.c
zocl/zocl_cu.c
zocl/zocl_dma.c
@@ -86,6 +88,7 @@ SET (XRT_DKMS_COMMON_XRT_DRV
common/drv/xrt_cu.c
common/drv/cu_hls.c
common/drv/cu_plram.c
+ common/drv/fast_adapter.c
common/drv/xrt_xclbin.c
common/drv/Makefile
)
添加-D__NONE_PETALINUX__为了在PetaLinux环境之外编译zocl,需要使用C选项-D__NONE_PETALINUX__。请将src/CMake/config/dkms-zocl/dkms.conf.in文件按如下进行修改,以便添加该选项并进行构建。
diff --git a/src/CMake/config/dkms-zocl/dkms.conf.in b/src/CMake/config/dkms-zocl/dkms.conf.in
index c79c23c2..78fd5a90 100644
--- a/src/CMake/config/dkms-zocl/dkms.conf.in
+++ b/src/CMake/config/dkms-zocl/dkms.conf.in
@@ -1,7 +1,7 @@
PACKAGE_NAME="xrt-zocl"
PACKAGE_VERSION="@XRT_VERSION_STRING@"
-MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir}; cd ../.."
-CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir}; cd ../.."
+MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
+CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
BUILT_MODULE_NAME[0]="zocl"
BUILT_MODULE_LOCATION[0]="driver/zocl"
DEST_MODULE_LOCATION[0]="/kernel/extras"
刪除不必要的測試
在构建Debian Package时,将进行构建工具的测试以确保其正常工作。然而,由于Xilinx原始软件的限制,尽管是用于Edge Debian Package,但试图测试用于PCI-Express的工具(即xbmgmt和xbutil)会导致失败。要解决这个问题,请按照以下方式修改src/CMake/NativeTests.cmake以避免执行不必要的测试。
diff --git a/src/CMake/nativeTests.cmake b/src/CMake/nativeTests.cmake
index 9f53ad61..25e0d19d 100644
--- a/src/CMake/nativeTests.cmake
+++ b/src/CMake/nativeTests.cmake
@@ -3,13 +3,17 @@
# XRT_INSTALL_BIN_DIR
enable_testing()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbmgmt
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbmgmt/xbmgmt scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbutil
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbutil/xbutil scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
add_test(NAME xbutil2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbutil2/xbutil2 --new scan
@@ -19,4 +23,6 @@ add_test(NAME xbmgmt2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbmgmt2/xbmgmt2 --new scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+if (${XRT_EDGE_BUILD} STREQUAL "no")
+ set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+endif()
打开驱动程序时的修正
在 Xilinx 的原始设计中,当 XRT 打开 zocl(用于 XRT Edge 的 Linux 内核模块)时,指定的文件名被固定为“/dev/dri/renderD128”。然而,这样一来,就很难与其他 DRM 驱动程序共存,就像[介绍了如何在『Ultra96/Ultra96-V2 向け Debian GNU/Linux で Lima Driverを動かす』中所示的那样。因此,在打开 zocl 时,我们将搜索 /dev/dri,以便找到“zocl”。
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 4f45f97a..9f6eebe4 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -79,7 +79,7 @@ else ()
SET (CPACK_GENERATOR "TGZ")
endif()
-SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CPACK_REL_VER}-${CPACK_ARCH}")
+if (${XRT_EDGE_BUILD} STREQUAL "yes")
+ SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_Edge_${LINUX_FLAVOR}_${CPACK_REL_VER}-${CPACK_ARCH}")
+else()
+ SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CPACK_REL_VER}-${CPACK_ARCH}")
+endif()
message("-- ${CMAKE_BUILD_TYPE} ${PACKAGE_KIND} package")
添加 postinst 和 prerm。为了将Xilinx的原始Debian软件包自动包含用于安装时执行的postinst脚本和卸载时执行的prerm脚本,需要将src/CMake/cpackLin.cmake文件进行以下修改。
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 0f38c922..3d32674f 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -84,6 +84,11 @@ if (${LINUX_FLAVOR} MATCHES "^(Ubuntu|Debian)")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
endif()
+ if (${XRT_EDGE_BUILD} STREQUAL "yes")
+ SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/prerm")
+ SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
+ endif()
+
elseif (${LINUX_FLAVOR} MATCHES "^(RedHat|CentOS|Amazon|Fedora)")
execute_process(
COMMAND uname -m
@@ -140,7 +145,11 @@ else ()
SET (CPACK_GENERATOR "TGZ")
endif()
添加不足的文件另外,Xilinx原版并不包含dkms所需的一些文件。因此,我们将对src/CMake/dkms-edge.cmake进行修改,并添加缺少的文件。
diff --git a/src/CMake/dkms-edge.cmake b/src/CMake/dkms-edge.cmake
index 48e4ad1e..83d9d8ec 100644
--- a/src/CMake/dkms-edge.cmake
+++ b/src/CMake/dkms-edge.cmake
@@ -35,6 +35,7 @@ SET (XRT_DKMS_CORE_COMMON_DRV ${XRT_DKMS_CORE_DIR}/common/drv)
SET (XRT_DKMS_DRIVER_SRCS
zocl/include/sched_exec.h
+ zocl/include/zocl_aie.h
zocl/include/zocl_bo.h
zocl/include/zocl_cu.h
zocl/include/zocl_dma.h
@@ -53,6 +54,7 @@ SET (XRT_DKMS_DRIVER_SRCS
zocl/LICENSE
zocl/Makefile
zocl/sched_exec.c
+ zocl/zocl_aie.c
zocl/zocl_bo.c
zocl/zocl_cu.c
zocl/zocl_dma.c
@@ -86,6 +88,7 @@ SET (XRT_DKMS_COMMON_XRT_DRV
common/drv/xrt_cu.c
common/drv/cu_hls.c
common/drv/cu_plram.c
+ common/drv/fast_adapter.c
common/drv/xrt_xclbin.c
common/drv/Makefile
)
添加-D__NONE_PETALINUX__为了在PetaLinux环境之外编译zocl,需要使用C选项-D__NONE_PETALINUX__。请将src/CMake/config/dkms-zocl/dkms.conf.in文件按如下进行修改,以便添加该选项并进行构建。
diff --git a/src/CMake/config/dkms-zocl/dkms.conf.in b/src/CMake/config/dkms-zocl/dkms.conf.in
index c79c23c2..78fd5a90 100644
--- a/src/CMake/config/dkms-zocl/dkms.conf.in
+++ b/src/CMake/config/dkms-zocl/dkms.conf.in
@@ -1,7 +1,7 @@
PACKAGE_NAME="xrt-zocl"
PACKAGE_VERSION="@XRT_VERSION_STRING@"
-MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir}; cd ../.."
-CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir}; cd ../.."
+MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
+CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
BUILT_MODULE_NAME[0]="zocl"
BUILT_MODULE_LOCATION[0]="driver/zocl"
DEST_MODULE_LOCATION[0]="/kernel/extras"
刪除不必要的測試
在构建Debian Package时,将进行构建工具的测试以确保其正常工作。然而,由于Xilinx原始软件的限制,尽管是用于Edge Debian Package,但试图测试用于PCI-Express的工具(即xbmgmt和xbutil)会导致失败。要解决这个问题,请按照以下方式修改src/CMake/NativeTests.cmake以避免执行不必要的测试。
diff --git a/src/CMake/nativeTests.cmake b/src/CMake/nativeTests.cmake
index 9f53ad61..25e0d19d 100644
--- a/src/CMake/nativeTests.cmake
+++ b/src/CMake/nativeTests.cmake
@@ -3,13 +3,17 @@
# XRT_INSTALL_BIN_DIR
enable_testing()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbmgmt
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbmgmt/xbmgmt scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbutil
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbutil/xbutil scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
add_test(NAME xbutil2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbutil2/xbutil2 --new scan
@@ -19,4 +23,6 @@ add_test(NAME xbmgmt2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbmgmt2/xbmgmt2 --new scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+if (${XRT_EDGE_BUILD} STREQUAL "no")
+ set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+endif()
打开驱动程序时的修正
在 Xilinx 的原始设计中,当 XRT 打开 zocl(用于 XRT Edge 的 Linux 内核模块)时,指定的文件名被固定为“/dev/dri/renderD128”。然而,这样一来,就很难与其他 DRM 驱动程序共存,就像[介绍了如何在『Ultra96/Ultra96-V2 向け Debian GNU/Linux で Lima Driverを動かす』中所示的那样。因此,在打开 zocl 时,我们将搜索 /dev/dri,以便找到“zocl”。
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 0f38c922..3d32674f 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -84,6 +84,11 @@ if (${LINUX_FLAVOR} MATCHES "^(Ubuntu|Debian)")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
endif()
+ if (${XRT_EDGE_BUILD} STREQUAL "yes")
+ SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/prerm")
+ SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_XRT_PACKAGE_DEPENDS})
+ endif()
+
elseif (${LINUX_FLAVOR} MATCHES "^(RedHat|CentOS|Amazon|Fedora)")
execute_process(
COMMAND uname -m
@@ -140,7 +145,11 @@ else ()
SET (CPACK_GENERATOR "TGZ")
endif()
diff --git a/src/CMake/dkms-edge.cmake b/src/CMake/dkms-edge.cmake
index 48e4ad1e..83d9d8ec 100644
--- a/src/CMake/dkms-edge.cmake
+++ b/src/CMake/dkms-edge.cmake
@@ -35,6 +35,7 @@ SET (XRT_DKMS_CORE_COMMON_DRV ${XRT_DKMS_CORE_DIR}/common/drv)
SET (XRT_DKMS_DRIVER_SRCS
zocl/include/sched_exec.h
+ zocl/include/zocl_aie.h
zocl/include/zocl_bo.h
zocl/include/zocl_cu.h
zocl/include/zocl_dma.h
@@ -53,6 +54,7 @@ SET (XRT_DKMS_DRIVER_SRCS
zocl/LICENSE
zocl/Makefile
zocl/sched_exec.c
+ zocl/zocl_aie.c
zocl/zocl_bo.c
zocl/zocl_cu.c
zocl/zocl_dma.c
@@ -86,6 +88,7 @@ SET (XRT_DKMS_COMMON_XRT_DRV
common/drv/xrt_cu.c
common/drv/cu_hls.c
common/drv/cu_plram.c
+ common/drv/fast_adapter.c
common/drv/xrt_xclbin.c
common/drv/Makefile
)
添加-D__NONE_PETALINUX__为了在PetaLinux环境之外编译zocl,需要使用C选项-D__NONE_PETALINUX__。请将src/CMake/config/dkms-zocl/dkms.conf.in文件按如下进行修改,以便添加该选项并进行构建。
diff --git a/src/CMake/config/dkms-zocl/dkms.conf.in b/src/CMake/config/dkms-zocl/dkms.conf.in
index c79c23c2..78fd5a90 100644
--- a/src/CMake/config/dkms-zocl/dkms.conf.in
+++ b/src/CMake/config/dkms-zocl/dkms.conf.in
@@ -1,7 +1,7 @@
PACKAGE_NAME="xrt-zocl"
PACKAGE_VERSION="@XRT_VERSION_STRING@"
-MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir}; cd ../.."
-CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir}; cd ../.."
+MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
+CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
BUILT_MODULE_NAME[0]="zocl"
BUILT_MODULE_LOCATION[0]="driver/zocl"
DEST_MODULE_LOCATION[0]="/kernel/extras"
刪除不必要的測試
在构建Debian Package时,将进行构建工具的测试以确保其正常工作。然而,由于Xilinx原始软件的限制,尽管是用于Edge Debian Package,但试图测试用于PCI-Express的工具(即xbmgmt和xbutil)会导致失败。要解决这个问题,请按照以下方式修改src/CMake/NativeTests.cmake以避免执行不必要的测试。
diff --git a/src/CMake/nativeTests.cmake b/src/CMake/nativeTests.cmake
index 9f53ad61..25e0d19d 100644
--- a/src/CMake/nativeTests.cmake
+++ b/src/CMake/nativeTests.cmake
@@ -3,13 +3,17 @@
# XRT_INSTALL_BIN_DIR
enable_testing()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbmgmt
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbmgmt/xbmgmt scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbutil
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbutil/xbutil scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
add_test(NAME xbutil2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbutil2/xbutil2 --new scan
@@ -19,4 +23,6 @@ add_test(NAME xbmgmt2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbmgmt2/xbmgmt2 --new scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+if (${XRT_EDGE_BUILD} STREQUAL "no")
+ set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+endif()
打开驱动程序时的修正
在 Xilinx 的原始设计中,当 XRT 打开 zocl(用于 XRT Edge 的 Linux 内核模块)时,指定的文件名被固定为“/dev/dri/renderD128”。然而,这样一来,就很难与其他 DRM 驱动程序共存,就像[介绍了如何在『Ultra96/Ultra96-V2 向け Debian GNU/Linux で Lima Driverを動かす』中所示的那样。因此,在打开 zocl 时,我们将搜索 /dev/dri,以便找到“zocl”。
diff --git a/src/CMake/config/dkms-zocl/dkms.conf.in b/src/CMake/config/dkms-zocl/dkms.conf.in
index c79c23c2..78fd5a90 100644
--- a/src/CMake/config/dkms-zocl/dkms.conf.in
+++ b/src/CMake/config/dkms-zocl/dkms.conf.in
@@ -1,7 +1,7 @@
PACKAGE_NAME="xrt-zocl"
PACKAGE_VERSION="@XRT_VERSION_STRING@"
-MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir}; cd ../.."
-CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir}; cd ../.."
+MAKE[0]="cd driver/zocl; make -j KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
+CLEAN="cd driver/zocl; make clean KERNEL_SRC=${kernel_source_dir} cflags_zocl=-D__NONE_PETALINUX__; cd ../.."
BUILT_MODULE_NAME[0]="zocl"
BUILT_MODULE_LOCATION[0]="driver/zocl"
DEST_MODULE_LOCATION[0]="/kernel/extras"
在构建Debian Package时,将进行构建工具的测试以确保其正常工作。然而,由于Xilinx原始软件的限制,尽管是用于Edge Debian Package,但试图测试用于PCI-Express的工具(即xbmgmt和xbutil)会导致失败。要解决这个问题,请按照以下方式修改src/CMake/NativeTests.cmake以避免执行不必要的测试。
diff --git a/src/CMake/nativeTests.cmake b/src/CMake/nativeTests.cmake
index 9f53ad61..25e0d19d 100644
--- a/src/CMake/nativeTests.cmake
+++ b/src/CMake/nativeTests.cmake
@@ -3,13 +3,17 @@
# XRT_INSTALL_BIN_DIR
enable_testing()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbmgmt
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbmgmt/xbmgmt scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+if (${XRT_EDGE_BUILD} STREQUAL "no")
add_test(NAME xbutil
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/pcie/tools/xbutil/xbutil scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endif()
add_test(NAME xbutil2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbutil2/xbutil2 --new scan
@@ -19,4 +23,6 @@ add_test(NAME xbmgmt2
COMMAND ${CMAKE_BINARY_DIR}/runtime_src/core/tools/xbmgmt2/xbmgmt2 --new scan
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+if (${XRT_EDGE_BUILD} STREQUAL "no")
+ set_tests_properties(xbutil xbmgmt PROPERTIES ENVIRONMENT INTERNAL_BUILD=1)
+endif()
打开驱动程序时的修正
在 Xilinx 的原始设计中,当 XRT 打开 zocl(用于 XRT Edge 的 Linux 内核模块)时,指定的文件名被固定为“/dev/dri/renderD128”。然而,这样一来,就很难与其他 DRM 驱动程序共存,就像[介绍了如何在『Ultra96/Ultra96-V2 向け Debian GNU/Linux で Lima Driverを動かす』中所示的那样。因此,在打开 zocl 时,我们将搜索 /dev/dri,以便找到“zocl”。
具体来说,在src/runtime_src_core/edge/user/shim.cpp文件中定义了用于在/dev/dri中搜索zocl的ZYNQ::scanner类。
diff --git a/src/runtime_src/core/edge/user/shim.cpp b/src/runtime_src/core/edge/user/shim.cpp
index df0ff366..143e3264 100644
--- a/src/runtime_src/core/edge/user/shim.cpp
+++ b/src/runtime_src/core/edge/user/shim.cpp
@@ -38,6 +38,7 @@
#include <cassert>
#include <cstdarg>
+#include <dirent.h>
#include <fcntl.h>
#include <poll.h>
#include <unistd.h>
@@ -90,6 +91,98 @@ namespace ZYNQ {
//initializing static member
std::map<uint64_t, uint32_t *> shim::mKernelControl;
+class scanner {
+private:
+ std::mutex lock;
+ std::vector<std::string> dev_name_list;
+ void rescan_nolock(void)
+ {
+ const std::string dri_path = "/dev/dri";
+ const std::string render_prefix = "renderD";
+ const std::string drm_name = "zocl";
+
+ DIR* dp = opendir(dri_path.c_str());
+ if (dp) {
+ struct dirent* entry;
+ drm_version version;
+ const std::unique_ptr<char[]> path(new char[512]);
+ const std::unique_ptr<char[]> name(new char[128]);
+ const std::unique_ptr<char[]> desc(new char[512]);
+ const std::unique_ptr<char[]> date(new char[128]);
+ std::memset(&version, 0, sizeof(version));
+ version.name = name.get();
+ version.name_len = 128;
+ version.desc = desc.get();
+ version.desc_len = 512;
+ version.date = date.get();
+ version.date_len = 128;
+
+ while ((entry = readdir(dp))) {
+ int fd;
+ if (std::strncmp(entry->d_name, render_prefix.c_str(), render_prefix.length()) != 0)
+ continue;
+ sprintf(path.get(), "%s/%s", dri_path.c_str(), entry->d_name);
+ if ((fd = open(path.get(), O_RDWR, 0)) < 0)
+ continue;
+ if (ioctl(fd, DRM_IOCTL_VERSION, &version) == 0) {
+ if (std::strncmp(version.name, drm_name.c_str(), drm_name.length()) == 0) {
+ std::string dev_name(path.get());
+ dev_name_list.insert(dev_name_list.begin(), dev_name);
+ }
+ }
+ close(fd);
+ }
+ std::sort(dev_name_list.begin(), dev_name_list.end());
+ closedir(dp);
+ }
+ }
+
+public:
+ static scanner *get()
+ {
+ static scanner scanner;
+ return &scanner;
+ }
+ void rescan(void)
+ {
+ std::lock_guard<std::mutex> l(lock);
+ rescan_nolock();
+ }
+
+ size_t dev_num_total(void)
+ {
+ std::lock_guard<std::mutex> l(lock);
+ return dev_name_list.size();
+ }
+
+ const std::string& dev_name(int index)
+ {
+ static const std::string null;
+ std::lock_guard<std::mutex> l(lock);
+ if (index >= dev_name_list.size())
+ return null;
+ else
+ return dev_name_list[index];
+ }
+
+private:
+ scanner(void) { rescan_nolock();}
+ scanner(const scanner& s);
+ scanner& operator=(const scanner& s);
+};
+void rescan(void)
+{
+ scanner::get()->rescan();
+}
+size_t dev_num_total(void)
+{
+ return scanner::get()->dev_num_total();
+}
+const std::string& dev_name(int index)
+{
+ return scanner::get()->dev_name(index);
+}
+
接下来,我们将修改位于 src/runtime_src_core/edge/user/shim.cpp 中的 shim 类构造函数,以便从 /dev/dri 打开相应的设备文件。
shim::
shim(unsigned index, const char *logfileName, xclVerbosityLevel verbosity)
: mCoreDevice(xrt_core::edge_linux::get_userpf_device(this, index))
@@ -103,9 +196,13 @@ shim(unsigned index, const char *logfileName, xclVerbosityLevel verbosity)
xclLog(XRT_INFO, "XRT", "%s", __func__);
- mKernelFD = open("/dev/dri/renderD128", O_RDWR);
+ const std::string device_name = dev_name(index);
+ if (device_name.empty()) {
+ xclLog(XRT_ERROR, "XRT", "%s: Card [%d] not found", __func__, index);
+ }
+ mKernelFD = open(device_name.c_str(), O_RDWR, 0);
if (!mKernelFD) {
- xclLog(XRT_ERROR, "XRT", "%s: Cannot open /dev/dri/renderD128", __func__);
+ xclLog(XRT_ERROR, "XRT", "%s: Cannot open device %s", __func__, device_name.c_str());
}
mCmdBOCache = std::make_unique<xrt_core::bo_cache>(this, xrt_core::config::get_cmdbo_cache());
mDev = zynq_device::get_dev();
此外,我们将修改位于src/runtime_src_core/edge/user/shim.cpp中的xclProbe()函数如下。
@@ -1536,28 +1633,7 @@ unsigned
xclProbe()
{
PROBE_CB;
-
- int fd = open("/dev/dri/renderD128", O_RDWR);
- if (fd < 0) {
- return 0;
- }
- drm_version version;
- std::memset(&version, 0, sizeof(version));
- version.name = new char[128];
- version.name_len = 128;
- version.desc = new char[512];
- version.desc_len = 512;
- version.date = new char[128];
- version.date_len = 128;
-
- int result = ioctl(fd, DRM_IOCTL_VERSION, &version);
- if (result)
- return 0;
-
- result = std::strncmp(version.name, "zocl", 4);
- close(fd);
-
- return (result == 0) ? 1 : 0;
+ return (ZYNQ::dev_num_total() > 0);
}
#endif
为了展示最后在源代码中进行了修正,我们将src/CMakeList.txt中的Debian软件包的补丁级别从0更改为1。
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8cb46a32..dca721a9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -70,7 +70,7 @@ SET(XRT_VERSION_MINOR 8)
if (DEFINED ENV{XRT_VERSION_PATCH})
SET(XRT_VERSION_PATCH $ENV{XRT_VERSION_PATCH})
else(DEFINED $ENV{XRT_VERSION_PATCH})
- SET(XRT_VERSION_PATCH 0)
+ SET(XRT_VERSION_PATCH 1)
endif(DEFINED ENV{XRT_VERSION_PATCH})
#set(XRT_SOVERSION ${XRT_VERSION_MAJOR}.${XRT_VERSION_MINOR})
请下面提供的内容提供中文的同义句。仅需要提供一个选项:
参考参考
-
https://github.com/Xilinx/XRT
- https://github.com/Xilinx/XRT
-
- https://github.com/ikwzm/ZynqMP-FPGA-XRT
-
- https://github.com/ikwzm/ZynqMP-FPGA-Linux
-
- https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Ultra96
-
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(概要編)』@Qiita
-
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)』@Qiita
-
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)』@Qiita
-
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(実践編)』@Qiita
-
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(Vitis編)』@Qiita
-
- 『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2020.2版) ブートイメージの提供』@Qiita
- 『Ultra96/Ultra96-V2 向け Debian GNU/Linux で Lima Driverを動かす』@Qiita