ブート イメージ レイアウト

このセクションでは、各アーキテクチャのブート イメージのフォーマットについて説明します。

ブート イメージをビルドするには、次の手順を実行します。

  1. BIF ファイルを作成します。
  2. Bootgen 実行ファイルを実行してバイナリ ファイルを作成します。
    注記: Quick Emulator (QEMU) では、バイナリ ファイルをブート デバイスに対応するイメージ フォーマットに変換する必要があります。

各デバイスには、それぞれのブート イメージを生成する特定フォーマットのファイルが必要です。次のトピックでは、各デバイスに必要なブート ヘッダー、イメージ ヘッダー、パーティション ヘッダー、初期化、および認証証明ヘッダーのフォーマットについて説明します。

Zynq-7000 SoC のブートおよびコンフィギュレーション

このセクションでは、Zynq®-7000 SoC のブートおよびコンフィギュレーション シーケンスについて説明します。使用可能な FSBL (第 1 段階ブートローダー) 構造の詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585) を参照してください。

Zynq-7000 SoC の bootROM

bootROM は、アプリケーション プロセッシング ユニット (APU) で実行する最初のソフトウェアです。bootROM は最初の Cortex™ プロセッサ A9-0 で実行され、同時に 2 番目のプロセッサである Cortex A9-1 によって WFE (Wait for Event) 命令が実行されます。bootROM の主なタスクは、システムをコンフィギュレーションし、FSBL をブート デバイスからオンチップ メモリ (OCM) へコピーした後、OCM へコードの実行を分岐します。

