Der Autor stellt Debian GNU / Linux für Ultra96 / Ultra96-V2 (ZynqMP) zur Verfügung 1. Darüber hinaus ist XRT (Xilinx Runtime) eine Umgebung zum Ausführen von Programmen, die in der von Xilinx bereitgestellten Entwicklungsumgebung (Vitis) auf der Plattform entwickelt wurden 2.
Ursprünglich funktioniert XRT für MPSoC Edge Device nur in der von Xilinx bereitgestellten Linux-Umgebung (Petalinux), aber das Verfahren zum Ausführen von XRT unter Debian GNU / Linux für Ultra96 / Ultra96-V2 ist in mehreren Teilen enthalten. Ich werde es separat erklären.
Dieser Artikel beschreibt die Schritte zum Erstellen von XRT für Debian GNU / Linux für Ultra96 / Ultra96-V2.
__ Das in diesem Artikel vorgestellte Debian-Paket ist nicht offiziell von Xilinx. __ __
Das Erstellen von XRT für ZynqMP-FPGA-Linux 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, für 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 ZynqMP-FPGA-Linux zu erstellen. Es ist also besser zu gabeln, als https://github.com/Xilinx/XRT direkt zu klonen.
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.
Wir werden einige Änderungen an der XRT-Build-Datei vornehmen, also erstellen Sie einen Zweig. Es basiert auf dem neuesten Commit (aac1e6871e95da47ccff4392d5849462bbd4ecad) der Hauptniederlassung zu diesem Zeitpunkt (25. März 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'
Wir werden Änderungen an diesem Zweig vornehmen. Spezifische Änderungen finden Sie unter "XRT-Änderungen" im nächsten Kapitel.
Hier haben wir die Änderungen als Patch-Datei vorbereitet, damit wir sie anwenden können. Die Patch-Datei ist unter der folgenden URL verfügbar.
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
Gehen Sie zum Build-Verzeichnis und führen Sie dort build.sh mit der Option "-edge" aus, um den Build zu starten. Ultra96 / Ultra96-V2 nimmt viel Zeit in Anspruch. In meiner Umgebung dauerte es ungefähr eine Stunde.
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
:
(Unterlassung)
:
fpga@ubuntu-fpga:~/work/XRT/build$
Wenn der Build abgeschlossen ist, befindet sich ein Debian-Paket im Verzeichnis 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
Von diesen ist das für Ultra96 / Ultra96-V2 erforderliche Debian-Paket Edge / xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb.
Dieses Kapitel beschreibt meine eigenen Änderungen am ursprünglichen XRT.
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.
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")
Im Original ist die Version von libboost-dev, libboost-filesystem-dev und libc6 unter den Paketen, von denen das erstellte Debian-Paket abhängt, 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:
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(
Ursprünglich wurde die Variable XRT_NATIVE_BUILD auf "yes" gesetzt, wenn der Host- und der Zielprozessor identisch sind. Und wenn XRT_NATIVE_BUILD "yes" ist (wenn der Hostprozessor und der Zielprozessor identisch sind), ist src / runtime_src / core / pcie "no" (wenn der Hostprozessor und der Zielprozessor unterschiedlich sind), src / runtime_src / core src / runtime_src / core / CMakeLists.txt ist für build / edge definiert.
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()
Außerdem ist src / CMake / nativeLnx.cmake, das enthalten ist, wenn XRT_NATIVE_BUILD "yes" ist (wenn der Hostprozessor und der Zielprozessor identisch sind), so konzipiert, dass der Treiber für den Host wie folgt erstellt und installiert wird. Ich werde.
src/CMake/nativeLnx.cmakext
:
(Unterlassung)
:
include (CMake/dkms.cmake)
include (CMake/dkms-aws.cmake)
include (CMake/dkms-azure.cmake)
include (CMake/dkms-container.cmake)
:
(Unterlassung)
Wenn Sie Ubuntu 18.04 unter Ultra96-V2 ausführen und selbst darauf aufbauen, sind Host- und Zielprozessor derselbe Arm64. Wenn diese Option nicht aktiviert ist, wird sie für pcie anstelle von edge erstellt.
Fügen Sie also die Variable XRT_EDGE_BUILD wie folgt zu src / CMakfile.txt hinzu:
src/CMakeLists.txt
:
(Unterlassung)
:
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():
:
(Unterlassung)
Und wenn XRT_EDGE_BUILD "yes" ist, ändern Sie jede Datei, um sie für Edge zu erstellen.
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
:
(Unterlassung)
:
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()
:
(Unterlassung)
Fügen Sie dann den Treiber (zocl) für edge zum Debian-Paket hinzu und fügen Sie die folgenden Dateien hinzu, die während der Installation mit dkms erstellt werden sollen.
Außerdem gibt es in src / runtime_src / CMakeLists.txt eine Einstellung, die den Kompilierungsoptionen "-Wall" und "Werror" hinzufügt, wenn XRT_NATIVE_BUILD "yes" ist (wenn Host- und Zielprozessor identisch sind). ..
src/runtime_src/CMakeLists.txt
:
(Unterlassung)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_NATIVE_BUILD} STREQUAL "yes")
add_compile_options("-Wall" "-Werror")
endif()
:
(Unterlassung)
Wenn die Option "-Werror" vorhanden ist, tritt beim Erstellen unter src / runtime_src / core / edge ein Fehler auf, und die Kompilierung schlägt fehl. Wenn XRT_EDGE_BUILD "yes" ist, ändern Sie daher src / runtime_src / CMakeLists.txt so, dass "-Wall" und "-Werror" nicht zu den Kompilierungsoptionen hinzugefügt werden.
src/runtime_src/CMakeLists.txt
:
(Unterlassung)
:
# TODO CL_TARGET_OPENCL_VERSION is not defined..
if (${XRT_EDGE_BUILD} STREQUAL "no")
add_compile_options("-Wall" "-Werror")
endif() :
(Unterlassung)
Ändern Sie abschließend build / build.sh so, dass XRT_EDGE_BUILD "yes" ist, wenn der Host-Prozessor arm64 ist und die Option "-edge" hinzugefügt wird.
build/build/sh
:
(Unterlassung)
:
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
:
(Unterlassung)
Ändern Sie die Berechtigungen so, dass zocl vom Benutzer geschrieben werden kann. Fügen Sie insbesondere die folgenden 10-zocl.rules zu /etc/udev/rule.d hinzu.
Shell:/etc/udev/rule.d/10-zocl.rules
KERNEL=="renderD*",MODE="0666"
Stellen Sie sicher, dass 10-zocl.rules in /etc/udev/rule.d installiert ist, wenn Sie das Debian-Paket installieren.
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"
[Übersicht]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Übersicht)" @Qiita " [Build]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Build)" @Qiita " [Installation]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "" Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Installation) "@Qiita" [Übung]: https://qiita.com/ikwzm/items/58cfea3f9d0f42840511 "" Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Übung) "@Qiita" [Vitis Edition]: https://qiita.com/ikwzm/items/e70d8d0e44fe3784a708 "" Ausführen von XRT (Xilinx Runtime) unter Debian GNU / Linux für Ultra96 / Ultra96-V2 (Vitis Edition) "@Qiita" ["Bereitstellen eines Boot-Images für Debian GNU / Linux (Version v2019.2) für UltraZed / Ultra96 / Ultra96-V2" @Qiita]: https://qiita.com/ikwzm/items/92221c5ea6abbd5e991c "" UltraZed / Ultra96 / Ultra96- Debian GNU / Linux für V2 (Version v2019.2) Bereitstellung des Boot-Images "@Qiita"