1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. 実務に役立つ!Zynq™ UltraScale+™ MPSoC マルチブート・フォールバックの基本と検証

TECHブログ

実務に役立つ!Zynq™ UltraScale+™ MPSoC マルチブート・フォールバックの基本と検証

実務に役立つ!Zynq™ UltraScale+™ MPSoC マルチブート・フォールバックの基本と検証

皆さま、こんにちは!

Zynq™ UltraScale+™ MPSoC でブートを行う際、以下のようなことができれば便利だと思いませんか?

  1. ボード上に実装したスイッチでブートイメージの切り替え
  2. ブートイメージが破損した際に起動するバックアップ用のイメージの実装

実は、1 はマルチブート、2 はフォールバックという機能を使用することで実現可能です。
本ブログでは、そんな便利機能であるマルチブートとフォールバックの概要を説明します。

詳細な内容を記載した資料は、ブログの最後に記載のリンクからダウンロード可能です。
資料内ではZCU104評価ボードを使用した実機確認も行っているため、評価ボードをお持ちの方はすぐにお試しいただけます。

それでは始めましょう!

1. 用語解説

本ブログで登場する単語について解説します。

ゴールデンイメージ
ブートデバイスにあらかじめ用意しておく、正常に起動することが確認できているバックアップ用のイメージです。
起動予定のブートイメージに問題があった場合でも、ゴールデンイメージがあれば復旧が可能となります。
FSBL
FSBL(First Stage Boot Loader)は、MPSoCのブートプロセスにおいて最初に実行されるソフトウェアです。主な役割は、プロセッシングシステム(PS)の初期化、プログラマブルロジック(PL)の構成、次に実行するソフトウェアのロードおよび制御の移行などです。
マルチブートやフォールバックの機能を実現する際、FSBLはマルチブートレジスタに起動対象となるブートイメージのオフセット値を書き込み、その後ソフトウェアリセットを実行します。
FAT32
SDカードやUSBメモリで広く使用されているファイルシステムです。MPSoCでSDカードブートを行う場合、FAT32にフォーマットされたファイルシステムにブートイメージを格納する必要があります。

2. マルチブートとは

ブートイメージを切り替えてブートを行う機能です。
MPSoCは初回起動時に選択されたブートデバイスから、特定の位置(アドレス)やファイル名を検索し、ブートイメージを読み出して起動します。

初回起動時に検索される特定の位置(アドレス)やファイル名を変更できるレジスタが用意されており、これを書き換えることでマルチブート機能を実現することができます。

アドレスやファイル名の指定とソフトウェアリセットは、FSBLに用意されている関数で実行します。ソフトウェアリセットは、レジスタ値を保持した状態で再ブート可能なため、特定条件下で任意のアドレスやファイル名からブートイメージを読み出し実行することが可能です。

2-1. SDカードの場合

最初に起動するBOOT.BINと起動したいブートイメージのファイル名をBOOTXXXX.BINとしてFAT32でフォーマットされたパーティションへ保存する必要があります。XXXXには1~8191までの数字が入ります。

下図の例は、以下のような構成です。

マルチブート制御用のイメージ BOOT.BIN
切り替え対象イメージ BOOT0001.BIN、BOOT0002.BIN
ゴールデンイメージ BOOT0003.BIN
SDカードマルチブートイメージ図。BOOT.BINからBOOT0003.BINまでのファイル配置を示す。
図1. SDカードのマルチブートイメージ図

電源投入時には必ずBOOT.BINが起動し、BOOT.BINに含まれるFSBLによって、任意に選択したブートイメージを起動することができます。例えばFSBLの関数に設定された数値が2の場合、BOOT0002.BINでMPSoCがブートします。

2-2. QSPIフラッシュの場合

電源投入時、QSPIフラッシュのアドレス 0x0 に格納されているブートイメージが必ず起動します。そのため、複数のブートイメージから選択して起動させたい場合は、QSPIフラッシュの先頭アドレス(0x0)に、マルチブート制御用のイメージを格納します。

下図の例は、以下のような構成です。

マルチブート制御用のイメージ Image 1
切り替え対象イメージ Image 2、Image 3
ゴールデンイメージ Image 4
QSPIフラッシュのマルチブートイメージ図。Image1からImage4までのアドレス配置を示す。
図2. QSPIフラッシュのマルチブートイメージ図

