Vivado fsbl build batchmode①

XSDKを毎回起動するのは手間であるので自動でビルドしたいと思うのは当然である。

検索すると以下のものがとても参考になる。
Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト(hsi編)

ここにfsblを編集したものをビルドするということを想定して少し編集する。

環境準備

Windows
Vivado 2017.3(とそのSDK)
Bash on Windows

aptでgcc-arm-none-eabiをインストールしておく。

D:\Xilinx\SDK\2017.3\bin

WindowsのPATHに追加しておく。

前提

プロジェクトがある。
u-boot.elfがある。
bootbin.bifを作っておく。

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
	[bootloader].\fsbl.elf
	..\..\desing_1_wrapper.bit
	.\u-boot.elf
}


VivadoからHardware Exportする。(include bitstream)
コレ自体もtclでできる。
hdfが[project_name].sdkに吐き出される。

f:id:katakanan:20180604012331p:plain
こうなっている。

Scriptの準備(とりあえず手動でコマンド確かめる)

xprがあるところに、
参考サイトのtclを少しだけ変更したtclを書く


が、SDK上でnew applicationからfsblを作成する手順に相当する。

ここに -compileオプションをつけると作成と同時にビルドし始めるが
今回はしない。
修正したfsbl_hooks.cなどをfsblプロジェクトにコピーする行

これを実行すると
f:id:katakanan:20180604010302p:plain
となる。

まずはzynq_fsbl_bsp内で依存するライブラリをビルドする。

$ make -C ./ all

その後、fsblに戻って、再びmakeする

$ make

すると、executable.elfなるELFができるので
これがGUISDKで行ったときにDebugフォルダ内にできるfsbl.elfなどと同じもの。
elfとu-boot.elfとbootbin.bifを
Releaseに移動しておく。

$ cp ./u-boot.elf ./script_build.sdk/fsbl/Release/
$ cp ./script_build.sdk/fsbl/executable.elf ./script_build.sdk/fsbl/Release/fsbl.elf
$ cp ./bootbin.bif ./script_build.sdk/fsbl/Release/

f:id:katakanan:20180604011907p:plain
あとはここで

$ cmd.exe /c "bootgen.bat -image .\bootbin.bif -arch zynq -o .\BOOT.bin"

そうすると、ReleaseのところにBOOT.binが出来上がる。
bifファイル内のパスはこのbootgen.batを起動するパスに依存している。

あとはこれらをMakefileなどにまとめて
WSL上でmakeすればOKのはず。。

fsblはgenerate_appするたびにfsblを上書きするので、編集したソースコードは別においておいて、
ビルドするときにコピーしてくる方法が良いのではないかと思う。

次回はまとめたものを書く。