オプションとして、非セキュアな環境では、FSBL を Quad-SPI または NOR デバイスから直接実行できます。マスター ブート デバイスは、1 つまたは複数のブート イメージを保持します。1 つのブート イメージは、ブート ヘッダーと FSBL (第 1 段階ブートローダー) で構成されます。ブート イメージにはさらに、プログラマブル ロジック (PL)、SSBL (第 2 段階ブートローダー)、およびエンベデッド オペレーティング システムとアプリケーションが含まれます。ただし、bootROM はこれらにアクセスできません。bootROM の実行フローは、ブート モードのピン ストラップの設定、ブート ヘッダー、およびシステムによって影響を受けます。bootROM は、暗号化された FSBL を使用するセキュアな環境または非セキュアな環境のいずれでも実行できます。サポートされるブート モードは次のとおりです。

  • 開発およびデバッグのプライマリ モードは JTAG です。
  • デバイスのブートには、NAND、パラレル NOR、シリアル NOR (Quad-SPI)、およびセキュア デジタル (SD) フラッシュ メモリが使用されます。これらのブート モードの詳細は、『Zynq SoC テクニカル リファレンス マニュアル』 (UG585) を参照してください。一般的なブートおよびコンフィギュレーションに関する質問および回答は、Zynq-7000 - ブートおよびコンフィギュレーション (AR#52538) を参照してください。

Zynq-7000 SoC のブート イメージ レイアウト

次の図は、Zynq®-7000 SoC ブート イメージに含まれるコンポーネントを示しています。
1: ブート ヘッダー

Zynq-7000 SoC のブート ヘッダー

Bootgen は、ブート イメージの先頭にブート ヘッダーを付加します。ブート ヘッダー テーブルは、FSBL などのプライマリ ブートローダーのブートに関連する情報を含む構造となっています。ブート イメージ全体にこのような構造が 1 つだけあります。bootROM はこのテーブルを解析して、FSBL がフラッシュのどこに格納されていて、OCM のどこにロードする必要があるかを判断します。一部の暗号化および認証に関連するパラメーターもここに格納されます。その他のブート イメージ コンポーネントは次のとおりです。

さらに、ブート ヘッダーには Zynq-7000 SoC のレジスタ初期化テーブル が含まれます。bootROM は、ブート ヘッダーを使用して、FSBL の位置と長さ、および FSBL に制御を渡す前にシステムを初期化するために必要なその他の情報を検索します。

次の表に、Zynq®-7000 SoC ブート ヘッダーのアドレス オフセット、パラメーター、および説明を示します。

表 1. Zynq-7000 SoC ブート ヘッダー
アドレス オフセット パラメーター 説明
0x00 ~ 0x1F Arm® ベクター テーブル Bootgen によってダミー ベクター テーブルで埋められます (Arm オペ コード 0xEAFFFFFE、初期化されていないベクターの検出を目的とした分岐-セルフ間の無限ループ)。
0x20 幅検出ワード これは、QSPI フラッシュがシングル/デュアル スタック モードであるか、デュアル パラレル モードであるかを識別するために必要です。これは、リトル エンディアン フォーマットの 0xAA995566 です。
0x24 ヘッダー署名 バイト オーダーで 4 バイトの「X」、「N」、「L」、「X」を含みます。これは、リトル エンディアン フォーマットの 0x584c4e58 です。
0x28 キー ソース デバイス内の暗号化キーの場所:
  • 0x3A5C3C5A: BBRAM に格納されている暗号化キー。
  • 0xA5C3C5A3: eFUSE に格納されている暗号化キー。
  • 0x00000000: 暗号化なし。
0x2C ヘッダー バージョン 0x01010000
0x30 ソース オフセット このイメージ ファイル内の FSBL (ブートローダー) の場所。
0x34 FSBL イメージの長さ 復号化後の FSBL の長さ。
0x38 FSBL ロード アドレス (RAM) デスティネーション RAM アドレス。このアドレスに FSBL をコピーします。
0x3C FSBL 実行アドレス (RAM) FSBL 実行のエントリ ベクター。
0x40 FSBL イメージ全体の長さ 暗号化後の FSBL の合計サイズ、認証証明 (ある場合) およびパディングを含みます。
0x44 QSPI コンフィギュレーション ワード 0x00000001 にハードコードされます。
0x48 ブート ヘッダー チェックサム オフセット 0x200x44 のワードの合計。ワードはリトル エンディアンと見なされます。
0x4c ~ 0x97 ユーザー定義フィールド 76 バイト
0x98 イメージ ヘッダー テーブル オフセット イメージ ヘッダー テーブルを指すポインター
0x9C パーティション ヘッダー テーブル オフセット パーティション ヘッダー テーブルを指すポインター

Zynq-7000 SoC のレジスタ初期化テーブル

Bootgen のレジスタ初期化テーブルの構造は、MIO マルチプレクサーおよびフラッシュ クロックの PS レジスタを初期化するために使用する 256 のアドレスと値のペアです。詳細は、レジスタ初期化ペアおよび INT ファイルの属性についてを参照してください。

表 2. Zynq-7000 SoC のレジスタ初期化テーブル
アドレス オフセット パラメーター 説明
0xA0 ~ 0x89C レジスタ初期化ペア: <address>:<value>: アドレス = 0xFFFFFFFF の場合、そのレジスタはスキップされ、値は無視されます。

未使用のレジスタ フィールドはすべて、 Address=0xFFFFFFFF および value = 0x0 に設定する必要があります。

Zynq-7000 SoC イメージ ヘッダー テーブル

Bootgen は、ELF ファイル、ビットストリーム、データ ファイルなどからデータを抽出してブート イメージを作成します。データが抽出されるこれらのファイルは、イメージと呼ばれます。各イメージには、1 つまたは複数のパーティションを含めることができます。イメージ ヘッダー テーブルは、これらすべてのイメージに共通する情報と、イメージの数、ブート イメージに含まれるパーティション、およびほかのヘッダー テーブルへのポインターといった情報を含む構造です。次の表に、Zynq®-7000 SoC デバイスのアドレス オフセット、パラメーター、および説明を示します。

表 3. Zynq-7000 SoC のイメージ ヘッダー テーブル
アドレス オフセット パラメーター 説明
0x00 バージョン 0x01010000: 使用可能なフィールドは 0x00x40x80xC、およびパディングです。

0x01020000: 0x10 フィールドが追加されます。

0x04 イメージ ヘッダー数 イメージ ヘッダーの数を指定します。
0x08 第一パーティション ヘッダー オフセット 第一パーティション ヘッダーを指すポインター。(ワード オフセット)。
0x0C 第一イメージ ヘッダー オフセット 第一イメージ ヘッダーを指すポインター。(ワード オフセット)。
0x10 ヘッダー認証証明オフセット 認証証明ヘッダーを指すポインター。(ワード オフセット)。
0x14 Reserved デフォルトは 0xFFFFFFFF です。

Zynq-7000 SoC のイメージ ヘッダー

イメージ ヘッダーは、ELF ファイル、ビットストリーム、データ ファイルなど、各イメージに関連する情報を含む構造の配列です。各イメージに複数のパーティションを含めることができます。たとえば、ELF には複数のロード可能なセクションを含めることができ、それぞれがブート イメージ内にパーティションを形成します。テーブルには、イメージに関連するパーティション数の情報も含まれます。次の表に、Zynq®-7000 SoC デバイスのアドレス オフセット、パラメーター、および説明を示します。

表 4. Zynq-7000 SoC のイメージ ヘッダー
アドレス オフセット パラメーター 説明
0x00 次のイメージ ヘッダー。 次のイメージ ヘッダーにリンクします。最後のイメージ ヘッダーの場合は 0 となります (ワード オフセット)。
0x04 対応するパーティション ヘッダー。 最初に関連付けられたパーティション ヘッダーにリンクします (ワード オフセット)。
0x08 予約 常に 0。
0x0C パーティション数 このイメージに関連付けられたパーティションの数。
0x10 ~ N イメージの名前 ビッグエンディアン順に圧縮されます。文字列を再構築するため、一度に 4 バイトを解凍し、順序を逆にして連結します。たとえば、文字列「FSBL10.ELF」は 0x10: ‘L’,’B’,’S’,’F’, 0x14: ’E’,’.’,’0’,’1’, 0x18: ’\0’,’\0’,’F’,’L’ のように圧縮されます。

圧縮されたイメージ名は 4 の倍数バイトです。

N ストリング ターミネーター (終端名) 0x00000000
N+4 予約 デフォルトで、64 バイト境界まで 0xFFFFFFFF でパディングされます。

Zynq-7000 SoC のパーティション ヘッダー

パーティション ヘッダーは、各パーティションに関連する情報を含む構造の配列です。各パーティション ヘッダー テーブルは、ブートローダーによって解析されます。このテーブルには、パーティション サイズ、フラッシュ内のアドレス、RAM 内のロード アドレス、暗号化/署名などの情報が含まれます。FSBL を含め、各パーティションにこのような構造が 1 つあります。テーブル内の最後の構造は、すべて NULL 値となります (チェックサムを除く)。次の表に、Zynq®-7000 SoC パーティション ヘッダーのオフセット、名前、および説明を示しています。
注記: ロード可能なセクションが 3 つある ELF ファイルには、1 つのイメージ ヘッダーと 3 つのパーティション ヘッダー テーブルが含まれます。
表 5. Zynq-7000 SoC のパーティション ヘッダー
オフセット 名前 説明
0x00 暗号化されたパーティションの長さ 暗号化されたパーティション データの長さ。
0x04 暗号化されていないパーティションの長さ 暗号化されていないデータの長さ。
0x08 合計パーティション ワード長 (認証証明を含む)。Zynq-7000 SoC の認証証明 を参照してください。 合計パーティション ワード長は、パディング付きの暗号化された情報、拡張、および認証の各長さの合計です。
0x0C デスティネーション ロード アドレス。 このパーティションがロードされる RAM アドレス。
0x10 デスティネーション実行アドレス。 実行時のこのパーティションのエントリ ポイント。
0x14 イメージのデータ ワード オフセット ブート イメージの開始に対するパーティション データの位置。
0x18 属性ビット Zynq-7000 SoC のパーティション属性ビット 参照
0x1C セクション数 シングル パーティション内のセクション数。
0x20 チェックサム ワード オフセット ブート イメージ内の該当するチェックサム ワードの位置。
0x24 イメージ ヘッダーのワード オフセット ブート イメージ内の該当するイメージ ヘッダーの位置。
0x28 認証証明ワード オフセット ブート イメージ内の該当する認証証明の位置。
0x2C-0x38 Reserved 予約済み
0x3C ヘッダー チェックサム パーティション ヘッダーの以前のワードの合計値。

Zynq-7000 SoC のパーティション属性ビット

次の表に、Zynq®-7000 SoC デバイスのパーティション ヘッダー テーブルのパーティション属性ビットを示します。

表 6. Zynq-7000 SoC のパーティション属性ビット
ビット フィールド 説明 説明
31:18 予約 不使用
17:16 パーティション オーナー
  • 0: FSBL
  • 1: UBOOT
  • 2、3: 予約
15 RSA 署名の有無
  • 0: RSA 認証証明なし
  • 1: RSA 認証証明あり
14:12 チェックサム タイプ
  • 0: なし
  • 1: MD5
  • 2-7: 予約
11:8 予約 不使用
7:4 デスティネーション デバイス
  • 0: なし
  • 1: PS
  • 2: PL
  • 3: INT
  • 4-15: 予約
3:2 予約 不使用
1:0 予約 不使用

Zynq-7000 SoC の認証証明

認証証明は、パーティションの認証に関連するすべての情報を含む構造です。この構造には、公開キーと、bootROM/FSBL による検証が必要なすべての署名が含まれます。各認証証明には認証ヘッダーがあります。このヘッダーは、キー サイズ、署名に使用するアルゴリズムなどの情報を提供します。認証証明は、認証が有効になっている実際のパーティションに追加されます。認証が有効になっているすべてのパーティションに対して、ヘッダー テーブルも認証する必要があります。ヘッダーテーブル認証証明は、ヘッダー テーブルのコンテンツの最後に追加されます。

Zynq®-7000 SoC は SHA-256 ハッシュ アルゴリズムによる RSA-2048 認証を使用するため、プライマリ キーおよびセカンダリ キーのサイズは 2048 ビットとなります。SHA-256 はセキュア ハッシュ アルゴリズムとして使用されるため、FSBL、パーティション、および認証証明は 512 ビット境界にパディングする必要があります。

次の表に、Zynq®-7000 SoC の認証証明のフォーマットを示します。

表 7. Zynq-7000 SoC の認証証明
認証証明ビット 説明
0x00 認証ヘッダー = 0x0101000。Zynq-7000 SoC の認証証明ヘッダーを参照してください。
0x04 証明のサイズ
0x08 UDF (56 バイト)
0x40 PPK Mod (256 バイト)
0x140 Mod Ext (256 バイト)
0x240 Exponent
0x244 Pad (60 バイト)
0x280 SPK Mod (256 バイト)
0x380 Mod Ext (256 バイト)
0x480 Exponent (4 バイト)
0x484 Pad (60 バイト)
0x4C0 SPK 署名 = RSA-2048 (PSK、パディング || SHA-256(SPK))
0x5C0 FSBL パーティション署名 = RSA-2048 (SSK、SHA-256 (ブート ヘッダー || FSBL パーティション)
0x5C0 その他パーティション署名 = RSA-2048 (SSK、SHA-256 (パーティション || パディング || 認証ヘッダー || PPK || SPK || SPK 署名)

Zynq-7000 SoC の認証証明ヘッダー

次の表に、Zynq®-7000 SoC の認証証明ヘッダーを説明します。
表 8. Zynq-7000 SoC の認証証明ヘッダー
ビット オフセット フィールド名 説明
31:16 予約 0
15:14 認証証明フォーマット 00: PKCS #1 v1.5
13:12 認証証明バージョン 00: 現在の AC
11 PPK キー タイプ 0: ハッシュ キー
10:9 PPK キー ソース 0: eFUSE
8 SPK イネーブル 1: SPK イネーブル
7:4 公開キー強度 0:2048
3:2 ハッシュ アルゴリズム 0: SHA256

Zynq-7000 SoC のブート イメージ ブロック図

次の図は、Zynq®-7000 SoC ブート イメージに含まれるコンポーネントを示しています。
2: Zynq-7000 SoC のブート イメージ ブロック図

Zynq UltraScale+ MPSoC のブートおよびコンフィギュレーション

概要

Zynq® UltraScale+™ MPSoC は、QSPI フラッシュ、SD カード、USB デバイス ファームウェア アップグレード (DFU) ホスト、NAND フラッシュ ドライブなどからのブートをサポートしています。この章では、セキュア モードと非セキュア モードの両方において各種デバイスからのブートアップ プロセスについて説明します。ブート処理はプラットフォーム管理ユニット (PMU) とコンフィギュレーション セキュリティ ユニット (CSU) によって管理および実行されます。

初期ブート時に、次の手順が実行されます。

  • PMU はパワーオン リセット (POR) によってリセット状態から復帰します。
  • PMU は PMU ROM からのコードを実行します。
  • PMU は SYSMON と、ブートに必要な PLL を初期化し、低電力ドメインとフル電力ドメインをクリアして CSU のリセットを開放します。

CSU は、PMU によって開放されると次を実行します。

  • FSBL またはユーザー アプリケーションによって認証が要求されているかを確認します。
  • 認証チェックを実行し、このチェックにパスした場合のみ次へ進みます。そして、イメージに暗号化されたパーティションがあるかどうかをチェックします。
  • 暗号化されたパーティションを検出した場合、CSU は復号化を実行し、FSBL を OCM にロードします。CSU が暗号化されたパーティションを検出した場合、復号化を実行して OCM を初期化し、ブート モードの設定を決定し、FSBL のロードとオプションの PMU ファームウェアのロードを実行します。
  • CSU ROM コードの実行後、FSBL に制御を渡します。FSBL は、PCAP インターフェイス経由でビットストリームで PL をプログラムします。

ここからは、FSBL がシステムを管理します。CSU および PMU の詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版日本語版) で説明します。CSU の詳細は、このリンクから『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137) の「コンフィギュレーション セキュリティ ユニット」を参照してください。

Zynq UltraScale+ MPSoC のブート イメージ

次の図は、Zynq® UltraScale+™ MPSoC のブート イメージを示しています。

3: Zynq UltraScale+ MPSoC のブート イメージ

Zynq UltraScale+ MPSoC のブート ヘッダー

ブート ヘッダーについて

Bootgen は、ブート イメージの先頭にブート ヘッダーを付加します。ブート ヘッダー テーブルは、FSBL などのプライマリ ブートローダーのブートに関連する情報を含む構造となっています。ブート イメージ全体にこのような構造が 1 つだけあります。bootROM はこのテーブルを解析して、FSBL がフラッシュのどこに格納されていて、OCM のどこにロードする必要があるかを判断します。一部の暗号化および認証に関連するパラメーターもここに格納されます。ブート イメージには、次のコンポーネントが含まれます。

bootROM は、ブート ヘッダーを使用して、FSBL の位置と長さ、および FSBL に制御を渡す前にシステムを初期化するために必要なその他の情報を検索します。次の表に、Zynq® UltraScale+™ MPSoC デバイスのアドレス オフセット、パラメーター、および説明を示します。

表 9. Zynq UltraScale+ MPSoC デバイスのブート ヘッダー
アドレス オフセット パラメーター 説明
0x00-0x1F Arm® ベクター テーブル XIP ELF ベクター テーブル:
  • 0xEAFFFFFE: Cortex™-R5F および Cortex A53 (32 ビット) の場合
  • 0x14000000: Cortex A53 (64 ビット) の場合
0x20 幅検出ワード このフィールドは、QSPI の幅検出に使用されます。これは、リトル エンディアン フォーマットの 0xAA995566 です。
0x24 ヘッダー署名 バイト オーダーで 4 バイトの ‘X’,’N’,’L’,’X’ を含みます。これは、リトル エンディアン フォーマットの 0x584c4e58 です。
0x28 キー ソース
  • 0x00000000 (暗号化なし)
  • 0xA5C3C5A5 (eFUSE に格納されているブラック キー)
  • 0xA5C3C5A7 (eFUSE に格納されている難読化キー)
  • 0x3A5C3C5A (BBRAM に格納されているレッド キー)
  • 0xA5C3C5A3 (eFUSE に格納されているレッド キー)
  • 0xA35C7CA5 (ブート ヘッダーに格納されている難読化キー)
  • 0xA3A5C3C5 (ブート ヘッダーに格納されているユーザー キー)
  • 0xA35C7C53 (ブート ヘッダーに格納されているブラック キー)
0x2C FSBL 実行アドレス (RAM) OCM 内の FSBL 実行アドレスまたは XIP ベース アドレス。
ソース オフセット PMUFW がない場合は、FSBL の開始オフセットです。PMUFW がない場合は、FSBLPMUFW の開始です。
0x34 PMU イメージの長さ 元の PMU FW イメージの長さ (バイト)(0~128KB)。
  • サイズ > 0 の場合、PMUFW は FSBL の前に付きます。
  • サイズ = 0 の場合、PMUFW イメージはなしです。
0x38 PMU FW 全体の長さ PMUFW イメージ全体の長さ.(PMUFW 長 + 暗号化オーバーヘッド)
0x3C FSBL イメージの長さ 元の FSBL イメージの長さ (バイト)(0~250KB)。0 の場合、XIP ブート イメージと見なされます。
0x40 FSBL イメージ全体の長さ FSBL イメージの長さ + FSBL イメージの暗号化オーバーヘッド + 認証証明 + 64 バイト アライメント + ハッシュ サイズ (インテグリティ チェック)。
0x44 FSBL イメージ属性 属性ビットを参照してください。
0x48 ブート ヘッダー チェックサム オフセット 0x20 ~ 0x44 のワードの合計。ワードはリトル エンディアンと見なされます。
0x4C-0x68 難読化/ブラック キーの格納 難読化キーまたはブラック キーを格納します。
0x6C シャッター値 32 ビットの PUF_SHUT レジスタの値で、シャッター オフセット時間およびシャッター オープン時間を PUF に設定します。
0x70-0x94 ユーザー定義フィールド (UDF) 40 バイト。
0x98 イメージ ヘッダー テーブル オフセット イメージ ヘッダー テーブルを指すポインター
0x9C パーティション ヘッダー テーブル オフセット パーティション ヘッダーを指すポインター
0xA0-0xA8 セキュア ヘッダー IV ブートローダー パーティションのセキュア ヘッダー用 IV。
0x0AC-0xB4 難読化/ブラック キー IV 難読化キーまたはブラック キーの IV。

Zynq UltraScale+ MPSoC のブート ヘッダー属性ビット

表 10. Zynq UltraScale+ MPSoC のブート ヘッダー属性ビット
フィールド名 ビット オフセット デフォルト 説明
予約済み 31:16 16 0x0 予約。必ず 0。
BHDR RSA 15:14 2 0x0
  • 0x3: PPK ハッシュと SPK ID の検証を除き、ブート イメージの RSA 認証が実行されます。
  • その他すべて: RSA 認証は eFUSE RSA ビットに基づいて決定されます。
予約済み 13:12 2 0x0 なし
CPU 選択 11:10 2 0x0
  • 0x0: R5 シングル。
  • 0x1: A53 シングル 32 ビット
  • 0x2: A53 シングル 64 ビット
  • 0x3: R5 デュアル
ハッシュ処理選択 9:8 2 0x0
  • 0x0、0x1: インテグリティ チェックなし。
  • 0x3: BI インテグリティ チェック用の SHA3。
PUF-HD 7:6 2 0x0
  • 0x3: PUF HD はブート ヘッダーに格納されています。
  • その他すべて: PUF HD は eFUSE に格納されています。
予約済み 5:0 6 0x0 将来使用するために予約。必ず 0。

Zynq UltraScale+ MPSoC のレジスタ初期化テーブル

Bootgen のレジスタ初期化テーブルの構造は、MIO マルチプレクサーおよびフラッシュ クロックの PS レジスタを初期化するために使用する 256 のアドレスと値のペアです。詳細は、レジスタ初期化ペアおよび INT ファイルの属性についてを参照してください。

表 11. Zynq UltraScale+ MPSoC のレジスタ初期化テーブル
アドレス オフセット パラメーター 説明
0xB80x8B4 Register Initialization Pairs: <address>:<value>:

(2048 bytes)

アドレスが 0xFFFFFFFF に設定されている場合、そのレジスタはスキップされ、値は無視されます。未使用のレジスタ フィールドはすべて、アドレス = 0xFFFFFFFF および値 =0x0 に設定する必要があります。

Zynq UltraScale+ MPSoC の PUF ヘルパー データ

PUF はヘルパー データを使用して、デバイスの有効期間中、保証された動作温度および電圧範囲において元の KEK 値を再度作成できます。ヘルパー データは、<syndrome_value><aux_value>、および <chash_value> で構成されます。ヘルパー データは、eFUSE またはブート イメージのいずれかに格納できます。詳細は、puf_fileを参照してください。このリンクから『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版日本語版) の「PUF ヘルパー データ」もあわせて参照してください。
表 12. Zynq UltraScale+ MPSoC の PUF ヘルパー データ
アドレス オフセット パラメーター 説明
0x8B8 ~ 0xEC0 PUF Helper Data (1544 bytes) ブート ヘッダー オフセット 0x44 (ビット 7:6) == 0x3 の場合にのみ有効です。PUF HD が挿入されていない場合、ブート ヘッダーのサイズは 2048 バイトです。PUF ヘッダー データが挿入されている場合、ブート ヘッダーのサイズは 3584 バイトです。PUF HD サイズ = 合計サイズ = 1536 バイトの PUFHD + 4 バイトの CHASH + 2 バイトの AUX + 1 バイト アライメント = 1544 バイト。

