1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. PetaLinux®のflashcp機能を使用したSDカードからQSPIへのBOOTファイル書き込み方法

TECHブログ

PetaLinux®のflashcp機能を使用したSDカードからQSPIへのBOOTファイル書き込み方法

PetaLinux®のflashcp機能を使用したSDカードからQSPIへのBOOTファイル書き込み方法

はじめに

今回は、AMD社のZynq® UltraScale+™ MPSoCのPetaLinux flashcp機能を利用して、SDカードからSTANDALONE BOOTファイルをQSPIへ書き込む方法を紹介します。

この方法のメリットは、「書き込み手順が簡単であること」と、「JTAG経由のQSPI書き込みよりも遥かに速いこと」です。

前提条件

  • Zynq® UltraScale+™ MPSoCのSTANDALONE BOOT用QSPIデータ作成済み
  • 基板にSDカードスロットが存在すること

使用ツール

  • Vivado™ 2022.2
  • PetaLinux® 2022.2

書き込みツールが含めたPETALINUX SD BOOT IMGの作成

XSAファイルを生成

PetaLinux起動用Vivado projectを作成し、XSAファイルを生成します。下図のように書き込み基板に合わせたPS部分(最低限SD、QSPIの設定が必要)を設定します。既存デザインがあれば、既存デザインのPL部分を削除し、PS部分だけを残す方法は一番手軽だと思います。

(出典:AMD社 Vivado™ 2022.2)

Generate Bitstreamでコンパイルした後、File → Export → Export HardwareでXSAファイルを生成します。

(出典:AMD社 Vivado™ 2022.2)

PETALINUX PROJECTを作成

PetaLinuxの環境で以下のコマンドを実行し、XSAファイルを使用してPETALINUX PROJECTを作成します。

左右にスクロールしてご覧ください
$ petalinux-create -t project -n test --template zynqMP
$ cd test
$ petalinux-config --get-hw-description=./ --silentconfig

DEVICE TREE編集

作成したPETALINUX PROJECTのDEVICE TREEを編集します。
/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsiを開いて、以下の内容を追加します。

左右にスクロールしてご覧ください
/include/ "system-conf.dtsi"
/ {
        chosen {
        bootargs = "quiet earlycon console=ttyPS1,115200 clk_ignore_unused root=/dev/ram0 rw";
    };
};

/* SDIO */
&sdhci0 {
    status = "okay";
    disable-wp;
    no-1-8-v;
};

/* SDIO */
&sdhci1 {
    status = "okay";
    disable-wp;
    no-1-8-v;
};

/* QSPI */
&qspi {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";
    is-dual = <1>;
    num-cs = <1>;
    xlnx,fb-clk = <0x1>;
    xlnx,qspi-mode = <0x1>;
    flash0: flash@0 {
        compatible = "jedec,spi-nor";
        spi-tx-bus-width = <1>;
        spi-rx-bus-width = <1>;
        spi-max-frequency = <40000000>;
        reg = <0x0>;
        #address-cells = <1>;
        #size-cells = <1>;
    };
};

BUILD

$ petalinux-build コマンドでBUILDします。

左右にスクロールしてご覧ください
$ petalinux-build

(出典:シリアルコンソール画面)

SD BOOTファイル生成

以下のコマンドを使用して、SD BOOTファイルを生成します。

左右にスクロールしてご覧ください
$ petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --u-boot ./images/linux/u-boot.elf --pmufw ./images/linux/pmufw.elf --fpga ./images/linux/system.bit –force

(出典:シリアルコンソール画面)

BOOT SDの用意

以下のファイルをSDにCOPYし、BOOT SDの用意が完了です。

左右にスクロールしてご覧ください
$ mkdir BootSD
$ cp -f ./images/linux/BOOT.BIN ./BootSD/
$ cp -f ./images/linux/boot.scr ./BootSD/
$ cp -f ./images/linux/image.ub ./BootSD/
#注:
別途用意したQSPI書き込み用のDATAのファイル名を重複しないようにBOOT_QSPI.BINにして、SDに保存します。

SDからQSPIへ書き込み

SDからBOOT

基板をSDBOOTモードに設定し、SDからBOOTします。
Login:名はpetalinuxです。

(出典:シリアルコンソール画面)

#注:
上図は、文字列までが読み取れる解像度ではありませんが、起動時のログ出力のイメージをお伝えするために
掲載しています。

コマンドでQSPIへ書き込み

以下のコマンドでQSPIへ書き込みします。

左右にスクロールしてご覧ください
flashcp -v /run/media/mmcblk1p1/BOOT_QSPI.BIN /dev/mtd0

(出典:シリアルコンソール画面)

すると、権限がないと言われました。(前はこれで書き込めたのに…)
そういえば、PetaLinux2022.1からrootが無効になった話を思い出しました。

改めて$petalinux-config -c rootfs コマンドでImage Features→* debug-tweaksと* auto-loginを有効にします。

左右にスクロールしてご覧ください
$petalinux-config -c rootfs

(出典:シリアルコンソール画面)

BUILD~BOOT SDの用意の流れをもう一度実行し、今度は、ROOTで自動LOGINした画面が表示されました。

(出典:シリアルコンソール画面)

もう一度、以下のコマンドでQSPIへ書き込みします。

左右にスクロールしてご覧ください
flashcp -v /run/media/mmcblk1p1/BOOT_QSPI.BIN /dev/mtd0

(出典:シリアルコンソール画面)

約20秒で書き込み完了しました。

(出典:ストップウォッチツール)

#注:
BOOT_QSPI.BINのサイズにより、QSPIのPARTITIONを調整する必要な場合があります。
調整方法については、別途ブログを掲載する予定です。

参考

Vivado JTAGで書き込みする場合、時間が15min30secかかりました。

(出典:AMD社 Vivado™ 2022.2)

(出典:AMD社 Vivado™ 2022.2)

おわりに

いかがでしたでしょうか。
以上の工程でPetaLinuxのflashcpでQSPI用BOOTデータの書き込みができました。

弊社ではFPGA設計や回路図設計、レイアウト設計、ソフトウェア設計、筐体設計などを受託開発しています。
サービス内容をWEBサイトに掲載していますので、ぜひご覧ください。

設計受託・ODMの概要については
こちら

FPGAの活用に際して設計検討などありましたら、お気軽にお問い合わせください。

FPGAの活用・設計検討の
お問い合わせはこちら

最後までご覧いただきありがとうございました。

関連ブログ