Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)【未完】







# 注意(2020年3月26日追記)


この記事は Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動作させようと試行錯誤していた時に投稿したもので、古い内容が含まれています。2020年3月26日に以下の記事を投稿したので参照してください。

* [『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]


# はじめに


XRT(Xilinx Runtime) は Xilinx社が提供する開発環境(Vitis)で開発したプログラムをプラットフォームで動かすための環境です。XRT はユーザー空間とカーネルドライバのコンポーネントの組み合わせとして実装されています。XRT は github で ソースコードが公開されています。

* https://github.com/Xilinx/XRT

下図に XRT のソフトウェアスタックを示します(上のgithub リポジトリ より引用)。


![Fig.1 XRT Software Stack](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24981/422b63b6-23f9-d8d5-8a88-6fcab21a056a.png "Fig.1 XRT Software Stack")

Fig.1 XRT Software Stack

<br />



筆者はgithub に UltraZed/Ultra96/Ultra96-V2 のプラットフォームとして Debian GNU/Linux をビルドして提供しています。

* https://github.com/ikwzm/ZynqMP-FPGA-Linux



XRT は Xilinx 社が提供する Petalinux を前提にしているのですが、ZynqMP-FPGA-Linux で提供している Debian GNU/Linux でも動かしてみたいと思います。

この記事では、XRT をソースコードからビルドして Debian パッケージを作るまでを説明します。



なお、ビルド済みの Debian Package は github で公開しています。ビルドする環境を構築するのも大変だしビルドする時間も１〜２時間かかるので、面倒な人はこちらからダウンロードしてください。

* https://github.com/ikwzm/ZynqMP-FPGA-XRT

  * xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb
  * zocl-dkms_2.6.0_arm64.deb



また、インストールには次の記事を参照してください。