Zynq UltraScale+ MPSoC イメージ ヘッダー テーブル

Bootgen は、ELF ファイル、ビットストリーム、データ ファイルなどからデータを抽出してブート イメージを作成します。データが抽出されるこれらのファイルは、イメージと呼ばれます。各イメージには、1 つまたは複数のパーティションを含めることができます。イメージ ヘッダー テーブルは、これらすべてのイメージに共通する情報と、イメージの数、ブート イメージに含まれるパーティション、およびほかのヘッダー テーブルへのポインターといった情報を含む構造です。

表 13. Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー テーブル
アドレス オフセット パラメーター 説明
0x00 Version
  • 0x01010000
  • 0x01020000: 0x10 フィールドが追加されます。
0x04 Count of Image Header イメージ ヘッダーの数を指定します。
0x08 1st Partition Header Offset 第一パーティション ヘッダーを指すポインター (ワード オフセット)。
0x0C 1st Image Offset Header 第一イメージ ヘッダーを指すポインター (ワード オフセット)。
0x10 Header Authentication Certificate ヘッダー認証証明を指すポインター (ワード オフセット)。
0x14 Secondary Boot Device オプションは次のとおりです。
  • 0: 同じブート デバイス
  • 1: QSPI-32
  • 2: QSPI-24
  • 3: NAND
  • 4: SD0
  • 5: SD1
  • 6: SDLS
  • 7: MMC
  • 8: USB
  • 9: ETHERNET
  • 10: PCIE
  • 11: SATA
