UltraZed 向け Debian GNU/Linux (v2017.3版) の構築(BOOT.BIN編)

## はじめに

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

 * [Introduction](https://qiita.com/ikwzm/items/a4ebcffdd26ab3e8124d)
 * [Boot Loader](https://qiita.com/ikwzm/items/9d2a76f9665759df58e7)
   - [Sample FPGA Design](https://qiita.com/ikwzm/items/61316ecec2fc68be4c96)
   - [FSBL   (First Stage Boot Loader)](https://qiita.com/ikwzm/items/6c345b0ef7fc397d37bf)
   - [PMUFW  (Platform Manager Unit Firmware)](https://qiita.com/ikwzm/items/9835f591a78e83d6b92b)
   - [BL31   (ARM Trusted Firmware Boot Loader state 3-1)](https://qiita.com/ikwzm/items/6d03b7e5b47721df3ae9)
   - [U-Boot](https://qiita.com/ikwzm/items/27e6ab1517d724b7f2eb)
   - __BOOT.BIN(この記事)__
 * [Linux Kernel](https://qiita.com/ikwzm/items/367f49e9b02102e907d8)
 * [Debian9 Root File System](https://qiita.com/ikwzm/items/a0e88798ed29b30fa003)

この記事では、ZynqMP の Boot Loader である BOOT.BIN の構築に関して説明します。

## 必要な環境

 * Vivado 2017.2
 * Vivado SDK 2017.2

## Boot Loader 構築環境の準備

次の URL から git clone でリポジトリをダウンロードして v2017.3.0 をチェックアウトします。

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

```console
shell$ git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git checkout v2017.3.0
```

## BOOT.BIN を構成するファイル

ZynqMP の Boot Loader は、起動ストレージにある BOOT.BIN です。BOOT.BIN を構築するには以下のファイルが必要です。

 * target/UltraZed-EG-IOCC/
   - build/
     + zynqmp_fsbl.elf  (FSBL)
     + zynqmp_pmufw.elf (PMUFW)
     + bl31.elf         (ARM Trusted Firmware Boot Loader state 3-1)
     + u-boot.elf       (U-Boot)

それぞれのファイルの構築は構築方法を別記事として投稿しているのでそちらを参照してください。

## BOOT.BIN を作るための設定ファイル

BOOT.BIN を作るために、次のような boot.bif ファイルを用意しています。

```bif:target/UltraZed-EG-IOCC/build/boot.bif
the_ROM_image:
{
        [fsbl_config] a53_x64
        [bootloader]                                              zynqmp_fsbl.elf
        [pmufw_image]                                             zynqmp_pmufw.elf
        [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/UltraZed-EG-IOCC/build
shell$ bootgen -arch zynqmp -image boot.bif -w -o ../boot/boot.bin
```

上のコマンドを実行することにより、target/UltraZed-EG-IOCC/boot/boot.bin が生成されます。

## PL の Bitstream File を追加したい場合

前節で生成した BOOT.BIN には PL(Programmable Logic) の Bitstream File が含まれていません。そのため Boot Loader 起動時に PL のコンフィギュレーションは行われません。もし、Boot Loader で PL のコンフィギュレーションを行いたい場合は、次のような boot.bif を用意して BOOT.BIN を作ってください。

```bif:target/UltraZed-EG-IOCC/build/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
}
```

上の例では PL の Bitstream File として design_1_wrapper.bit を指定しています。