L'auteur fournit Debian GNU / Linux pour Ultra96 / Ultra96-V2 (ZynqMP) 1. De plus, XRT (Xilinx Runtime) est un environnement pour exécuter des programmes développés dans l'environnement de développement (Vitis) fourni par Xilinx sur la plateforme 2.
À l'origine, XRT pour MPSoC Edge Device ne fonctionne que dans l'environnement Linux (Petalinux) fourni par Xilinx, mais la procédure pour exécuter XRT sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 est incluse en plusieurs parties. Je vais expliquer séparément.
Cet article décrit les étapes de construction de XRT pour Debian GNU / Linux pour Ultra96 / Ultra96-V2.
__ Le paquet Debian présenté dans cet article n'est pas officiel par Xilinx. __
Construire XRT pour ZynqMP-FPGA-Linux est un peu fastidieux. La construction de XRT nécessite une distribution Linux telle qu'Ubuntu ou CentOS. Divers outils de développement doivent être installés dans la build. De plus, il est très difficile de faire une compilation croisée pour ARM64 avec un PC comme hôte, probablement pour créer un paquet Debian.
Je lance donc Ubuntu 18.04 sur Ultra96-V2 et je m'auto-construit dessus. Ubuntu 18.04 pour Ultra96-V2 est disponible à l'URL suivante:
Téléchargez le code source XRT à partir de l'URL suivante.
fpga@ubuntu-fpga:~$ cd work
fpga@ubuntu-fpga:~/work$ git clone https://github.com/Xilinx/XRT
Cloning into 'XRT'...
remote: Enumerating objects: 30, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 43591 (delta 13), reused 7 (delta 0), pack-reused 43561
Receiving objects: 100% (43591/43591), 58.10 MiB | 2.57 MiB/s, done.
Resolving deltas: 100% (33849/33849), done.
Checking out files: 100% (1682/1682), done.
fpga@ubuntu-fpga:~/work$ cd XRT
fpga@ubuntu-fpga:~/work/XRT$
Modifiez certains fichiers pour créer XRT pour ZynqMP-FPGA-Linux. Il est donc préférable de bifurquer que de cloner directement https://github.com/Xilinx/XRT.
Installez les packages requis pour la construction. Heureusement, XRT fournit un script qui installe les packages nécessaires à la construction.
Si vous exécutez ./src/runtime_src/tools/scripts/xrtdeps.sh avec les privilèges de super utilisateur, le programme apt installera le paquet Debian manquant.
fpga@ubuntu-fpga:~/work/XRT$ sudo ./src/runtime_src/tools/scripts/xrtdeps.sh
Installing packages...
Reading package lists... Done
Building dependency tree
Reading state information... Done
:
(Omission)
:
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.
Nous allons apporter quelques modifications au fichier de construction XRT, alors créez une branche. Basé sur le dernier commit (aac1e6871e95da47ccff4392d5849462bbd4ecad) de la branche master à ce moment (25 mars 2020).
fpga@ubuntu-fpga:~/work/XRT$ git checkout aac1e6871e95da47ccff4392d5849462bbd4ecad
fpga@ubuntu-fpga:~/work/XRT$ git checkout -b 2019.2_Ultra96
Switched to a new branch '2019.2_Ultra96'
Nous apporterons des modifications à cette branche. Pour des modifications spécifiques, voir «Modifications XRT» dans le chapitre suivant.
Ici, nous avons préparé les modifications sous forme de fichier de correctif, nous allons donc les appliquer. Le fichier de correctif est disponible à l'URL suivante.
https://github.com/ikwzm/ZynqMP-FPGA-XRT
fpga@ubuntu-fpga:~/work/XRT$ patch -p1 < ../files/00-xrt.patch
patching file src/CMake/cpackLin.cmake
fpga@ubuntu-fpga:~/work/XRT$ git add --update
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[add] linux flavor name to built debian package name"
[2019.2_Ultra96 9ff0a408] [add] linux flavor name to built debian package name
1 file changed, 1 insertion(+), 1 deletion(-)
fpga@ubuntu-fpga:~/work/XRT$ patch -p1 < ../files/01-xrt.patch
patching file src/CMake/cpackLin.cmake
fpga@ubuntu-fpga:~/work/XRT$ git add --update
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[remove] upper limit of version of depend packages"
[2019.2_Ultra96 7e93ed34] [remove] upper limit of version of depend packages
1 file changed, 1 insertion(+), 1 deletion(-)
fpga@ubuntu-fpga:~/work/XRT$ patch -p1 < ../files/02-xrt.patch
patching file build/build.sh
patching file src/CMake/config/dkms-zocl/dkms.conf.in
patching file src/CMake/config/edge/postinst.in
patching file src/CMake/config/edge/prerm.in
patching file src/CMake/cpackLin.cmake
patching file src/CMake/dkms-edge.cmake
patching file src/CMake/nativeLnx.cmake
patching file src/CMakeLists.txt
patching file src/runtime_src/CMakeLists.txt
patching file src/runtime_src/core/CMakeLists.txt
patching file src/CMake/cpackLin.cmake
fpga@ubuntu-fpga:~/work/XRT$ git add --update
fpga@ubuntu-fpga:~/work/XRT$ git add src/CMake/config/dkms-zocl
fpga@ubuntu-fpga:~/work/XRT$ git add src/CMake/config/edge
fpga@ubuntu-fpga:~/work/XRT$ git add src/CMake/dkms-edge.cmake
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[add] XRT_EDGE_BUILD for MPSoC Edge"
[2019.2_Ultra96 95287c93] [add] XRT_EDGE_BUILD for MPSoC Edge
10 files changed, 376 insertions(+), 10 deletions(-)
create mode 100644 src/CMake/config/dkms-zocl/dkms.conf.in
create mode 100644 src/CMake/config/edge/postinst.in
create mode 100644 src/CMake/config/edge/prerm.in
create mode 100644 src/CMake/dkms-edge.cmake
fpga@ubuntu-fpga:~/work/XRT$ patch -p1 < ../files/03-xrt.patch
patching file src/CMake/config/edge/postinst.in
patching file src/CMake/dkms-edge.cmake
patching file src/runtime_src/core/edge/drm/zocl/10-zocl.rules
fpga@ubuntu-fpga:~/work/XRT$ git add --update
fpga@ubuntu-fpga:~/work/XRT$ git add src/runtime_src/core/edge/drm/zocl/10-zocl.rules
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[add] 10-zocl.rules for udev"
[2019.2_Ultra96 04a8069d] [add] 10-zocl.rules for udev
3 files changed, 3 insertions(+)
create mode 100644 src/runtime_src/core/edge/drm/zocl/10-zocl.rules
Allez dans le répertoire build et exécutez build.sh avec l'option "-edge" pour démarrer la build. Ultra96 / Ultra96-V2 prend beaucoup de temps. Cela a pris environ une heure dans mon environnement.
fpga@ubuntu-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ./build.sh -edge
cmake -DRDI_CCACHE=0 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_TOOLCHAIN_FILE= ../../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/gcc-8
-- Check for working C compiler: /usr/bin/gcc-8 -- 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/g++-8
-- Check for working CXX compiler: /usr/bin/g++-8 -- 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
:
(Omission)
:
fpga@ubuntu-fpga:~/work/XRT/build$
Lorsque la construction est terminée, vous aurez un paquet Debian sous le répertoire build / Edge.
fpga@ubuntu-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ls -1 Edge/xrt_*
Edge/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xbtest.deb
Edge/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xbtest.tar.gz
Edge/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb
Edge/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.tar.gz
Parmi ceux-ci, le paquet Debian requis pour Ultra96 / Ultra96-V2 est Edge / xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb.
Ce chapitre décrit mes propres modifications apportées au XRT d'origine.
Dans le XRT d'origine, le paquet Debian que vous avez construit serait nommé xrt_202010.2.6.0_18.04-arm64-xrt.deb, mais pour préciser qu'il s'agit d'un paquet pour Ubuntu xrt_202010.2.6.0_Ubuntu_18.04- Faites-le arm64-xrt.deb.
ZynqMP-FPGA-XRT/files/00-xrt.patch
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}")
+SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${XRT_VERSION_RELEASE}.${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${LINUX_FLAVOR}_${CPACK_REL_VER}-${CPACK_ARCH}")
message("-- ${CMAKE_BUILD_TYPE} ${PACKAGE_KIND} package")
À l'origine, la version de libboost-dev, libboost-filesystem-dev et libc6 parmi les paquets dont dépend le paquet Debian construit est plafonnée. Si tel est le cas, la distribution à installer peut être trop restrictive et l'installation peut échouer. Par exemple, une tentative d'installation de ce paquet Debian sur Debian 10 échouera.
Donc, ce qui peut être un problème plus tard, modifiez cpackLin.cmake pour supprimer la limite de version comme suit:
ZynqMP-FPGA-XRT/files/01-xrt.patch
diff --git a/src/CMake/cpackLin.cmake b/src/CMake/cpackLin.cmake
index 9f6eebe4..5b056580 100644
--- a/src/CMake/cpackLin.cmake
+++ b/src/CMake/cpackLin.cmake
@@ -49,7 +49,7 @@ if (${LINUX_FLAVOR} MATCHES "^(Ubuntu|Debian)")
SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "OFF")
SET(CPACK_DEBIAN_AWS_PACKAGE_DEPENDS "xrt (>= ${XRT_VERSION_MAJOR}.${XRT_VERSION_MINOR}.${XRT_VERSION_PATCH})")
SET(CPACK_DEBIAN_XBTEST_PACKAGE_DEPENDS "xrt (>= ${XRT_VERSION_MAJOR}.${XRT_VERSION_MINOR}.${XRT_VERSION_PATCH}), libjson-glib-dev")
- SET(CPACK_DEBIAN_XRT_PACKAGE_DEPENDS "ocl-icd-opencl-dev (>= 2.2.0), libboost-dev (>= ${Boost_VER_STR}), libboost-dev (<< ${Boost_VER_STR_ONEGREATER}), libboost-filesystem-dev (>=${Boost_VER_STR}), libboost-filesystem-dev (<<${Boost_VER_STR_ONEGREATER}), uuid-dev (>= 2.27.1), dkms (>= 2.2.0), libprotoc-dev (>=2.6.1), libssl-dev (>=1.0.2), protobuf-compiler (>=2.6.1), libncurses5-dev (>=6.0), lsb-release, libxml2-dev (>=2.9.1), libyaml-dev (>= 0.1.6), libc6 (>= ${GLIBC_VERSION}), libc6 (<< ${GLIBC_VERSION_ONEGREATER}), python (>= 2.7), python-pip, libudev-dev ")
+ SET(CPACK_DEBIAN_XRT_PACKAGE_DEPENDS "ocl-icd-opencl-dev (>= 2.2.0), libboost-dev (>= ${Boost_VER_STR}), libboost-filesystem-dev (>=${Boost_VER_STR}), uuid-dev (>= 2.27.1), dkms (>= 2.2.0), libprotoc-dev (>=2.6.1), libssl-dev (>=1.0.2), protobuf-compiler (>=2.6.1), libncurses5-dev (>=6.0), lsb-release, libxml2-dev (>=2.9.1), libyaml-dev (>= 0.1.6), libc6 (>= ${GLIBC_VERSION}), python (>= 2.7), python-pip, libudev-dev ")
elseif (${LINUX_FLAVOR} MATCHES "^(RedHat|CentOS|Amazon)")
execute_process(
À l'origine, la variable XRT_NATIVE_BUILD est définie sur "yes" si les processeurs hôte et cible sont identiques. Et lorsque XRT_NATIVE_BUILD est "yes" (lorsque le processeur hôte et le processeur cible sont identiques), src / runtime_src / core / pcie est quand "no" (lorsque le processeur hôte et le processeur cible sont différents), src / runtime_src / core src / runtime_src / core / CMakeLists.txt est défini sur build / 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()
De plus, src / CMake / nativeLnx.cmake, qui est inclus lorsque XRT_NATIVE_BUILD est "yes" (lorsque le processeur hôte et le processeur cible sont identiques), est conçu pour créer et installer le pilote de l'hôte comme suit. Je vais.
src/CMake/nativeLnx.cmakext
:
(Omission)
:
include (CMake/dkms.cmake)
include (CMake/dkms-aws.cmake)
include (CMake/dkms-azure.cmake)
include (CMake/dkms-container.cmake)
:
(Omission)
Si vous exécutez Ubuntu 18.04 sur Ultra96-V2 et que vous construisez vous-même dessus, les processeurs hôte et cible seront les mêmes arm64. Si elle n'est pas cochée, elle sera construite pour pcie au lieu de edge.
Ajoutez donc la variable XRT_EDGE_BUILD à src / CMakfile.txt comme suit:
src/CMakeLists.txt
:
(Omission)
:
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():
:
(Omission)
Et si XRT_EDGE_BUILD est "oui", modifiez chaque fichier à construire pour le bord.
src/runtime_src/core/CMakeLists.txt
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
add_subdirectory(include)
add_subdirectory(common)
if (${XRT_EDGE_BUILD} STREQUAL "yes")
add_subdirectory(edge)
else()
add_subdirectory(pcie)
add_subdirectory(tools)
endif()
src/CMake/nativeLnx.cmakext
:
(Omission)
:
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()
:
(Omission)
Ajoutez ensuite le pilote (zocl) pour edge au paquet Debian et ajoutez les fichiers suivants à construire en utilisant dkms lors de l'installation.
En outre, il existe un paramètre dans src / runtime_src / CMakeLists.txt qui ajoute "-Wall" et- "Werror" aux options de compilation lorsque XRT_NATIVE_BUILD est "yes" (lorsque les processeurs hôte et cible sont identiques). ..
src/runtime_src/CMakeLists.txt
:
(Omission)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_NATIVE_BUILD} STREQUAL "yes")
add_compile_options("-Wall" "-Werror")
endif()
:
(Omission)
S'il y a une option "-Werror", une erreur se produira lors de la construction sous src / runtime_src / core / edge et la compilation échouera. Par conséquent, lorsque XRT_EDGE_BUILD est "oui", modifiez src / runtime_src / CMakeLists.txt afin que "-Wall" et "-Werror" ne soient pas ajoutés aux options de compilation.
src/runtime_src/CMakeLists.txt
:
(Omission)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_EDGE_BUILD} STREQUAL "no")
add_compile_options("-Wall" "-Werror")
endif() :
(Omission)
Enfin, modifiez build / build.sh pour que XRT_EDGE_BUILD soit "yes" si le processeur hôte est arm64 et que l'option "-edge" est ajoutée.
build/build/sh
:
(Omission)
:
f [[ $CPU == "aarch64" ]] && [[ $edge == 1 ]]; then
mkdir -p $edge_dir
cd $edge_dir
if [[ $nocmake == 0 ]]; then
echo "$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 [[ $docs == 1 ]]; then
echo "make xrt_docs"
make xrt_docs
else
echo "make -j $jcore $verbose DESTDIR=$PWD"
time make -j $jcore $verbose DESTDIR=$PWD
time ctest --output-on-failure
time make package
fi
cd $BUILDDIR
fi
:
(Omission)
Modifiez les autorisations afin que zocl puisse être écrit par l'utilisateur. Plus précisément, ajoutez les règles 10-zocl.rules suivantes à /etc/udev/rule.d.
Shell:/etc/udev/rule.d/10-zocl.rules
KERNEL=="renderD*",MODE="0666"
Assurez-vous que 10-zocl.rules est installé dans /etc/udev/rule.d lorsque vous installez le paquet Debian.
ZynqMP-FPGA-XRT/files/03-xrt.patch
diff --git a/src/CMake/config/edge/postinst.in b/src/CMake/config/edge/postinst.in
index 22136c09..b85a1032 100644
--- a/src/CMake/config/edge/postinst.in
+++ b/src/CMake/config/edge/postinst.in
@@ -48,6 +48,7 @@ echo "Invoking DKMS common.postinst for xrt"
/usr/lib/dkms/common.postinst xrt @XRT_VERSION_STRING@ "" "" $2
if [ $? -eq 0 ]; then
echo "Finished DKMS common.postinst"
+ install -m 644 /usr/src/xrt-@XRT_VERSION_STRING@/driver/edge/drm/zocl/10-zocl.rules /etc/udev/rules.d
echo "Loading new XRT Linux kernel modules"
udevadm control --reload-rules
modprobe zocl
diff --git a/src/CMake/dkms-edge.cmake b/src/CMake/dkms-edge.cmake
index d1d39750..61664945 100644
--- a/src/CMake/dkms-edge.cmake
+++ b/src/CMake/dkms-edge.cmake
@@ -38,6 +38,7 @@ SET (XRT_DKMS_CORE_COMMON_DRV ${XRT_DKMS_CORE_DIR}/common/drv)
SET (XRT_DKMS_DRIVER_SRCS
edge/drm/zocl/LICENSE
edge/drm/zocl/Makefile
+ edge/drm/zocl/10-zocl.rules
edge/drm/zocl/sched_exec.c
edge/drm/zocl/sched_exec.h
edge/drm/zocl/zocl_bo.c
diff --git a/src/runtime_src/core/edge/drm/zocl/10-zocl.rules b/src/runtime_src/core/edge/drm/zocl/10-zocl.rules
new file mode 100644
index 00000000..11ed38e1
--- /dev/null
+++ b/src/runtime_src/core/edge/drm/zocl/10-zocl.rules
@@ -0,0 +1 @@
+KERNEL=="renderD*",MODE="0666"
[Présentation]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Présentation)" @Qiita " [Build]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Build)" @Qiita " [Installation]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "" Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Installation) "@Qiita" [Pratique]: https://qiita.com/ikwzm/items/58cfea3f9d0f42840511 "" Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (pratique) "@Qiita" [Édition Vitis]: https://qiita.com/ikwzm/items/e70d8d0e44fe3784a708 "" Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (édition Vitis) "@Qiita" ["Fourniture d'une image de démarrage pour Debian GNU / Linux (version v2019.2) pour UltraZed / Ultra96 / Ultra96-V2" @Qiita]: https://qiita.com/ikwzm/items/92221c5ea6abbd5e991c "" UltraZed / Ultra96 / Ultra96- Debian GNU / Linux pour V2 (version v2019.2) Fournit l'image de démarrage "@Qiita"
Recommended Posts