0x18 ~ 0x38 Padding 予約 (0x0)
0x3C Checksum イメージ ヘッダーの以前のワードすべての合計値。

Zynq UltraScale+ MPSoC のイメージ ヘッダー

イメージ ヘッダーについて

イメージ ヘッダーは、ELF ファイル、ビットストリーム、データ ファイルなど、各イメージに関連する情報を含む構造の配列です。各イメージに複数のパーティションを含めることができます。たとえば、ELF には複数のロード可能なセクションを含めることができ、それぞれがブート イメージ内にパーティションを形成します。テーブルには、イメージに関連するパーティション数の情報も含まれます。次の表に、Zynq® UltraScale+™ MPSoC のアドレス オフセット、パラメーター、および説明を示します。

表 14. Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー
アドレス オフセット パラメーター 説明
0x00 次のイメージ ヘッダー オフセット 次のイメージ ヘッダーにリンクします。最後のイメージ ヘッダーの場合は 0 です (ワード オフセット)。
0x04 対応するパーティション ヘッダー 最初に関連付けられたパーティション ヘッダーにリンクします (ワード オフセット)。
0x08 予約 常に 0。
0x0C パーティション数 実際のパーティション数の値。
0x10 - N イメージの名前 ビッグエンディアン順に圧縮されます。文字列を再構築するため、一度に 4 バイトを解凍し、順序を逆にして連結されます。たとえば、文字列 FSBL10.ELF0x10: ‘L’,’B’,’S’,’F’, 0x14: ’E’,’.’,’0’,’1’, 0x18: ’\0’,’\0’,’F’,’L’ として圧縮されます。圧縮されたイメージ名は 4 の倍数バイトです。
不定 ストリング ターミネーター (終端名) 0x00000
不定 パディング デフォルトで、64 バイト境界まで 0xFFFFFFF でパディングされます。

