普段はu-bootのSPLを使用してBOOT.BINを作成しているので、そう滅多なことではFSBLを作成する機会がないんだけど、Zynq UltraScale+でubootからSPLを作成して、BOOT.BINを生成すると起動できるイメージができなかったので久々にFSBLを作成した。
まずはVivadoで「File」→「Export」→「Export Hardware...」でHDF(Hardware Design File)を出力する。
Vivadoプロジェクトディレクトリの配下に"project名.sdk"というディレクトリが作成され、"ブロックデザイン名.hdf"というファイルが出来上がっている。
次に次のようにtclファイル(build_fsbl.tcl)を作成する。
set hwdsgn [open_hw_design "デザイン名.hdf"]
# ZynqMP FSBL
generate_app -hw $hwdsgn -os standalone -proc psu_cortexa53_0 -app zynqmp_fsbl -compile -dir zynqmp_fsbl
exec cp zynqmp_fsbl/executable.elf ./zynqmp_fsbl.elf
tclファイルができたら次のように実行する。
$ cd project名.sdk
$ source /opt/Xilinx/SDK/2016.4/settings64.sh
$ hsi -mode tcl -source build_fsbl.tcl
そうすると、"project名.sdk"に"zynq_fsbl.elf"が生成されている。
hsiはHardware Software Interfaceの略で、Xilinxが用意しているHardwareリソースからSoftwareを生成するサポートアプリである。
generate_appを実行するとHDFからBSP(Board Support Package)を生成し、指定したアプリケーションを生成する。
ビルドしたアプリケーションは"executable.elf"として生成される。
tclファイル内で"zynqmp-fsbl.elf"にしているのは単にこの"executbale.elf"をコピーしているだけに過ぎない。
もし、FSBLに手を加えたい場合であれば、上記のtclファイルの場合、zynqmp_fsblにファイルが展開されているので修正してzynqmp_fsblのディレクトリで再度、makeコマンドを実行することで"executbale.elf"が生成される。