Cet article a été publié lorsque j'essayais d'exécuter XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2, et il contient du contenu ancien. Veuillez vous référer à l'article suivant publié le 26 mars 2020.
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. XRT est implémenté comme une combinaison d'espace utilisateur et de composants de pilote de noyau. Le code source de XRT est disponible sur github.
La figure ci-dessous montre la pile logicielle XRT (citée dans le référentiel github ci-dessus).
Fig.1 XRT Software Stack
J'ai construit et fourni Debian GNU / Linux en tant que plate-forme UltraZed / Ultra96 / Ultra96-V2 sur github.
XRT est basé sur Petalinux fourni par Xilinx, mais j'aimerais l'exécuter sur Debian GNU / Linux fourni par ZynqMP-FPGA-Linux.
Cet article vous guidera tout au long de la construction de XRT à partir du code source pour créer un paquet Debian.
Le paquet Debian pré-construit est disponible sur github. Il est difficile de créer l'environnement à construire, et cela prend 1 à 2 heures à construire, donc si vous avez des problèmes, veuillez le télécharger à partir d'ici.
https://github.com/ikwzm/ZynqMP-FPGA-XRT
Reportez-vous également à l'article suivant pour l'installation.
__ Pour le moment (23 mars 2020), il peut être installé, mais il ne fonctionne pas encore. Cet article est juste un dossier de défense de procès. __
Construire XRT pour UltraZed / Ultra96 / Ultra96-V2 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 construction. 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 Ultra96 / Ultra96-V2. Il est donc préférable de bifurquer que de cloner directement https://github.com/Xilinx/XRT.
Nous allons apporter quelques modifications au fichier de construction XRT, alors créez une branche.
fpga@ubuntu-fpga:~/work/XRT$ git checkout -b 2019.2_Ultra96
Switched to a new branch '2019.2_Ultra96'
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.
fpga@ubuntu-fpga:~/work/XRT$ git diff src/CMake/cpackLin.cmake
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")
fpga@ubuntu-fpga:~/work/XRT$ git add src/CMake/cpackLin.cmake
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[add] linux flavor name to built debian package name"
[2019.2_Ultra96 f6d3236b] [add] linux flavor name to built debian package name
1 file changed, 1 insertion(+), 1 deletion(-)
À l'origine, le paquet dont dépend le paquet Debian construit est défini dans src / CMake / cpackLin.cmake comme suit:
src/CMake/cpackLin.cmake
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 ")
Il existe une limite supérieure aux versions de libboost-dev, libboost-filesystem-dev et libc6 dont dépend le paquet Debian construit. 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:
fpga@ubuntu-fpga:~/work/XRT$ git diff src/CMake/cpackLin.cmake
--- 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(
fpga@ubuntu-fpga:~/work/XRT$ git add src/CMake/cpackLin.cmake
fpga@ubuntu-fpga:~/work/XRT$ git commit -m "[remove] upper limit of version of depend packages"
[2019.2_Ultra96 b69d97cd] [remove] upper limit of version of depend packages
1 file changed, 1 insertion(+), 1 deletion(-)
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.
Accédez au répertoire de construction et exécutez build.sh pour démarrer la construction. Ultra96 / Ultra96-V2 prend beaucoup de temps. Cela a pris environ 1 à 2 heures dans mon environnement.
fpga@ubuntu-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ./build.sh
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 dans le répertoire build / Release.
fpga@ubuntu-fpga:~/work/XRT$ cd build/
fpga@ubuntu-fpga:~/work/XRT/build$ ls -1 Release/xrt_*
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-aws.deb
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-aws.tar.gz
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-azure.deb
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-azure.tar.gz
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-container.deb
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-container.tar.gz
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xbtest.deb
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xbtest.tar.gz
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb
Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.tar.gz
Parmi ceux-ci, le paquet Debian requis pour Ultra96 / Ultra96-V2 est Release / xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb.
Le xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb construit dans le chapitre précédent n'inclut pas zocl (voir Fig.1 XRT Software Stack pour zocl). zocl est un module du noyau Linux pour les périphériques Edge tels que Ultra96 / Ultra96-V2.
Donc, ce chapitre décrit comment construire le paquet Debian de zocl. Ici, nous allons construire en utilisant dkms.
Tout d'abord, créez un répertoire appelé zocl-2.6.0 sous / usr / src /. zocl est le nom du module du noyau et 2.6.0 est le numéro de version XRT.
fpga@ubuntu-fpga:~/work/XRT$ sudo mkdir /usr/src/zocl-2.6.0
fpga@ubuntu-fpga:~/work/XRT$ sudo chmod o+w /usr/src/zocl-2.6.0
Le code source de zocl se trouve dans src / runtime_src / core / edge / drm / zocl de XRT. Vous avez également besoin de certains fichiers d'en-tête dans d'autres répertoires. Copiez ces fichiers dans le répertoire préparé dans la section précédente.
fpga@ubuntu-fpga:~/work/XRT$ mkdir /usr/src/zocl-2.6.0/src
fpga@ubuntu-fpga:~/work/XRT$ mkdir /usr/src/zocl-2.6.0/src/edge
fpga@ubuntu-fpga:~/work/XRT$ mkdir /usr/src/zocl-2.6.0/src/edge/drm
fpga@ubuntu-fpga:~/work/XRT$ cp -r src/runtime_src/core/edge/drm/zocl /usr/src/zocl-2.6.0/src/edge/drm
fpga@ubuntu-fpga:~/work/XRT$ cp -r src/runtime_src/core/include/ /usr/src/zocl-2.6.0/src
fpga@ubuntu-fpga:~/work/XRT$ cp -r src/runtime_src/core/edge/include /usr/src/zocl-2.6.0/src/edge/
fpga@ubuntu-fpga:~/work/XRT$ cp src/runtime_src/core/common/drv/xrt_drv.h /usr/src/zocl-2.6.0/src/edge/drm/zocl
fpga@ubuntu-fpga:~/work/XRT$ cp LICENSE /usr/src/zocl-2.6.0/
Les outils suivants doivent être installés pour générer.
Créez /usr/src/zocl-2.6.0/dkms.conf comme suit:
Makefile:/usr/src/zocl-2.6.0/dkms.conf
PACKAGE_NAME="zocl-dkms"
PACKAGE_VERSION="2.6.0"
MAKE="make -C src/edge/drm/zocl/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/edge/drm/zocl/ clean"
BUILT_MODULE_NAME="zocl"
BUILT_MODULE_LOCATION="src/edge/drm/zocl/"
DEST_MODULE_LOCATION="/updates"
Ajoutez zocl-2.6.0 à dkms.
fpga@ubuntu-fpga:/usr/src/zocl-2.6.0$ sudo dkms add -m zocl -v 2.6.0
Creating symlink /var/lib/dkms/zocl/2.6.0/source ->
/usr/src/zocl-2.6.0
DKMS: add completed.
Essayez de construire un module de noyau en utilisant dkms et voyez s'il réussit.
fpga@ubuntu-fpga:/usr/src/zocl-2.6.0$ sudo dkms build -m zocl -v 2.6.0
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
make -j4 KERNELRELEASE=4.19.0-xlnx-v2019.2-zynqmp-fpga -C src/edge/drm/zocl/ KERNELDIR=/lib/modules/4.19.0-xlnx-v2019.2-zynqmp-fpga/build.......
cleaning build area...
DKMS: build completed.
fpga@ubuntu-fpga:/usr/src/zocl-2.6.0$ sudo dkms mkdsc -m zocl -v 2.6.0 --source-only
Using /etc/dkms/template-dkms-mkdsc
copying template...
modifying debian/changelog...
modifying debian/compat...
modifying debian/control...
modifying debian/copyright...
modifying debian/dirs...
modifying debian/postinst...
modifying debian/prerm...
modifying debian/README.Debian...
modifying debian/rules...
copying legacy postinstall template...
Copying source tree...
Building source package... dpkg-source --before-build zocl-dkms-2.6.0
debian/rules clean
dh_clean: Compatibility levels before 9 are deprecated (level 7 in use)
dpkg-source -b zocl-dkms-2.6.0
dpkg-source: warning: no source format specified in debian/source/format, see dpkg-source(1)
dpkg-genbuildinfo --build=source
dpkg-genchanges --build=source >../zocl-dkms_2.6.0_source.changes
dpkg-genchanges: info: including full source code in upload
dpkg-source --after-build zocl-dkms-2.6.0
DKMS: mkdsc completed.
Moving built files to /var/lib/dkms/zocl/2.6.0/dsc...
Cleaning up temporary files...
Le paquet Debian construit ici peut être trouvé à /var/lib/dkms/zocl/2.6.0/dsc.
fpga@ubuntu-fpga:/usr/src/zocl-2.6.0$ sudo dkms mkdeb -m zocl -v 2.6.0 --source-only
Using /etc/dkms/template-dkms-mkdeb
copying template...
modifying debian/changelog...
modifying debian/compat...
modifying debian/control...
modifying debian/copyright...
modifying debian/dirs...
modifying debian/postinst...
modifying debian/prerm...
modifying debian/README.Debian...
modifying debian/rules...
copying legacy postinstall template...
Copying source tree...
Building binary package...dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-source --before-build zocl-dkms-2.6.0
fakeroot debian/rules clean
dh_clean: Compatibility levels before 9 are deprecated (level 7 in use)
debian/rules build
fakeroot debian/rules binary
dh_installdirs: Compatibility levels before 9 are deprecated (level 7 in use)
dh_strip: Compatibility levels before 9 are deprecated (level 7 in use)
dh_compress: Compatibility levels before 9 are deprecated (level 7 in use)
dh_installdeb: Compatibility levels before 9 are deprecated (level 7 in use)
dh_shlibdeps: Compatibility levels before 9 are deprecated (level 7 in use)
dpkg-genbuildinfo --build=binary
dpkg-genchanges --build=binary >../zocl-dkms_2.6.0_arm64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
dpkg-source --after-build zocl-dkms-2.6.0
DKMS: mkdeb completed.
Moving built files to /var/lib/dkms/zocl/2.6.0/deb...
Cleaning up temporary files...
Le paquet Debian construit ici se trouve dans /var/lib/dkms/zocl/2.6.0/deb.
Copiez le paquet Debian construit dans la section précédente.
fpga@ubuntu-fpga:/usr/src/zocl-2.6.0$ cd ~/work/XRT/build
fpga@ubuntu-fpga:~/work/XRT/build$ cp /var/lib/dkms/zocl/2.6.0/deb/* .
fpga@ubuntu-fpga:~/work/XRT/build$ cp /var/lib/dkms/zocl/2.6.0/dsc/* .
Afin d'installer le paquet Debian intégré, vous devez supprimer zocl de dkms une fois pour qu'il n'entre pas en conflit avec le paquet Debian.
fpga@ubuntu-fpga:~/work/XRT/build$ sudo rm -r /var/lib/dkms/zocl/
["Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Présentation)" @Qiita]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Pour Ultra96 / Ultra96-V2 Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux (présentation) «@Qiita» ["Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Build)" @Qiita]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "Pour Ultra96 / Ultra96-V2 Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux (Build) «@Qiita» ["Exécution de XRT (Xilinx Runtime) sur Debian GNU / Linux pour Ultra96 / Ultra96-V2 (Installation)" @Qiita]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "Pour Ultra96 / Ultra96-V2 Exécutez XRT (Xilinx Runtime) sur Debian GNU / Linux (Installation) "@Qiita"
Recommended Posts