Zynq UltraScale+ MPSoC のパーティション ヘッダー

パーティション ヘッダーについて

パーティション ヘッダーは、各パーティションに関連する情報を含む構造の配列です。各パーティション ヘッダー テーブルは、ブートローダーによって解析されます。このテーブルには、パーティション サイズ、フラッシュ内のアドレス、RAM 内のロード アドレス、暗号化/署名などの情報が含まれます。FSBL を含め、各パーティションにこのような構造が 1 つあります。テーブル内の最後の構造は、すべて NULL 値となります (チェックサムを除く)。次の表に、Zynq® UltraScale+™ MPSoC のオフセット、名前、および説明を示しています。

表 15. Zynq UltraScale+ MPSoC デバイスのパーティション ヘッダー
オフセット 名前 説明
0x0 暗号化されたパーティション データ ワード長 暗号化されたパーティション データの長さ。
0x04 復号化されていないデータ ワード長 暗号化されていないデータの長さ。
0x08 合計パーティション ワード長 (認証証明を含む)。認証証明を参照。 暗号化、パディング、拡張、認証をすべて合計した長さ。
0x0C 次のパーティション ヘッダー オフセット 次のパーティション ヘッダーの位置 (ワード オフセット)。
0x10 デスティネーション実行アドレス LO ロード後のこのパーティションの実行可能アドレスの下位 32 ビット。
0x14 デスティネーション実行アドレス HI ロード後のこのパーティションの実行可能アドレスの上位 32 ビット。
0x18 デスティネーション ロード アドレス LO このパーティションがロードされる RAM アドレスの下位 32 ビット。
0x1C デスティネーション ロード アドレス HI このパーティションがロードされる RAM アドレスの上位 32 ビット。
0x20 実パーティション ワード オフセット ブート イメージの開始に対するパーティション データの位置(ワード オフセット)。
0x24 属性 Zynq UltraScale+ MPSoC のパーティション属性ビット 参照
0x28 セクション数 このパーティションに関連付けられたセクション数。
0x2C チェックサム ワード オフセット ブート イメージ内のチェックサム イメージの位置 (ワード オフセット)。
0x30 イメージ ヘッダーのワード オフセット ブート イメージ内の該当するイメージ ヘッダーの位置 (ワード オフセット)。
0x34 AC オフセット ある場合は、ブート イメージ内の認証証明の位置 (ワード オフセット)
0x38 パーティション番号/ID パーティション ID。
0x3C ヘッダー チェックサム パーティション ヘッダーの以前のワードの合計値。

