Zynq® UltraScale+™ MPSoC PetaLinux®でQSPI起動データの作成(前編)
皆さん、こんにちは。
AMD ザイリンクス社 Zynq® UltraScale+™ MPSoCのPetaLinuxをBOOTするのは、JTAG、SD、QSPI、eMMC、TFTPなど数種類の方法があります。
2回にわたり、QSPIの書き込みデータの作成方法を紹介したいと思います。
前提条件
Vivado®のFPGA設計方法およびPetaLinuxのBuild方法はここでは割愛し、QSPIのデバイスツリーの追加方法とQSPI書き込み用データの生成手順を説明します。
このブログは「FPGA設計ブログ一覧」の
5. プログラミング(FPGAへの書き込み)の
ひとつです。
目次
Zynq® UltraScale+™ MPSoCブートプロセス
図1 ブートプロセスのサンプル図
出典:UG1228 - Zynq UltraScale+ MPSoC Embedded Design Methodology Guide (v1.0)
https://docs.amd.com/v/u/en-US/ug1228-ultrafast-embedded-design-methodology-guide
(参照:2022/8/18)
ブートフローではPMU、CSUおよびAPU内のソフトウェアシステムがすべて連携してシステムを起動します。実行されるアクションは次のとおりです。
- ・PMUはCSUに制御を渡し、認証が必要かどうかをCSUがチェック
- ・CSUがFSBLをオンチップメモリ(OCM)にロード
- ・APUでFSBLが実行されます。FSBLはRPUでも実行可能
次に、FSBLがユーザーのアプリケーションソフトウェアまたは U-Bootなどの第2段階ブートローダーを起動します。
ブートに必要なファイル
- zynqmp_fsbl.elf (First Stage Boot Loader)
- pmufw.elf (Platform Management Firmware)
- system.bit (Optionally PL (FPGA) bitstream)
- bl31.elf (ARM Trusted Firmware)
- uboot.elf (Second Stage Boot Loader)
- image.ub (Linux binary image)
- system.dtb (Flattened Device Tree)
qspi_boot.bifの作成
上記のファイルPATHを以下のようにqspi_boot.bifファイルに記述し、PetaLinuxのbuild実行フォルダーに保存します。
the_ROM_image:
{
[bootloader, destination_cpu=a53-0] ./images/linux/zynqmp_fsbl.elf
[destination_cpu=pmu] ./images/linux/pmufw.elf
[destination_device=pl] ./images/linux/system.bit
[destination_cpu=a53-0, exception_level=el-3, trustzone] ./images/linux/bl31.elf
[destination_cpu=a53-0] ./images/linux/system.dtb
[destination_cpu=a53-0, exception_level=el-2] ./images/linux/u-boot.elf
[offset=0x01500000, destination_cpu=a53-0] ./images/linux/image.ub
[offset=0x03E80000, destination_cpu=a53-0] ./images/linux/boot.scr
}
出典: qspi_boot.bifファイル
system-user.dtsiの編集
PetaLinuxのbuild環境にある
\project-spec\meta-user\recipes-bsp\device-tree\files\system-user.dtsi
に以下のようにQSPIのdevice treeを追加します。
/* QSPI */
&qspi {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
flash0: flash@0 {
compatible = "jedec,spi-nor";
spi-max-frequency = <40000000>;
reg = <0x0>;
#address-cells = <1>;
#size-cells = <1>;
};
出典: system-user.dtsiファイル
SDのBOOTファイルの生成
build済みのPetaLinuxで
petalinux-package --boot --format BIN --fsbl ./images/linux/zynqmp_fsbl.elf --fpga ./images/linux/*.bit --u-boot=./images/linux/u-boot.elf
を実行し、SDのBOOTファイルを生成します。
[st8proc]$ petalinux-package --boot --format BIN --fsbl ./images/linux/zynqmp_fsbl.elf --fpga ./images/linux/*.bit --u-boot=./images/linux/u-boot.elf
INFO: Sourcing build tools
INFO: Getting system flash information...
INFO: File in BOOT BIN: "/home/share/build/images/linux/zynqmp_fsbl.elf"
INFO: File in BOOT BIN: "/home/share/build/images/linux/pmufw.elf"
INFO: File in BOOT BIN: "/home/share/build/images/linux/system.bit"
INFO: File in BOOT BIN: "/home/share/build/images/linux/bl31.elf"
INFO: File in BOOT BIN: "/home/share/build/images/linux/system.dtb"
INFO: File in BOOT BIN: "/home/share/build/images/linux/u-boot.elf"
INFO: Generating zynqmp binary package BOOT.BIN...
****** Xilinx Bootgen v2020.2
**** Build date : Nov 15 2020-06:11:24
** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.
[INFO] : Bootimage generated successfully
INFO: Binary is ready.
出典: Xilinx PetaLinux コンソール画面
QSPIのBOOTファイルの生成
build済みのPetaLinuxで
petalinux-package --boot --bif qspi_boot.bif --force -o ./images/linux/BOOT_QSPI.BIN
を実行し、QSPIのBOOTファイルを生成します。
[st8proc]$ petalinux-package --boot --bif qspi_boot.bif --force -o ./images/linux/BOOT_QSPI.BIN
INFO: Sourcing build tools
INFO: Generating zynqmp binary package BOOT_QSPI.BIN...
****** Xilinx Bootgen v2020.2
**** Build date : Nov 15 2020-06:11:24
** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.
[INFO] : Bootimage generated successfully
INFO: Binary is ready.
出典: Xilinx PetaLinux コンソール画面
以上で、BOOT_QSPI.BIN が生成されました。
おわりに
いかがでしたでしょうか。
これで、PetaLinuxでQSPI用BOOTデータの生成ができました。
次回はQSPIデータの書き込み方法を紹介したいと思います。
このブログは「FPGA設計ブログ一覧」の
5. プログラミング(FPGAへの書き込み)の
ひとつです。