1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Zynq® UltraScale+™ MPSoC PetaLinux®でQSPI起動データの作成(前編)

TECHブログ

Zynq® UltraScale+™ MPSoC PetaLinux®でQSPI起動データの作成(前編)

Zynq® UltraScale+™ MPSoC PetaLinux®でQSPI起動データの作成(前編)

皆さん、こんにちは。

AMD ザイリンクス社 Zynq® UltraScale+™ MPSoCのPetaLinuxをBOOTするのは、JTAG、SD、QSPI、eMMC、TFTPなど数種類の方法があります。

2回にわたり、QSPIの書き込みデータの作成方法を紹介したいと思います。

 

前提条件

Vivado®のFPGA設計方法およびPetaLinuxのBuild方法はここでは割愛し、QSPIのデバイスツリーの追加方法とQSPI書き込み用データの生成手順を説明します。


目次

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データの書き込み方法を紹介したいと思います。

 

お問い合わせ

このブログのシリーズ

関連ブログ