Zynq UltraScale+ MPSoC のパーティション属性ビット

次の表に、Zynq® UltraScale+™ MPSoC のパーティション ヘッダー テーブルのパーティション属性ビットを示します。

表 16. Zynq® UltraScale+™ MPSoC デバイスのパーティション属性ビット
ビット オフセット フィールド名 説明
31:24 予約
23 ベクターの位置 例外ベクターの位置。
  • 0: LOVEC (デフォルト)
  • 1: HIVEC
22:20 予約
19 早期ハンドオフ
ロード直後のハンドオフ:
  • 0: 早期ハンドオフなし
  • 1: 早期ハンドオフが有効
18 エンディアン
  • 0: リトル エンディアン
  • 1: ビッグ エンディアン
17:16 パーティション オーナー
  • 0: FSBL
  • 1: U-Boot
  • 2、3: 予約
15 RSA 認証証明フォーマット
  • 0: RSA 認証証明なし
  • 1: RSA 認証証明あり
14:12 チェックサム タイプ
  • 0: なし
  • 1-2: 予約
  • 3: SHA3
  • 4-7: 予約
11:8 デスティネーション CPU
  • 0: なし
  • 1: A53-0
  • 2: A53-1
  • 3: A53-2
  • 4: A53-3
  • 5: R5-0
  • 6: R5-1
  • 7: R5-ロックステップ
  • 8: PMU
  • 9-15: 予約
