Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu20.04 で XRT(Xilinx Runtime) を動かす(概要編)







# はじめに


筆者は Ultra96/Ultra96-V2/KV260(ZynqMP) 向けに Debian GNU/Linux[1] と Ubuntu20.04[2] を提供しています。また、XRT(Xilinx Runtime) はXilinx社が提供する開発環境(Vitis)で開発したプログラムをプラットフォームで動かすための環境です[3]。

本来なら MPSoC Edge Device 用の [XRT] は Xilinx が提供する Linux 環境(Petalinux) でしか動きませんが、XRT を Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux と Ubuntu20.04 で動かすための手順を幾つかのパートに分けて説明します。 



*  __概要編(この記事)__  
* ビルド編
  * [XRT 2.11.0 ビルド編]
  * [XRT 2.8.1 ビルド編]
  * [XRT 2.6.0 ビルド編]
* インストール編
  * [XRT 2.11.0 インストール編]
  * [XRT 2.6.0 インストール編]
* [実践編]
* [Vitis編]



この記事では XRT を Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu 20.04 で動かすために必要な要素について説明します。




## 注意


  __この記事で紹介している Debian Package は Xilinx 社の公式なものではありません。__  


# XRT とは


XRT(Xilinx Runtime) は Xilinx社が提供する開発環境(Vitis)で開発したプログラムをプラットフォームで動かすための環境です[3]。XRT は github で ソースコードが公開されています。



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



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




# ZynqMP-FPGA-Linux


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



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



もともと Xilinx は Zynq や ZynqMP で Linux 環境を構築するためのツールとして PetaLinux ツールを提供しています。最初は私も PetaLinux を使って Linux 環境を構築する予定でしたが、どうにもイケてない点が二つありました。

一つ目は、私の環境(Windows7+VMware+Ubuntu 16.04LTS)では、正常にビルド出来なかった事です。何故か途中で(たいてい FSBL か PMUFW) Vivado SDK がヌルポで落ちて失敗します。腹立たしい事にだいたい10回中1回くらい成功するので、何回も同じコマンドを実行することでなんとかビルドできたりするのですが、時間ばっかりかかって精神衛生上良くありません。

二つめは、PetaLinux のコンフィギュレーションが良く判らないことです。PetaLinux は Yocto をベースにしていて、Boot Loader、Linux Kernel、Root File System、Tool Chain を一括管理して構築しています。それはそれで便利なのでしょうが、例えばデバイスツリーにちょっと変更を加えたいとか、Linux Kernel のコンフィギュレーションを少し変えてコンパイルしてみたいとか、Root にツールをインストールしておきたい等、変更＞構築＞実験のサイクルを回すのには時間がかかりすぎる上に、どの設定をいじればいいのか判らないという問題がありました。

結局、PetaLinux は使わずに、Boot Loader、Linux Kernel、Root File System を個別に構築した方が簡単だと判断しました。そのおかげで、Boot Loader(主に U-Boot)や Linux Kernel のコンフィギュレーションを自由で変更出来たり、Root File System に私が良く使っている Debian を使えたり、かなり自由に構築することが出来ました。




# ZynqMP-FPGA-XRT


XRT を ZynqMP-FPGA-Linux  向けにビルドするのは少し面倒で時間がかかります。そこで、ZynqMP-FPGA-Linux 用に XRT(Xilinx Runtime) を Debian パッケージにしたものを github で公開しています。ビルドが面倒な方はこちらをお使いください。



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



現在、XRT のバージョンおよび Linux のディストリビューションごとに別ブランチ/タグが存在します。


## 2021.1_EDGE_0\_Debian_11


* ブランチ: [2021.1_EDGE_0\_Debian_11]
* XRT バージョン:  2.11.0
* Linux ディストリビューション: Debian 11 
* パッケージファイル: xrt_202110.2.11.0_Edge_Debian_11-arm64.deb


## 2021.1_EDGE_0\_Ubuntu_20.04


* ブランチ: [2021.1_EDGE_0\_Ubuntu_20.04]
* XRT バージョン:  2.11.0
* Linux ディストリビューション: Ubuntu 20.04
* パッケージファイル: xrt_202110.2.11.0_Edge_Ubuntu_20.04-arm64.deb


## 2020.2_EDGE_1\_Debian_10


* ブランチ: [2020.2_EDGE_1\_Debian_10]
* XRT バージョン:  2.8.1
* Linux ディストリビューション: Debian 10
* パッケージファイル: xrt_202020.2.8.1_Edge_Debian_10-arm64.deb


## 2020.2_EDGE_1\_Ubuntu_20.04


