FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

ZedBoard向けYoctoのビルド (2)

続き。ビルドは完了したので、実機で動かすためには何が必要なのかを調査してみる。

必要なのは、 * uImage * core-image-minimal-zedboard-zynq7.tar.gz * zedboard-zynq.dtb * BOOT.BIN

らしい。上の3つは、Yoctoのビルド時に生成されていた。

poky/build/tmp/deploy/images/zedboard-zynq7/

そして、BOOT.BINを作成する必要がある。これ、セミナーのときに聞いてはいたものの、具体的にどうやって作ればいいのかは良く分かっていなかった。 bifファイルというものを作り、ビルドする必要があるらしい。

  • boot.bin
the_ROM_image:
{
    [bootloader] FSBL.elf
    system.bit
    u-boot.elf
}

さて、u-boot.elfは上記のYoctoのビルドディレクトリに生成されているとして、FSBL.elfとsystem.bitはどこから手に入れるかというと、既存のSDKのビルドディレクトリから複製させてもらう。 昔helloWorldのチュートリアルをやったのだった。いろいろ調べると、FSBL.elfを生成するSDKのプロジェクトを作るといいらしい。 という訳で以下のURLを参考に、GUIから作成しようとしたが、うまくいかなかった。具体的には以下のエラーが発生してビルドに失敗した。

5. Zynq SDKでFSBLを作る | yuki-sato.com

ググっても過去に同様の問題にあたった人がいない。ということは設定か何かを間違えているのか。

XilinxWikiに、てっとり早くFSBLを作る方法が書いてある。

Xilinx Wiki - Build FSBL

>mkdir zynq_fsbl
>cd zynq_fsbl
>hsi

****** hsi v2014.4 (64-bit)
  **** SW Build 1071353 on Tue Nov 18 17:18:21 MST 2014
    ** Copyright 1986-2014 Xilinx, Inc. All Rights Reserved.

INFO: [Hsi 55-1698] elapsed time for repository loading 2 seconds

hsiというのはそういうツールらしい。具体的には何だか分からない。

必要なのは以下の2つのコマンドのみ。

hsi% open_hw_design c:/usr/vivado/hello_world/hello_world.sdk/zynq_design_1_wrapper.hdf
hsi% generate_app -hw zynq_design_1_imp -os standalone -proc ps7_cortexa9_0 -app

ちなみに、zynq_design1_1_wrapper.hdf とかは、ZedBoardのチュートリアルをやったときに作ったものを借用した。 以下が全体の画面。

hsi% open_hw_design c:/usr/vivado/hello_world/hello_world.sdk/zynq_design_1_wrapper.hdf
zynq_design_1_imp
hsi% generate_app -hw zynq_design_1_imp -os standalone -proc ps7_cortexa9_0 -app
 zynq_fsbl -compile -sw fsbl -dir zynq_fsbl