7 暗号化の有無
  • 0: 暗号化なし
  • 1: 暗号化あり
6:4 デスティネーション デバイス
  • 0: なし
  • 1: PS
  • 2: PL
  • 3-15: 予約
3 A5X 実行ステート
  • 0: AARCH64 (デフォルト)
  • 1: AARCH32
2:1 例外レベル
  • 0: EL0
  • 1: EL1
  • 2: EL2
  • 3: EL3
0 TrustZone
  • 0: 非セキュア
  • 1: セキュア

Zynq UltraScale+ MPSoC の認証証明

認証証明は、パーティションの認証に関連するすべての情報を含む構造です。この構造には、公開キーと、bootROM/FSBL による検証が必要な署名が含まれます。各認証証明には認証ヘッダーがあります。このヘッダーは、キー サイズ、署名に使用するアルゴリズムなどの情報を提供します。認証証明は、認証が有効になっている実際のパーティションに追加されます。認証が有効になっているすべてのパーティションに対して、ヘッダー テーブルも認証する必要があります。ヘッダーテーブル認証証明は、ヘッダー テーブルのコンテンツの最後に追加されます。

Zynq® UltraScale+™ MPSoC は RSA-4096 認証を使用するため、プライマリ キーおよびセカンダリ キーのサイズは 4096 ビットとなります。次の表に、Zynq UltraScale+ MPSoC デバイスの認証証明のフォーマットを示します。