* ブランチ: [2020.2_EDGE_1\_Ubuntu_20.04]
* XRT バージョン:  2.8.1
* Linux ディストリビューション: Ubuntu 20.04
* パッケージファイル: xrt_202020.2.8.1_Edge_Ubuntu_20.04-arm64.deb


## 2019.2_Ultra96_3


* タグ: [2019.2_Ultra96_3]
* XRT バージョン:  2.6.0
* Linux ディストリビューション: Ubuntu 18.04
* パッケージファイル: xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb


# 参考


* https://github.com/Xilinx/XRT
* https://github.com/ikwzm/ZynqMP-FPGA-XRT
* https://github.com/ikwzm/ZynqMP-FPGA-Linux
* https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04
* [『UltraZed/Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux (v2021.1版) ブートイメージの提供』@Qiita]
* [『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2020.2版) ブートイメージの提供』@Qiita]
* [『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.2版) ブートイメージの提供』@Qiita]


[1]: https://github.com/ikwzm/ZynqMP-FPGA-Linux "https://github.com/ikwzm/ZynqMP-FPGA-Linux"
[2]: https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04 "https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04"
[3]: https://github.com/Xilinx/XRT "https://github.com/Xilinx/XRT"
[ZynqMP-FPGA-Linux]: https://github.com/ikwzm/ZynqMP-FPGA-Linux "https://github.com/ikwzm/ZynqMP-FPGA-Linux"
[ZynqMP-FPGA-Ubuntu20.04]: https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04 "https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04"
[XRT]: https://github.com/Xilinx/XRT "https://github.com/Xilinx/XRT"
[2021.1_EDGE_0\_Debian_11]: https://github.com/ikwzm/ZynqMP-FPGA-XRT/tree/2021.1_EDGE_0_Debian_11
[2021.1_EDGE_0\_Ubuntu_20.04]: https://github.com/ikwzm/ZynqMP-FPGA-XRT/tree/2021.1_EDGE_0_Ubuntu_20.04
[2020.2_EDGE_1\_Debian_10]: https://github.com/ikwzm/ZynqMP-FPGA-XRT/tree/2020.2_EDGE_1_Debian_10
[2020.2_EDGE_1\_Ubuntu_20.04]: https://github.com/ikwzm/ZynqMP-FPGA-XRT/tree/2020.2_EDGE_1_Ubuntu_20.04
[2019.2_Ultra96_3]: https://github.com/ikwzm/ZynqMP-FPGA-XRT/tree/2019.2_Ultra96_3
[概要編]: https://qiita.com/ikwzm/items/0d3a8adfe725cd17f932 "『Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu20.04 で XRT(Xilinx Runtime) を動かす(概要編)』@Qiita"
[XRT 2.11.0 ビルド編]: https://qiita.com/ikwzm/items/ad4ef8a3fe085c80cf32 "『Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu20.04で XRT(Xilinx Runtime) を動かす(2.11.0 ビルド編)』@Qiita"
[XRT 2.8.1 ビルド編]: https://qiita.com/ikwzm/items/765dc4046746d35ef45c "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(2.8.1 ビルド編)』@Qiita"
[XRT 2.6.0 ビルド編]: https://qiita.com/ikwzm/items/d8013ea91125a3fc46aa "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(2.6.0 ビルド編)』@Qiita"
[XRT 2.11.0 インストール編]: https://qiita.com/ikwzm/items/edefadb6f9da45e72301 "『Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu20.04 で XRT(Xilinx Runtime) を動かす(2.11.0 インストール編)』@Qiita"
[XRT 2.6.0 インストール編]: https://qiita.com/ikwzm/items/6612eacc4a0d324a0a68 "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(2.6.0 インストール編)』@Qiita"
[実践編]: https://qiita.com/ikwzm/items/58cfea3f9d0f42840511 "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(実践編)』@Qiita"
[Vitis編]: https://qiita.com/ikwzm/items/e70d8d0e44fe3784a708 "『Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(Vitis編)』@Qiita"
[『UltraZed/Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux (v2021.1版) ブートイメージの提供』@Qiita]: https://qiita.com/ikwzm/items/a9adc5a7329b2eb36895 "『UltraZed/Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux (v2021.1版) ブートイメージの提供』@Qiita"
[『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2020.2版) ブートイメージの提供』@Qiita]: https://qiita.com/ikwzm/items/c7687406e82ab95ac697 "『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2020.2版) ブートイメージの提供』@Qiita"
[『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.2版) ブートイメージの提供』@Qiita]: https://qiita.com/ikwzm/items/92221c5ea6abbd5e991c "『UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.2版) ブートイメージの提供』@Qiita"