はじめに
筆者は Ultra96/Ultra96-V2/KV260(ZynqMP) 向けに Debian GNU/Linux1 と Ubuntu20.042 を提供しています。また、XRT(Xilinx Runtime) はXilinx社が提供する開発環境(Vitis)で開発したプログラムをプラットフォームで動かすための環境です3。
本来なら MPSoC Edge Device 用の XRT は Xilinx が提供する Linux 環境(Petalinux) でしか動きませんが、XRT を Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux と Ubuntu20.04 で動かすための手順を幾つかのパートに分けて説明します。
この記事では XRT を Ultra96/Ultra96-V2/KV260 向け Debian GNU/Linux および Ubuntu 20.04 で動かすために必要な要素について説明します。
注意
この記事で紹介している Debian Package は Xilinx 社の公式なものではありません。
XRT とは
XRT(Xilinx Runtime) は Xilinx社が提供する開発環境(Vitis)で開発したプログラムをプラットフォームで動かすための環境です3。XRT は github で ソースコードが公開されています。
XRT はユーザー空間とカーネルドライバのコンポーネントの組み合わせとして実装されています。下図に XRT のソフトウェアスタックを示します(上のgithub リポジトリ より引用)。
Fig.1 XRT Software Stack
ZynqMP-FPGA-Linux
筆者は github に UltraZed/Ultra96/Ultra96-V2/KV260 のプラットフォームとして Debian GNU/Linux と 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 で公開しています。ビルドが面倒な方はこちらをお使いください。
現在、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