表 17. Zynq UltraScale+ MPSoC デバイスの認証証明
認証証明
0x00 認証ヘッダー = 0x0101000。Zynq UltraScale+ MPSoC の認証証明ヘッダー を参照してください。
0x04 SPK ID
0x08 UDF (56 バイト)
0x40 PPK Mod (512)
0x240 Mod Ext (512)
0x440 Exponent (4 バイト)
0x444 Pad (60 バイト)
0x480 SPK Mod (512 バイト)
0x680 Mod Ext (512 バイト)
0x880 Exponent (4 バイト)
0x884 Pad (60 バイト)
0x8C0 SPK 署名 = RSA-4096 (PSK、パディング || SHA-384 (SPK + 認証ヘッダー + SPK-ID))
0xAC0 ブート ヘッダー署名 = RSA-4096 (SSK、パディング || SHA-384 (ブート ヘッダー))
0xCC0 パーティション署名 = RSA-4096 (SSK、パディング || SHA-384 (パーティション || パディング || 認証ヘッダー || UDF || PPK || SPK || SPK 署名))
注記: FSBL 署名は、次のように計算されます。
FSBL Signature = RSA-4096 ( SSK, Padding || SHA-384 (PMUFW || FSBL ||
Padding || Authentication Header || UDF || PPK || SPK || SPK Signature)

Zynq UltraScale+ MPSoC の認証証明ヘッダー

次の表に、Zynq® UltraScale+™ MPSoC デバイスの認証証明ビット フィールドを示します。

表 18. 認証ヘッダー ビット フィールド
ビット フィールド 説明 説明
31:20 予約 0
19:18 SPK/ユーザー eFUSE 選択
  • 01: SPK eFUSE
  • 10: ユーザー eFUSE
17:16 PPK キー選択
  • 0: PPK0
  • 1: PPK1
15:14 認証証明フォーマット 00: PKCS #1 v1.5
13:12 認証証明バージョン 00: 現在の AC
11 PPK キー タイプ 0: ハッシュ キー
10:9 PPK キー ソース 0: eFUSE
8 SPK イネーブル 1: SPK イネーブル
7:4 公開キー強度
  • 0: 2048b
  • 1: 4096
  • 2:3 - 予約
3:2 ハッシュ アルゴリズム
  • 1: SHA3/384
  • 2-3: 予約
1:0 公開キー アルゴリズム
  • 0: 予約
  • 1: RSA
  • 2: 予約
  • 3: 予約

Zynq UltraScale+ MPSoC セキュア ヘッダー

パーティションを暗号化するように選択すると、Bootgen がそのパーティションにセキュア ヘッダーを追加します。セキュア ヘッダーには、実際のパーティションを暗号化するのに使用されるキー/IV が含まれます。この後、このヘッダーがデバイス キーおよび IV を使用して暗号化されます。次の表は、Zynq UltraScale+ MPSoC のセキュア ヘッダーを示しています。

4: Zynq UltraScale+ MPSoC のセキュア ヘッダー

Zynq UltraScale+ MPSoC のブート イメージ ブロック図

次の図は、Zynq® UltraScale+™ MPSoC ブート イメージに含まれるコンポーネントを示しています。
5: Zynq UltraScale+ MPSoC デバイスのブート イメージ ブロック図