はじめに
Ultra96 に Debian GNU/Linux (v2018.2版) を構築する方法について、具体的な方法をいくつかに分けて説明します。
この記事では、ZynqMP の Boot Loader である BOOT.BIN の構築に関して説明します。
必要な環境
- Vivado 2018.2
- Vivado SDK 2018.2
Boot Loader 構築環境の準備
次の URL から git clone でリポジトリをダウンロードして v2018.2.1 をチェックアウトします。
shell$ git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git checkout v2018.2.1
BOOT.BIN を構成するファイル
ZynqMP の Boot Loader は、起動ストレージにある BOOT.BIN です。BOOT.BIN を構築するには以下のファイルが必要です。
- target/Ultra96/
- build-v2018.2/
- boot.bif (Boot Image Format file)
- zynqmp_fsbl.elf (FSBL)
- zynqmp_pmufw.elf (PMUFW)
- bl31.elf (ARM Trusted Firmware Boot Loader state 3-1)
- u-boot.elf (U-Boot)
- design_1_wrapper.bit (PL-Bitstream)
- build-v2018.2/
それぞれのファイルの構築は構築方法を別記事として投稿しているのでそちらを参照してください。
BOOT.BIN を作るための設定ファイル
BOOT.BIN を作るために、次のような boot.bif ファイルを用意しています。
the_ROM_image:
{
[fsbl_config] a53_x64
[bootloader] zynqmp_fsbl.elf
[pmufw_image] zynqmp_pmufw.elf
[destination_device=pl] design_1_wrapper.bit
[destination_cpu=a53-0, exception_level=el-3, trustzone] bl31.elf
[destination_cpu=a53-0, exception_level=el-2] u-boot.elf
}
BOOT.BIN の構築
Vivado に含まれている bootgen コマンドを使って BOOT.BIN を作ります。-arch zynqmp
でアーキテクチャを、-image boot.bif
で前節で説明した boot.bif を指定します。
shell$ cd target/Ultra96/build-v2018.2
shell$ bootgen -arch zynqmp -image boot.bif -w -o ../boot/boot.bin
上のコマンドを実行することにより、target/Ultra96/boot/boot.bin が生成されます。
補足
UltraZed の場合は PL-Bitstream を boot.bin に含みませんでした。そのため boot.bin のファイルサイズも 1MByte 程度で済みました(下記参照)。
- [「UltraZed 向け Debian GNU/Linux (v2018.2版) の構築(BOOT.BIN編)」@Qiita] (https://qiita.com/ikwzm/items/d0482bf8bfc7912ff746)
しかし Ultra96 では PL-Bitstream を boot.bin に含むことにしました。そのため boot.bin のファイルサイズが 6MByte 程度と大きくなってしまいました。
これは Linux が起動した際に Bluetooth が使えるようにするためです。Ultra96 では Bluetooth を使うために PS の UART0 の CTS と RTS を PL 側の I/O ピンに接続する必要があります。Linux を起動した際に Bluetooth が使えるためには PL 側ではすでに CTS と RTS が接続された状態でなければなりません。そのため Sample Design の PL-Bitstream を boot.bin に含めて FSBL で PL をプログラムするようにしています。
注意: 2018年10月28日現在、Bluetooth と GPIO の動作確認が済んでいません。U-Boot と Linux が起動出来ることだけ確認しています。ご了承ください。