"Running Make include in ps7_cortexa9_0/libsrc/bram_v4_0/src"
"Running Make include in ps7_cortexa9_0/libsrc/cpu_cortexa9_v2_1/src"
"Running Make include in ps7_cortexa9_0/libsrc/devcfg_v3_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/dmaps_v2_1/src"
"Running Make include in ps7_cortexa9_0/libsrc/emacps_v2_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/gpio_v4_0/src"
"Running Make include in ps7_cortexa9_0/libsrc/gpiops_v2_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/qspips_v3_1/src"
"Running Make include in ps7_cortexa9_0/libsrc/scugic_v2_1/src"
"Running Make include in ps7_cortexa9_0/libsrc/scutimer_v2_0/src"
"Running Make include in ps7_cortexa9_0/libsrc/scuwdt_v2_0/src"
"Running Make include in ps7_cortexa9_0/libsrc/sdps_v2_3/src"
"Running Make include in ps7_cortexa9_0/libsrc/standalone_v4_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/ttcps_v2_0/src"
"Running Make include in ps7_cortexa9_0/libsrc/uartps_v2_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/usbps_v2_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/xadcps_v2_1/src"
"Running Make include in ps7_cortexa9_0/libsrc/xilffs_v2_2/src"
"Running Make include in ps7_cortexa9_0/libsrc/xilrsa_v1_1/src"
"Running Make libs in ps7_cortexa9_0/libsrc/bram_v4_0/src"
"Compiling bram"
arm-xilinx-eabi-ar: creating ../../../lib/libxil.a
"Running Make libs in ps7_cortexa9_0/libsrc/cpu_cortexa9_v2_1/src"
"Compiling cpu_cortexa9"
"Running Make libs in ps7_cortexa9_0/libsrc/devcfg_v3_2/src"
"Compiling devcfg"
"Running Make libs in ps7_cortexa9_0/libsrc/dmaps_v2_1/src"
"Compiling dmaps"
"Running Make libs in ps7_cortexa9_0/libsrc/emacps_v2_2/src"
"Compiling emacps"
"Running Make libs in ps7_cortexa9_0/libsrc/gpio_v4_0/src"
"Compiling gpio"
"Running Make libs in ps7_cortexa9_0/libsrc/gpiops_v2_2/src"
"Compiling gpiops"
"Running Make libs in ps7_cortexa9_0/libsrc/qspips_v3_1/src"
"Compiling qspips"
"Running Make libs in ps7_cortexa9_0/libsrc/scugic_v2_1/src"
"Compiling scugic"
"Running Make libs in ps7_cortexa9_0/libsrc/scutimer_v2_0/src"
"Compiling scutimer"
"Running Make libs in ps7_cortexa9_0/libsrc/scuwdt_v2_0/src"
"Compiling scuwdt"
"Running Make libs in ps7_cortexa9_0/libsrc/sdps_v2_3/src"
"Compiling sdps"
"Running Make libs in ps7_cortexa9_0/libsrc/standalone_v4_2/src"
"Compiling standalone"
"Running Make libs in ps7_cortexa9_0/libsrc/ttcps_v2_0/src"
"Compiling ttcps"
"Running Make libs in ps7_cortexa9_0/libsrc/uartps_v2_2/src"
"Compiling uartps"
"Running Make libs in ps7_cortexa9_0/libsrc/usbps_v2_2/src"
"Compiling usbps"
"Running Make libs in ps7_cortexa9_0/libsrc/xadcps_v2_1/src"
"Compiling xadcps"
"Running Make libs in ps7_cortexa9_0/libsrc/xilffs_v2_2/src"
"Compiling XilFFs Library"
"Creating archive libxilffs.a"
"Running Make libs in ps7_cortexa9_0/libsrc/xilrsa_v1_1/src"
'Finished building libraries'
arm-xilinx-eabi-gcc   -c fsbl_hooks.c -o fsbl_hooks.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c image_mover.c -o image_mover.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c main.c -o main.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c md5.c -o md5.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c nand.c -o nand.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c nor.c -o nor.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c pcap.c -o pcap.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c ps7_init.c -o ps7_init.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c qspi.c -o qspi.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c rsa.c -o rsa.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c sd.c -o sd.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc   -c fsbl_handoff.S -o fsbl_handoff.o -Izynq_fsbl_bsp/ps7_cortexa9_0/include -I.
arm-xilinx-eabi-gcc -o executable.elf  fsbl_hooks.o  image_mover.o  main.o  md5.
o  nand.o  nor.o  pcap.o  ps7_init.o  qspi.o  rsa.o  sd.o  fsbl_handoff.o   -lrs
a -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilffs,-lxil
,-lgcc,-lc,--end-group -Wl,--start-group,-lrsa,-lxil,-lgcc,-lc,--end-group  -Wl,
--gc-sections -Lzynq_fsbl_bsp/ps7_cortexa9_0/lib -L./ -Tlscript.ld
hsi::generate_app: Time (s): cpu = 00:00:01 ; elapsed = 00:00:17 . Memory (MB):
peak = 85.363 ; gain = 0.000

これを使ってみるとあっさりFSBL.elfを作ることができた。 そして、system.bitはHello Worldの時に作ったZynq_Design_1_wrapper.bitをそのまま利用した (リネームした)。

そして、bootgen を実行することで、BOOT.BINを作成することができた。SDカードにコピーしてダウンロードする。