* [『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)【未完】』@Qiita](https://qiita.com/ikwzm/items/2d2dc2e97af243c970cb)


## 注意


  __現時点(2020年3月23日)では、一応インストールは出来るものの、まだ動作していません。この記事はあくまでもトライアルの防備録です。__  


# XRT のビルド



## ビルド環境


XRT を UltraZed/Ultra96/Ultra96-V2 向けにビルドするのは少し面倒です。XRT のビルドには Ubuntu や CentOS などの Linux ディストリビューションが必要です。ビルドには色々な開発ツールがインストールされていなければなりません。さらに Debian Package を作るためか、PC をホストにして ARM64 用にクロスコンパイルするのがとても面倒です。

そこで、 Ultra96-V2 に Ubuntu 18.04 を動かして、その上でセルフビルドします。

Ultra96-V2 用の Ubuntu 18.04 は以下の URL で公開しています。

* https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu18.04-Ultra96




## XRT のダウンロード


以下の URL より XRT のソースコードをダウンロードします。

* https://github.com/Xilinx/XRT


```console
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$
```




XRT を Ultra96/Ultra96-V2 用にビルドするためにはいくつかファイルを修正します。ですので、https://github.com/Xilinx/XRT を直接 clone するよりも、fork したほうが良いでしょう。




## XRT の変更


XRT のビルド用ファイルにいくつかの修正をしますので、ブランチを作成します。


```console
fpga@ubuntu-fpga:~/work/XRT$ git checkout -b 2019.2_Ultra96
Switched to a new branch '2019.2_Ultra96'
```







### パッケージファイル名を変更


オリジナルの XRT では、ビルドした Debian Package の名前は xrt_202010.2.6.0_18.04-arm64-xrt.deb になりますが、Ubuntu 用のパッケージであることを明示するためにxrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb にします。


```console
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(-)
```





### 依存する Debian Package のバージョンの上限を撤廃


オリジナルでは、ビルドした Debian Package が依存する Packageは src/CMake/cpackLin.cmake で次のように設定されています。


```Makefile: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 ")
```




ビルドした Debian Package が依存する Package のうち、libboost-dev、libboost-filesystem-dev、libc6 のバージョンに上限が設定されています。これだと、インストールするディストリビューションの制約が強すぎてインストールに失敗することがあります。例えば、この Debian Package を Debian10 にインストールを試みると失敗します。

そこで、後で問題になるかもしれませんが、次のように cpackLin.cmake を修正してバージョンの上限を撤廃します。


```console
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(-)
```







## ビルドに必要な Debian Package をインストール


ビルドに必要なパッケージをインストールします。幸い XRT には、ビルドに必要なパッケージをインストールするスクリプトが用意されています。

./src/runtime_src/tools/scripts/xrtdeps.sh を super user 権限で実行すると、apt プログラムにより足りない Debian Package がインストールされます。


```console
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
	:
(中略)
	:
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 ディレクトリに移動して、そこにある build.sh を実行することで、ビルドが開始されます。Ultra96/Ultra96-V2 だとけっこう時間がかかります。私の環境では１〜２時間ほどかかりました。


```console
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
	:
(後略)
	:
fpga@ubuntu-fpga:~/work/XRT/build$ 
```




ビルドが終了すると、build/Release ディレクトリの下に Debian Package が出来ています。


```console
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
```




このうち Ultra96/Ultra96-V2 に必要な Debian Package は、Release/xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb です。




# zocl のビルド


前章でビルドした xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb には zocl が含まれていません(zocl は Fig.1 XRT Software Stack を参照)。zocl は Ultra96/Ultra96-V2 などの Edge Device 用の Linux カーネルモジュールです。

そこでこの章では zocl の Debian Package をビルドする方法を説明します。ここでは dkms を使ってビルドします。




## ソースディレクトリの生成


まず、/usr/src/ の下に zocl-2.6.0 というディレクトリを作ります。zocl はカーネルモジュールの名前、2.6.0 は XRT のバージョン番号です。


```console
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
```





## ソースファイルの準備


zocl のソースコードは XRT の src/runtime_src/core/edge/drm/zocl にあります。さらに他のディレクトリにあるいくつかのヘッダファイルも必要です。これらのファイルを前節で用意したディレクトリにコピーします。


```console
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/

```





## ビルド用ツールのインストール


ビルドするためには次のツールがインストールされていなければなりません。

  * dkms
  * debhelper
  * fakeroot


## dkms.conf の作成


次のような /usr/src/zocl-2.6.0/dkms.conf を作成します。


```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"
```





## dkms に追加


dkms に zocl-2.6.0 を追加します。


```console
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.
```





## カーネルモジュールのビルド


試しに dkms を使ってカーネルモジュールをビルドしてみて、成功することを確認します。


```console
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.
```





## Debian src package のビルド



```console
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...
```




ここでビルドした Debian Package は /var/lib/dkms/zocl/2.6.0/dsc にあります。

  * /var/lib/dkms/zocl/2.6.0/dsc/zocl-dkms_2.6.0.dsc
  * /var/lib/dkms/zocl/2.6.0/dsc/zocl-dkms_2.6.0_source.changes
  * /var/lib/dkms/zocl/2.6.0/dsc/zocl-dkms_2.6.0_tar.gz




## Debian binary package のビルド



```console
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...
```




ここでビルドした Debian Package は /var/lib/dkms/zocl/2.6.0/deb にあります。

  * /var/lib/dkms/zocl/2.6.0/deb/zocl-dkms_2.6.0_arm64.deb


## Debian Package のコピー


前節でビルドした Debian Package をコピーします。


```console
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/* .
```





## 後始末


ビルドした Debian Package をインストールするためには、一度、dkms から zocl を削除して、Debian Package と競合しないようにする必要があります。


```console
fpga@ubuntu-fpga:~/work/XRT/build$ sudo rm -r /var/lib/dkms/zocl/
```







# 参考


* https://github.com/Xilinx/XRT
* https://github.com/ikwzm/ZynqMP-FPGA-Linux
* https://github.com/ikwzm/ZynqMP-FPGA-XRT
* [『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)【未完】』@Qiita](https://qiita.com/ikwzm/items/2d2dc2e97af243c970cb)



[『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(概要編)』@Qiita]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(概要編)』@Qiita"
[『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)』@Qiita]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)』@Qiita"
[『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)』@Qiita]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)』@Qiita"