マルチブートで起動するブートイメージは、電源投入時に起動するFSBLに設定した数値によって決定されます。具体的には、「設定値 × 32KB(0x8000)」に格納されているブートイメージでブートします。例えば、0x20000 に格納されているブートイメージでブートしたい場合、FSBLに設定する数値は(0x20000 ÷ 0x8000 =)0x4 となります。

3. フォールバックとは

ブートイメージが見つからない、ブート中のイメージでエラーなどの問題が発生した場合に、ブートデバイス内の他のブートイメージを検索する機能です。

検索したブートデバイス内に有効なブートイメージがあった場合、そのブートイメージを使用してブートを開始します。ブートデバイスごとに検索範囲が決められており、探索限界に達するとロックダウンとなり機能を停止します。

表1. 各ブートデバイスのブートイメージの検索範囲
各ブートデバイスのブートイメージの検索範囲表。各ブートデバイスの検索容量とファイル数を示す。

3-1. SDカードの場合

下図の例は、以下のような構成です。

破損したブートイメージ BOOT.BIN、BOOT0001.BIN、BOOT0002.BIN
ゴールデンイメージ BOOT0003.BIN
SDカードのフォールバックイメージ図。破損したBOOT.BIN、BOOT0001.BIN、BOOT0002.BINからBOOT0003.BINへのフォールバック流れを示す。
図3. SDカードのフォールバックイメージ図

はじめにBOOT.BINが検索されますが、ファイルが見つからない、破損している場合は、BOOT0001.BINを検索、同じような状況であればBOOT0002.BINを検索といった形で、検索するブートイメージ名を 1 ずつインクリメントします。すべて見つからない、破損しているようであれば、ゴールデンイメージのBOOT0003.BINが起動します。

ゴールデンイメージのファイル名は、一番大きい数字にする必要があり、必ず起動できるものを保持する必要があります。また、リモートアップデートなどで書き換えをしないように注意してください。アップデートの失敗など、他のイメージで問題があったとしても、ゴールデンが起動することで、システムとして停止することを防ぐ目的に使用されることもあります。

3-2. QSPIフラッシュの場合

はじめに 0x0 に格納されているブートイメージが検索され、ブートヘッダーが見つからない、破損している場合はフォールバックが実行されます。フォールバックが実行されるとアドレスを 32KB(0x8000)ずつインクリメントし、次のブートイメージを検索します。

下図の例は、以下のような構成です。

破損したブートイメージ Image 1、Image 2、Image 3
ゴールデンイメージ Image 4
QSPIフラッシュのフォールバックイメージ図。破損したImage 1、Image 2、Image 3からImage 4へのフォールバック流れを示す。
図4. QSPIフラッシュのフォールバックのイメージ図

2回目、4回目のインクリメントでImage 2、Image 3がありますが、破損しているため再度フォールバックを実施します。6回目のインクリメントでゴールデンイメージのImage 4が起動します。

4. 実機確認概要

以下のようなイメージで、SDカードでのマルチブート、フォールバックを実機で確認します。

基板上のディップスイッチでBOOT0001.bin, BOOT0002.binのどちらを起動するか決定します。最初にBOOT.bin内のFSBLが起動し、ディップスイッチの値を読み取り、マルチブートレジスタを書き換えます。BOOT0001.binはアプリケーションが起動しますが、BOOT0002.binは破損させたブートイメージのため、フォールバックが実行されゴールデンイメージであるBOOT0005.binが起動します。

5. 資料の実行環境

本ブログの内容は、以下の環境で実機確認を行っています。

表2. 実行環境
Host PC CPU : AMD Ryzen™ 9 7950X
OS : Ubuntu 22.04 LTS
評価ボード ZCU104
AMD Tools Vivado™ 2023.1
Vitis™ 2023.1
PetaLinux 2023.1

6. 資料ダウンロード

本ブログでご紹介した内容の詳細な説明や、ZCU104評価ボードを使用した実機確認手順について確認されたい場合は、以下より資料をダウンロード可能です。

  資料をダウンロードする

7. まとめ

いかがでしたでしょうか。
今回はマルチブート・フォールバックの概要を紹介しました。

マルチブート機能を利用することで、ユーザーは任意のブートイメージを選択して起動できます。これにより、異なる動作モードへの切り替えなどが容易になります。

また、フォールバック機能によりブートイメージが破損している場合でも、システムは自動的に次の有効なイメージを検索して起動します。これにより、システムの信頼性と可用性が向上します。

本ブログの情報が、お客様の役に立てれば幸いです。
最後まで閲覧いただき、ありがとうございました!

関連ブログ