UltraZed 向け Debian GNU/Linux (v2018.2版) の構築(イントロ編)


## はじめに

UltraZed-EG スターターキットに Debian GNU/Linux (v2018.2版) を構築する方法について、具体的な方法をいくつかに分けて説明します。

 * __Introduction(この記事)__
 * [Boot Loader](https://qiita.com/ikwzm/items/a0dfef6355cf839ebc08)
   - [Sample FPGA Design](https://qiita.com/ikwzm/items/aae6e17e7d08b089e010)
   - [FSBL   (First Stage Boot Loader)](https://qiita.com/ikwzm/items/a94c79d78b89fc2e31f8)
   - [PMUFW  (Platform Manager Unit Firmware)](https://qiita.com/ikwzm/items/06aeaa22e9b25d21ef88)
   - [BL31   (ARM Trusted Firmware Boot Loader state 3-1)](https://qiita.com/ikwzm/items/4735be0fbdd1e51c7c59)
   - [U-Boot](https://qiita.com/ikwzm/items/2a7006b6c70c8fa397dc)
   - [BOOT.BIN](https://qiita.com/ikwzm/items/d0482bf8bfc7912ff746)
 * [Linux Kernel](https://qiita.com/ikwzm/items/d5417b39c983f8e56af9)
 * [Debian9 Root File System](https://qiita.com/ikwzm/items/a0e88798ed29b30fa003)

この記事では、UltraZed-EG スターターキットに Debian GNU/Linux (v2018.2版) を構築する方法について、その背景などを説明します。

これら記事で構築した UltraZed 向け Debian GNU/Linux の Boot Loader、Linux Kernel、Debian9 Root File System は、次の URL にて公開しています。

 * [https://github.com/ikwzm/ZynqMP-FPGA-Linux](https://github.com/ikwzm/ZynqMP-FPGA-Linux)

また、次の記事でインストール方法を説明しています。

 * [「UltraZed 向け Debian GNU/Linux (v2018.2版) ブートイメージの提供」@Qiita](https://qiita.com/ikwzm/items/6e0506fc161d1da58e9c)

## UltraZed-EG スターターキットとは

UltraZed-EG スターターキットは Xilinx 社の Zynq UltraScale+ MPSoC(XCZU3EG-SFVA625) を搭載した UltraZed-EG-SOM と UltraZed IOキャリアカードで構成された Avnet 社のキットです。詳細は次の URL を参照してください。

 * [UltraZed-EG スターターキット](https://www.avnet.co.jp/kits/avnet/UltraZed-EG-STA.aspx)

## Zynq UltraScale+ MPSoC とは

Zynq UltraScale+ MPSoC は 64bit Quad Core ARM Cortex-A53 およびデュアルコア ARM Cortex-R5 をベースとするプロセッシングシステム(PS)と Xilinx のプログラマブルロジック(PL) UltraScale アーキテクチャを一つのデバイスに組み合わせたものです。これにはオンチップメモリ、マルチポート外部メモリインターフェース、さらに UART、Ethernet、USB などのインターフェースを備えています。詳細は次の URL を参照してください。

 * [Zynq UltraScale+ MPSoC](https://japan.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html)

この記事では Zynq UltraScale+ MPSoC のことを以降 ZynqMP と呼称します。

## 背景

もともと 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 を使えたり、かなり自由に構築することが出来ました。

## 参考

 * [Zynq UltraScale+ MPSoC](https://japan.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html)
 * [Peta Linux ツール](https://japan.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html)
 * [UltraZed-EG スターターキット](https://www.avnet.co.jp/kits/avnet/UltraZed-EG-STA.aspx)
 * [https://github.com/ikwzm/ZynqMP-FPGA-Linux](https://github.com/ikwzm/ZynqMP-FPGA-Linux)
 * [「UltraZed 向け Debian GNU/Linux (v2018.2版) ブートイメージの提供」@Qiita](https://qiita.com/ikwzm/items/6e0506fc161d1da58e9c)