Dieser Artikel wurde veröffentlicht, als ich versuchte, XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 auszuführen, und enthält alten Inhalt. Bitte lesen Sie den folgenden Artikel, der am 26. März 2020 veröffentlicht wurde.
XRT (Xilinx Runtime) ist eine Umgebung zum Ausführen von Programmen, die in der von Xilinx bereitgestellten Entwicklungsumgebung (Vitis) auf der Plattform entwickelt wurden. XRT wird als Kombination aus Benutzerbereich und Kerneltreiberkomponenten implementiert. Der Quellcode für XRT ist auf github verfügbar.
Die folgende Abbildung zeigt den XRT-Software-Stack (zitiert aus dem obigen Github-Repository).
Fig.1 XRT Software Stack
Ich habe Debian GNU / Linux als UltraZed / Ultra96 / Ultra96-V2-Plattform auf Github erstellt und bereitgestellt.
XRT basiert auf Petalinux von Xilinx, aber ich möchte es auf Debian GNU / Linux von ZynqMP-FPGA-Linux ausführen.
Dieser Artikel führt Sie durch das Erstellen von XRT aus dem Quellcode, um ein Debian-Paket zu erstellen.
Das vorgefertigte Debian-Paket ist auf github verfügbar. Es ist schwierig, die zu erstellende Umgebung zu erstellen, und die Erstellung dauert 1 bis 2 Stunden. Wenn Sie also Probleme haben, laden Sie sie bitte hier herunter.
https://github.com/ikwzm/ZynqMP-FPGA-XRT
Informationen zur Installation finden Sie auch im folgenden Artikel.
__ Im Moment (23. März 2020) kann es installiert werden, aber es funktioniert noch nicht. Dieser Artikel ist nur eine Gerichtsverhandlung. __ __
Das Erstellen von XRT für UltraZed / Ultra96 / Ultra96-V2 ist etwas mühsam. Für die Erstellung von XRT ist eine Linux-Distribution wie Ubuntu oder CentOS erforderlich. Im Build müssen verschiedene Entwicklungstools installiert sein. Darüber hinaus ist es sehr mühsam, ARM64 mit einem PC als Host zu kompilieren, wahrscheinlich um ein Debian-Paket zu erstellen.
Also starte ich Ubuntu 18.04 auf Ultra96-V2 und baue selbst darauf auf.
Ubuntu 18.04 für Ultra96-V2 ist unter folgender URL verfügbar:
Laden Sie den XRT-Quellcode von der folgenden URL herunter.
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$
Ändern Sie einige Dateien, um XRT für Ultra96 / Ultra96-V2 zu erstellen. Es ist also besser zu gabeln, als https://github.com/Xilinx/XRT direkt zu klonen.
Wir werden einige Änderungen an der XRT-Build-Datei vornehmen, also erstellen Sie einen Zweig.
fpga@ubuntu-fpga:~/work/XRT$ git checkout -b 2019.2_Ultra96
Switched to a new branch '2019.2_Ultra96'
In der ursprünglichen XRT würde das von Ihnen erstellte Debian-Paket xrt_202010.2.6.0_18.04-arm64-xrt.deb heißen, aber um klar zu machen, dass es sich um ein Paket für Ubuntu handelt xrt_202010.2.6.0_Ubuntu_18.04- Machen Sie es 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(-)
Ursprünglich ist das Paket, von dem das erstellte Debian-Paket abhängt, in src / CMake / cpackLin.cmake wie folgt festgelegt:
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 ")
Von den Paketen, von denen das erstellte Debian-Paket abhängt, sind die Versionen libboost-dev, libboost-filesystem-dev und libc6 begrenzt. In diesem Fall ist die zu installierende Distribution möglicherweise zu restriktiv und die Installation schlägt möglicherweise fehl. Ein Versuch, dieses Debian-Paket unter Debian 10 zu installieren, schlägt beispielsweise fehl.
Ändern Sie daher cpackLin.cmake, um das Versionslimit wie folgt zu entfernen, was später ein Problem sein kann:
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(-)
Installieren Sie die für den Build erforderlichen Pakete. Glücklicherweise bietet XRT ein Skript, das die für den Build erforderlichen Pakete installiert.
Wenn Sie ./src/runtime_src/tools/scripts/xrtdeps.sh mit Superuser-Berechtigungen ausführen, installiert das apt-Programm das fehlende Debian-Paket.
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
:
(Unterlassung)
:
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.
Gehen Sie zum Build-Verzeichnis und führen Sie dort build.sh aus, um den Build zu starten. Ultra96 / Ultra96-V2 nimmt viel Zeit in Anspruch. In meiner Umgebung dauerte es ungefähr 1-2 Stunden.
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
:
(Unterlassung)
:
fpga@ubuntu-fpga:~/work/XRT/build$
Wenn der Build abgeschlossen ist, haben Sie ein Debian-Paket im Build / Release-Verzeichnis.
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
Von diesen ist das für Ultra96 / Ultra96-V2 erforderliche Debian-Paket Release / xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb.
Die im vorherigen Kapitel erstellte Datei xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb enthält kein zocl (siehe Abb.1 XRT Software Stack für zocl). zocl ist ein Linux-Kernelmodul für Edge-Geräte wie Ultra96 / Ultra96-V2.
In diesem Kapitel wird beschrieben, wie Sie das Debian-Paket von zocl erstellen. Hier werden wir mit dkms bauen.
Erstellen Sie zunächst ein Verzeichnis mit dem Namen zocl-2.6.0 unter / usr / src /. zocl ist der Name des Kernelmoduls und 2.6.0 ist die XRT-Versionsnummer.
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
Der Quellcode für zocl befindet sich in srR / runtime_src / core / edge / drm / zocl von XRT. Sie benötigen auch einige Header-Dateien in anderen Verzeichnissen. Kopieren Sie diese Dateien in das im vorherigen Abschnitt vorbereitete Verzeichnis.
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/
Die folgenden Tools müssen zum Erstellen installiert sein.
Erstellen Sie /usr/src/zocl-2.6.0/dkms.conf wie folgt:
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"
Fügen Sie zocl-2.6.0 zu dkms hinzu.
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.
Versuchen Sie, ein Kernelmodul mit dkms zu erstellen, und prüfen Sie, ob es erfolgreich ist.
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...
Das Debian-Paket, das Sie hier erstellt haben, befindet sich unter /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...
Das hier erstellte Debian-Paket befindet sich unter /var/lib/dkms/zocl/2.6.0/deb.
Kopieren Sie das im vorherigen Abschnitt erstellte Debian-Paket.
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/* .
Um das erstellte Debian-Paket zu installieren, müssen Sie zocl einmal aus dkms entfernen, damit es nicht mit dem Debian-Paket in Konflikt steht.
fpga@ubuntu-fpga:~/work/XRT/build$ sudo rm -r /var/lib/dkms/zocl/
["Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Übersicht)" @Qiita]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Für Ultra96 / Ultra96-V2 Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux (Übersicht) ”@Qiita” ["Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Build)" @Qiita]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "Für Ultra96 / Ultra96-V2 Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux (Build) "@Qiita" aus. ["Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Installation)" @Qiita]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "Für Ultra96 / Ultra96-V2 Führen Sie XRT (Xilinx Runtime) unter Debian GNU / Linux (Installation) "@Qiita" aus.