UG1283 (v2018.3) 2018 年 12 月 21 日
この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。
改訂履歴
...5第 1 章: はじめに
... 6 Bootgen のインストール... 6 ブート時のセキュリティ... 9第 2 章: ブート イメージ レイアウト
... 10 Zynq-7000 SoC のブートおよびコンフィギュレーション...10Zynq UltraScale+ MPSoC のブートおよびコンフィギュレーション...19
第 3 章: ブート イメージの作成
... 30 ブート イメージ フォーマット (BIF)...30 BIF 構文およびサポートされるファイルの種類...31 属性および説明... 32第 4 章: Bootgen インターフェイスの使用
...38 Bootgen GUI のオプション... 38 コマンド ラインで Bootgen を使用... 40 コマンドおよび説明...40第 5 章: ブート時のセキュリティ
... 43 暗号化の使用...44 認証の使用...51 HSM モードの使用...59第 6 章: FPGA のサポート
... 73 暗号化および認証... 73 HSM モード...74付録 A: ユース ケースおよび例
... 77 異なるコアでのシンプル アプリケーション ブート... 77 bootROM による PMUFW のロード...77 FSBL による PMUFW のロード... 78 Linux のブート...78 暗号化フロー: BBRAM レッド キー... 78 暗号化フロー: eFUSE に格納されたレッド キー...79 暗号化フロー: eFUSE に格納されたブラック キー... 79 暗号化フロー: ブート ヘッダーに格納されたブラック キー...80付録 B: BIF 属性の参照
...85 aeskeyfile...85 alignment... 87 auth_params... 87 authentication...89 bh_keyfile...89 bh_key_iv...90 bhsignature...90 blocks... 91 boot_device... 91 bootimage... 92 bootloader...93 bootvectors... 94 checksum...94 destination_cpu... 95 destination_device...95 early_handoff... 96 encryption... 97 exception_level...97 familykey...98 fsbl_config... 98 headersignature... 99 hivec... 100 init...100 keysrc_encryption...101 load... 101 offset... 102 partition_owner... 102 pid...103 pmufw_image... 103 ppkfile... 104 presign...104 pskfile...105 puf_file... 106 reserve... 106 split...107 spkfile...108 spksignature... 108 spk_select... 109udf_bh... 111 udf_data...112 xip_mode... 113
付録 C: コマンド リファレンス
... 114 arch... 114 bif_help... 114 dual_qspi_mode...115 efuseppkbits...115 encrypt...116 encryption_dump... 116 fill...117 generate_hashes... 117 generate_keys... 118 image... 119 log...120 nonbooting...120 o...121 p...121 padimageheader... 122 process_bitstream... 122 spksignature... 123 split...123 w... 124 zynqmpes1... 124 初期化ペアおよび INIT ファイルの属性について...124付録 D: Bootgen ユーティリティ
... 126付録 E: その他のリソースおよび法的通知
...128 Documentation Navigator およびデザイン ハブ... 128 ザイリンクス リソース... 128 Bootgen リソース... 128 お読みください: 重要な法的通知...129セクション 改訂内容 2018 年 12 月 21 日 v2018.3
一般的なアップデート。 編集上のわずかな変更。
2018 年 9 月 24 日 v2018.2
第 1 章
はじめに
ザイリンクスの FPGA およびシステム オン チップ (SoC) デバイスは、通常、複数のハードウェアおよびソフトウェア バイナリを備え、これらを使用して設計どおりに機能するよう起動します。バイナリには、FPGA ビットストリーム、 ファームウェア イメージ、ブートローダー、オペレーティング システム、および非セキュアな方法とセキュアな方法 の両方でロード可能なユーザー指定のアプリケーションが含まれます。 Bootgen は、バイナリ ファイルを統合してデバイス ブート イメージを生成するザイリンクス ツールです。このツー ルは、ザイリンクス デバイスで使用するブート イメージの作成時に入力される複数のプロパティ、属性、およびパラ メーターを定義します。 Zynq®-7000 デバイスのセキュア ブートには、公開キーおよび秘密キーの暗号化アルゴリズムを使用します。 Bootgen は各パーティションに対して特定のデスティネーション メモリ アドレスを割り当て、アライメント要件を与 えます。また、暗号化の使用および認証の使用で説明するように、暗号化と認証もサポートしています。より高度な 認証フローとキー管理オプションについては、HSM モードの使用で説明しています。HSM モードでは、Bootgen は、 秘密キーを使用してオフラインで署名可能な中間ハッシュ ファイルを出力し、ブート イメージに含まれる認証証明に 署名することができます。このプログラムがパーティション リストにヘッダー ブロックを加えることでブート イメ ージを構築します。各パーティションは、Bootgen によってオプションで暗号化したり、認証したりできます。出力 は、システムのブート フラッシュ メモリへ直接プログラムできるシングル ファイルです。認証や暗号化をサポート するさまざまな入力ファイルも、このツールで生成できます。詳細は、BIF 構文およびサポートされるファイルの種 類を参照してください。Bootgen には GUI インターフェイスとコマンド ライン オプションの両方があります。Bootgen はソフトウェア開発 ツール キット (SDK) に統合されており、基本的なブート イメージの生成には GUI を使用しますが、オプションの大 部分はコマンド ライン駆動型です。コマンド ライン オプションはスクリプトで記述できます。Bootgen ツールは、 ブート イメージ フォーマット (BIF) のコンフィギュレーション ファイル (*.bif) で駆動されます。Bootgen には、 Zynq-7000 SoC に加えて、ザイリンクス 7 シリーズ 以降の FPGA のパーティションを暗号化して認証する機能が備わ っています (FPGA のサポート参照)。ブート イメージのビヘイビアーを定義するコマンドおよび属性がサポートされ ているだけでなく、Bootgen での作業に役立つユーティリティもあります。
Bootgen のインストール
Bootgen は、ザイリンクス ソフトウェア開発キット (SDK) およびザイリンクス ソフトウェア コマンド ライン ツール (XSCT) のブート イメージ作成ツールです。ブート イメージを簡単に作成するには Bootgen を GUI モードで使用し、 より複雑なブート イメージを作成する場合はコマンド ライン モードで使用します。コマンド ライン モードのコマ ンドもスクリプトで記述できます。Bootgen は、SDK または Vivado Design Suite インストーラーからインストールす るか、スタンドアロンでインストールできます。SDK は Vivado® Design Suite をインストールすると使用できるようになります。または、個別にダウンロードしてインストールします。可能なすべてのインストール オプションの詳細 は、『Vivado Design Suite ユーザー ガイド: リリース ノート、インストールおよびライセンス』 (UG973) を参照して ください。
Vivado から Bootgen をインストールするには、ザイリンクス ダウンロード サイトに移動し、次の図に示すような Vivado 自己解凍型インストーラーを選択します。
Vivado をインストールする際に SDK をインストールするオプションを選択します。Bootgen は SDK と共に含まれ ます。 また、SDK インストーラーから Bootgen をインストールすることもできます。次の図に、ザイリンクス ダウンロー ド サイトにある SDK 自己解凍型インストーラーを示します。 図 2: SDK インストーラー 次に、SDK インストーラーで XSCT またはスタンドアロン バージョンの Bootgen をダウンロードするオプションを 示します。
図 3: SDK インストーラー
SDK インストーラーで [Download Full Image] を選択してオフラインでインストールすることもできます。このオフ ライン インストールは、HSM モードを使用する設計者にとって重要な機能です。詳細は、HSM モードの使用を参照 してください。 SDK と Bootgen をインストールしたら、SDK GUI または XSCT からこのツールを呼び出して使用できます。SDK GUI オプションには、短時間での開発および試行を可能にする最も一般的なアクションが含まれています。 コマンド ライン オプションには、ブート イメージを実装するためのさらに多くのオプションが用意されています。 GUI およびコマンド ライン オプションの詳細は、第 4 章: Bootgen インターフェイスの使用を参照してください。 • SDK GUI からの起動および使用は、Bootgen の GUI オプションを参照してください。
• XSCT オプションを使用するコマンド ラインからの起動および使用は、コマンド ラインで Bootgen オプションを 使用するを参照してください。
最新の認証方法によるセキュア ブートは、ザイリンクス デバイス上で認証されていないコードまたは変更されたコー ドが実行されないようにし、さまざまな暗号化テクニックがロードされるためイメージにアクセスできるのは承認さ れたプログラムのみとなります。
デバイス固有のハードウェア セキュリティ機能の詳細は、次の資料を参照してください。 • 『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585: 英語版、日本語版)
• 『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)
Bootgen を使用する場合のコンテンツの暗号化および認証の詳細は、暗号化の使用および認証の使用を参照してくだ さい。
Bootgen ハードウェア セキュリティ モニター (HSM) モードでは、BIF 属性は RSA 秘密キーではなく公開キーを使用 するため、キー処理のセキュリティが向上します。HSM はセキュア キー/署名生成デバイスであり、秘密キーを生成 し、秘密キーを使用してパーティションの暗号化を実行し、RSA キーの公開部分を Bootgen に提供します。秘密キー が HSM の外部に出ることはありません。Bootgen HSM モードでの場合は、BIF は HSM によって生成された公開キ ーと署名を使用します。詳細は、HSM モードの使用を参照してください。
第 2 章
ブート イメージ レイアウト
この章では、各アーキテクチャのブート イメージのフォーマットについて説明します。
• Zynq-7000 デバイスでの Bootgen の使用に関しては、Zynq-7000 SoC のブートおよびコンフィギュレーションを 参照してください。
• Zynq® UltraScale+™ MPSoC デバイスでの Bootgen の使用に関しては、Zynq UltraScale+ MPSoC のブートおよび
コンフィギュレーションを参照してください。
• ザイリンクス デバイスでの Bootgen の使用方法に関しては、第 6 章: FPGA のサポートを参照してください。 ブート イメージをビルドするには、次の手順を実行します。
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 へコードの実行を分岐します。
SSBL (第 2 段階ブートローダー)、およびエンベデッド オペレーティング システムとアプリケーションが含まれます。 ただし、bootROM はこれらにアクセスできません。bootROM の実行フローは、ブート モードのピン ストラップの 設定、ブート ヘッダー、およびシステムによって影響を受けます。bootROM は、暗号化された FSBL を使用するセ キュアな環境または非セキュアな環境のいずれでも実行できます。 サポートされるブート モードは次のとおりです。 • 開発およびデバッグのプライマリ モードは JTAG です。
• デバイスのブートには、NAND、パラレル NOR、シリアル NOR (Quad-SPI)、およびセキュア デジタル (SD) フラ ッシュ メモリが使用されます。これらのブート モードの詳細は、『Zynq SoC テクニカル リファレンス マニュア ル』 (UG585) を参照してください。一般的なブートおよびコンフィギュレーションに関する質問および回答は、
Zynq-7000 - ブートおよびコンフィギュレーション (AR#52538) を参照してください。
Zynq-7000 SoC のブート イメージ レイアウト
図 4: ブート ヘッダー
Boot Header
Register Initialization Table
Image Header Table
. . .
Header Authentication Certificate (Optional)
Partition 1 (FSBL)
Image Header
1
_ _ _AC
(Optional)
Image Header
2
Image Header
n
Partition
Header 1
_ _ _Partition
Header 2
Partition
Header n
Partition 2
AC
(Optional)
Partition n
AC
(Optional)
Zynq-7000 SoC のブート ヘッダー
Bootgen は、ブート イメージの先頭にブート ヘッダーを付加します。ブート ヘッダー テーブルは、FSBL などのプラ イマリ ブートローダーのブートに関連する情報を含む構造となっています。ブート イメージ全体にこのような構造 が 1 つだけあります。bootROM はこのテーブルを解析して、FSBL がフラッシュのどこに格納されていて、OCM の どこにロードする必要があるかを判断します。一部の暗号化および認証に関連するパラメーターもここに格納されま す。その他のブート ヘッダー コンポーネントは次のとおりです。 • Zynq-7000 SoC のレジスタ初期化テーブル • Zynq-7000 SoC のイメージ ヘッダー テーブル • Zynq-7000 SoC のパーティション ヘッダーさらに、ブート ヘッダーには Zynq-7000 SoC のレジスタ初期化テーブルが含まれます。bootROM は、ブート ヘッ ダーを使用して、FSBL の位置と長さ、および FSBL に制御を渡す前にシステムを初期化するために必要なその他の情 報を検索します。
ト
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 ブート ヘッダー チェックサム オフセット 0x20 ~ 0x44 のワードの合計。ワードはリトル エン ディアンと見なされます。 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: 使用可能なフィールドは 0x0、0x4、0x8、0xC、およ びパディングです。 0x01020000: 0x10 フィールドが追加されます。 0x04 イメージ ヘッダー数 イメージ内のパーティション数。 0x08 第一パーティション ヘッダ ー オフセット 第一パーティション ヘッダーを指すポインター (ワード オフセット)。 0x0C 第一イメージ ヘッダー オフ セット 第一イメージ ヘッダーを指すポインター (ワード オフセット)。 0x10 ヘッダー認証証明オフセッ ト 認証証明ヘッダーを指すポインター(ワード オフセット)。 0x14 予約 デフォルトは 0xFFFFFFFF です。Zynq-7000 SoC のイメージ ヘッダー
イメージ ヘッダーは、ELF ファイル、ビットストリーム、データ ファイルなど、各イメージに関連する情報を含む 構造の配列です。1 つのイメージに複数のパーティションを含めることができます。たとえば、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 予約 予約 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: SHA256Zynq-7000 SoC のブート イメージ ブロック図
次の図は、Zynq®-7000 SoC ブート イメージに含まれるコンポーネントを示しています。図 5: Zynq-7000 SoC のブート イメージ ブロック図
ュレーション
概要
Zynq® UltraScale+™ MPSoC は、QSPI フラッシュ、SD カード、USB デバイス ファームウェア アップグレード (DFU)
ホスト、NAND フラッシュ ドライブなどからのブートをサポートしています。この章では、セキュア モードと非セ キュア モードの両方において各種デバイスからのブート プロセスについて説明します。ブート処理はプラットフォ ーム管理ユニット (PMU) とコンフィギュレーション セキュリティ ユニット (CSU) によって管理および実行されま す。 初期ブート時に、次の手順が実行されます。 • PMU はパワーオン リセット (POR) によってリセット状態から復帰します。 • 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 のブート イメージ
図 6: Zynq UltraScale+ MPSoC のブート イメージ
Boot Header
Register Initialization Table
Image Header Table
. . .
Header Authentication Certificate (Optional)
Image Header
1
_ _ _Image Header
2
Image Header
n
Partition
Header 1
_ _ _Partition
Header 2
Partition
Header n
Partition n
AC
(Optional)
Partition 2
AC
(Optional)
Partition 1 (FSBL)
AC
(Optional)
PUF Helper Data (Optional)
PMU FW
(Optional)
Zynq UltraScale+ MPSoC のブート ヘッダー
ブート ヘッダーについて Bootgen は、ブート イメージの先頭にブート ヘッダーを付加します。ブート ヘッダー テーブルは、FSBL などのプラ イマリ ブートローダーのブートに関連する情報を含む構造となっています。ブート イメージ全体にこのような構造 が 1 つだけあります。bootROM はこのテーブルを解析して、FSBL がフラッシュのどこに格納されていて、OCM の どこにロードする必要があるかを判断します。一部の暗号化および認証に関連するパラメーターもここに格納されま す。ブート ヘッダー コンポーネントは次のとおりです。
• Zynq UltraScale+ MPSoC のブート ヘッダー、ここにはZynq UltraScale+ MPSoC のブート ヘッダー属性ビットも 含まれる
• Zynq UltraScale+ MPSoC のレジスタ初期化テーブル
• Zynq UltraScale+ MPSoC の認証証明
bootROM は、ブート ヘッダーを使用して、FSBL の位置と長さ、および FSBL に制御を渡す前にシステムを初期化す るために必要なその他の情報を検索します。次の表に、Zynq® UltraScale+™ MPSoC デバイスのアドレス オフセット、
パラメーター、および説明を示します。
表 9: Zynq UltraScale+ MPSoC デバイスのブート ヘッダー
アドレス オフセット パラメーター 説明
0x00-0x1F Arm® ベクター テ
ーブル XIP ELF ベクター テーブル:
0xEAFFFFFE: Cortex™ R5 および Cortex A53 (32 ビット) の場合 0x14000000: Cortex A53 (64 ビット) の場合 0x20 幅検出ワード このフィールドは、QSPI の幅検出に使用されます。これは、リトル エンディア ン フォーマットの 0xAA995566 です。 0x24 ヘッダー署名 バイト オーダーで 4 バイトの ‘X’,’N’,’L’,’X’ を含みます。これは、リトル エンディアン フォーマットの 0x584c4e58 です。 0x28 キー ソース (FSBL のみ) 0x00000000 (暗号化なし) 0xA5C3C5A5 (eFUSE に格納されているブラック キー) 0xA5C3C5A7 (eFUSE に格納されている難読化キー) 0x3A5C3C5A (BBRAM に格納されているレッド キー) 0xA5C3C5A3 (eFUSE に格納されているレッド キー) 0xA35C7CA5 (ブート ヘッダーに格納されている難読化キー) 0xA3A5C3C5 (ブート ヘッダーに格納されているユーザー キー) 0xA35C7C53 (ブート ヘッダーに格納されているブラック キー) 0x2C FSBL 実行アドレス (RAM) 0x30 ソース オフセット PMUFW がない場合は、FSBL の開始オフセットです。PMUFW がある場合は、 OCM 内の PMUFW.FSBL 実行アドレスまたは XIP ベース アドレスの開始です。 0x34 PMU イメージの長
さ 元の PMU FW イメージの長さ (バイト) (0~128KB)。 サイズ > 0 の場合、PMUFW は FSBL の前に付きます。 サイズ = 0 の場合、PMUFW イメージはなしです。 0x38 PMU FW 全体の長
さ OCM 内の FSBL 実行アドレスまたは XIP ベースの 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 に設定します。
表 9: Zynq UltraScale+ MPSoC デバイスのブート ヘッダー (続き) アドレス オフセット パラメーター 説明 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 ビットに基づいて 決定されます。 SHA2 選択 13:12 2 0x0 0x3: SHA2 (廃止予定)。 その他すべて: SHA3 CPU 選択 11:10 2 0x0 0x0: R5 シングル。 0x1: A53 シングル。 0x2: R5 デュアル。 0x3: 予約 ハッシュ処理選択 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。
期化するために使用する 256 のアドレスと値のペアです。詳細は、レジスタ初期化ペアおよび INT ファイルの属性に ついてを参照してください。
表 11: Zynq UltraScale+ MPSoC のレジスタ初期化テーブル
アドレス オフセット パラメーター 説明 0xB8 ~ 0x8B4 レジスタ初期化ペア: <address>:<value>: (2048 バイト) アドレスが 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 ヘルパー データ (1544 バ イト) ブート ヘッダー オフセット 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 バージョン 0x01010000 0x01020000 - 0x10 フィールドが追加さ れます。 0x04 イメージ ヘッダー数 イメージ ヘッダーの数を指定します。
表 13: Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー テーブル (続き) アドレス オフセット パラメーター 説明 0x08 第一パーティション ヘッダー オフセット 第一パーティション ヘッダーを指すポイン ター (ワード オフセット)。 0x0C 第一イメージ ヘッダー オフセット ヘッダー 第一イメージ ヘッダーを指すポインター (ワ ード オフセット)。 0x10 ヘッダー認証証明 ヘッダー認証照明を指すポインター (ワード オフセット)。 0x14 FSBL のブート デバイス オプションは次のとおりです。 0 - 同じブート デバイス 1 – QSPI-32 2 – QSPI-24 3 – NAND 4 – SD0 4 – SD1 5 – SDLS 6 – MMC 7 – USB 8 – ETHERNET 9 - PCIE 10 – SATA 0x18- 0x38 パディング 予約 (0x0) 0x3C チェックサム イメージ ヘッダーの以前のワードの合計値。
Zynq UltraScale+ MPSoC のイメージ ヘッダー
イメージ ヘッダーについて
イメージ ヘッダーは、ELF ファイル、ビットストリーム、データ ファイルなど、各イメージに関連する情報を含む 構造の配列です。1 つのイメージに複数のパーティションを含めることができます。たとえば、ELF には複数のロー ド可能なセクションを含めることができ、それぞれがブート イメージ内にパーティションを形成します。テーブルに は、イメージに関連するパーティション数の情報も含まれます。次の表に、Zynq® UltraScale+™ MPSoC のアドレス
オフセット、パラメーター、および説明を示します。
表 14: Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー
アドレス オフセット パラメーター 説明 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 の倍数バイトです。
不定 ストリング ターミネーター (終端
名) 0x00000
不定 パディング デフォルトで、64 バイト境界まで 0xFFFFFFF でパディ
ングされます。
Zynq UltraScale+ MPSoC のパーティション ヘッダー
パーティション ヘッダーについて
パーティション ヘッダーは、各パーティションに関連する情報を含む構造の配列です。各パーティション ヘッダー テーブルは、ブートローダーによって解析されます。このテーブルには、パーティション サイズ、フラッシュ内のア ドレス、RAM 内のロード アドレス、暗号化/署名などの情報が含まれます。FSBL を含め、各パーティションにこの ような構造が 1 つあります。テーブル内の最後の構造は、すべて NULL 値となります (チェックサムを除く)。次の表 に、Zynq® UltraScale+™ MPSoC のオフセット、名前、および説明を示しています。
表 15: Zynq UltraScale+ MPSoC デバイスのパーティション ヘッダー
オフセット 名前 説明 0x0 暗号化されたパーティション デー タ ワード長 暗号化されたパーティション データの長さ。 0x04 復号化されていないデータ ワード 長 暗号化されていないデータの長さ。 0x08 合計パーティション ワード長 (認証 証明を含む)。認証証明を参照。 暗号化、パディング、拡張、認証をすべて合計した長さ。 0x0C 次のパーティション ヘッダー オフ セット 次のパーティション ヘッダーの位置 (ワード オフセット)。 0x10 デスティネーション実行アドレス ロード後のこのパーティションの実行可能アドレス。 0x14 デスティネーション実行アドレス HI ロード後のこのパーティションの実行可能アドレス。 0x18 デスティネーション ロード アドレ ス LO このパーティションがロードされる RAM アドレス。 0x1C デスティネーション ロード アドレ ス HI このパーティションがロードされる RAM アドレス。 0x20 実パーティション ワード オフセッ ト ブート イメージの開始に対するパーティション データの位置 (ワード オフセット)。 0x24 属性 ブート イメージの開始に対するパーティション データの位置 (ワ
ード オフセット)。Zynq UltraScale+ MPSoC のパーティション属 性ビットを参照してください。 0x28 セクション数 シングル パーティション内のセクション数。 0x2C チェックサム ワード オフセット ブート イメージ内の認証証明の位置 (ワード オフセット)。 0x30 イメージ ヘッダーのワード オフセ ット ブート イメージ内の認証証明の位置 (ワード オフセット)。 0x34 パーティション番号/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 バイト)
表 17: Zynq UltraScale+ MPSoC デバイスの認証証明 (続き)
認証証明
0xAC0 ブート ヘッダー署名 = RSA-4096 (SSK、パディング || SHA-384 (ブート ヘッダー) 0xCC0 パーティション署名 = RSA-4096 (SSK、パディング || SHA-384 (パーティション || パ
ディング || 認証ヘッダー || UDF || PPK || SPK || SPK 署名))
0xCC0 FSBL 署名 = RSA-4096 (SSK、パディング || SHA-384 (PMUFW || FSBL || パディング || 認証ヘッダー || UDF || PPK || SPK || SPK 署名)
Zynq UltraScale+ MPSoC の認証証明ヘッダー
次の表に、Zynq® UltraScale+™ MPSoC デバイスの認証証明ビット フィールドを示します。
ビット フィールド フィールド名 説明 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: ECC 3: 予約
Zynq UltraScale+ MPSoC のブート イメージ ブロック図
Boot Header 0x000-0xEC0 Image Header Table Image Headers (IH1-Ihn)
Partition Header 1
Partition Header n
Header AC
BootLoader (FSBL and PMUFW (opt))
BootLoader AC Partition 1 Partition 1 AC Partition(n) Partition(n) AC BootLoader AC Partition 1 AC Partition n AC AC Header SPK IDHeader SPKHeader SPK Signature BH Signature Partition Signature Header AC
User Defined Field PPK AC Header SPK IDBootLoader SPKBootLoader SPK Signature BH Signature Partition Signature User Defined Field
PPK AC Header SPK IDPartition1 SPKPartition1 SPK Signature BH Signature Partition Signature User Defined Field
PPK AC Header SPK IDPartition(n) SPKPartition(n) SPK Signature BH Signature Partition Signature User Defined Field
PPK
X#####-122118
第 3 章
ブート イメージの作成
ブート イメージ フォーマット (BIF)
ザイリンクスのブート イメージ レイアウトには、ファイル、ファイルの種類、およびサポートするヘッダーが複数あ り、これらのファイルはブートローダーによって解析されます。Bootgen は、ブート イメージを生成するための属性 を定義し、ファイルで渡された値に基づいて解釈してブート イメージを生成します。使用可能なコマンドと属性は複 数あるため、Bootgen はそれらの入力を含むブート イメージ フォーマット (BIF) を定義します。BIF は次のもので構 成されています。• セキュア/非セキュア ブート イメージを作成するためのコンフィギュレーション属性 • FSBL イメージ (1 つ)
• 1 つまたは複数のパーティション イメージ
Bootgen は、プロパティおよび属性に加えて、複数のコマンドを使用してビヘイビアーを定義し、ブート イメージを 作成します。たとえば、認定されている FPGA デバイス、Zynq®-7000 SoC デバイス、または Zynq® UltraScale+™
MPSoC デバイスのブート イメージを作成するには、適切な arch コマンド オプションを Bootgen に与える必要があ ります。次の付録で、Bootgen ビヘイビアーを指示する際に使用可能なオプションをリストして説明しています。 • 付録 B: BIF 属性の参照 • 付録 C: コマンド リファレンス BIF は、ハードウェア要件とソフトウェア要件の両方に対応します。ブート イメージ ヘッダーは、シングル パーティ ション (通常は FSBL (第 1 段階ブートローダー)) をロードする bootROM ローダーで必要です。その他のブート イメ ージは、FSBL によってロードされて処理されます。Bootgen は一連のパーティションを組み合わせてブート イメー ジを生成します。次のパーティションが考えられます。 • FSBL (第 1 段階ブートローダー) • U-Boot といった SSBL (第 2 段階ブートローダー) • ビットストリーム • Linux • プロセッサ上で実行するソフトウェア アプリケーション • データ ブロブ
BIF ファイルは、ブート イメージの各コンポーネントをブート順に指定し、オプションで各イメージ コンポーネン トに属性を適用できるようにします。イメージ コンポーネントがメモリ内で連続していない場合、コンポーネントは 複数のパーティションにマップできます。BIF ファイルの構文は次の形式となります。
<image_name>:
{
// common attributes
[attribute1] <argument1>
// partition attributes
[attribute2, attribute3=<argument> <elf>
[attribute2, attribute3=<argument>, attibute4=<argument] <bit>
[attribute3] <elf>
<bin>
}
• <image_name> と {...} (グループ化) を使用し、ROM 内のパーティションに分類するファイルをまとめます。 • {...} には 1 つまたは複数のデータ ファイルがリストされます。 • サポートされるファイルの種類は、ELF、BIT、RBT、INT、または BIN ファイルです。 • 各パーティションのデータ ファイルは、ファイル名の前に構文 [attribute, attribute=<argument>] を使 用することで、オプションで属性を持つことができます。 • 属性によって、データ ファイルに何らかの特性が適用されます。 • 複数の属性がある場合は、カンマ (,) で区切って並べることができます。その場合の順序は重要ではありません。 属性は、1 つのキーワードまたはクォーテーションで囲んだ複数のキーワードとなります。 • 現在のディレクトリにファイルがない場合は、ファイル名を含むファイル パスを追加できます。ファイルのリス ト方法は自由形式で、1 行にすべてをリスト (スペースで区切る、最低 1 スペースは必要) しても、1 つずつと改行 してもかまいません。 • スペースは無視されるため、読みやすいように追加しても問題ありません。 • C 形式のブロック コメント /*...*/、または C++ 形式の行コメント // を使用できます。 次に、読みやすいように空白と改行を追加した BIF の例を示します。<image_name>:
{
/* common attributes */
[attribute1] <argument1>
/* bootloader */
[attribute2,
attribute3,
attribute4=<argument>
] <elf>
/* pl bitstream */
[
attribute2,
attribute3,
attribute4=<argument>,
attibute=<argument>
] <bit>
/* another elf partition */
[
attribute3
] <elf>
/* bin partition */
<bin>
}
Bootgen でサポートされるファイル 次の表に、Bootgen でサポートされるファイルを示します。 表 18: Bootgen でサポートされるファイル 拡張子 名前 説明 .bin バイナリ 未処理のバイナリ ファイル .bit/.rbt ビットストリーム BIT ファイル ヘッダーを除く .dtb バイナリ 未処理のバイナリ ファイル image.gz バイナリ 未処理のバイナリ ファイル .elf 実行可能なリンク ファイル (ELF) シンボルとヘッダーを除く .int レジスタ初期化ファイル .nky AES キー .pk1/.pub/.pem RSA キー .sig 署名ファイル Bootgen または HSM によって生成され る署名ファイル属性および説明
次の表に、Bootgen の属性を示します。各属性は、一番左の列にあるリンクから詳細を参照できます。その右側の列 には簡単な説明を記載しています。アーキテクチャ名は、属性を使用するザイリンクス デバイスを示します。 • zynq: Zynq-7000 SoC デバイス• zynqmp: Zynq® UltraScale+™ MPSoC デバイス
• fpga: すべての 7 シリーズ以降のデバイス 表 19: Bootgen の属性と説明
オプション/属性 説明 属性を使用するデバイス
aeskeyfile <aes_key_filepath> AES キー ファイルへのパスです。キー ファイルには、パーティションの暗号 化に使用される AES キーが含まれます。ファイルの内容は eFUSE または BBRAM に書き込む必要があります。キー ファイルが指定されたパスに存在 しない場合、Bootgen が暗号化に使用される新しいキーを生成します。たと えば BIF ファイルのビットストリームに暗号化を選択した場合、出力は暗号 化されたビットストリームとなります。 すべて
ス alignment <byte> バイト アライメントを設定します。パーティションは、この値の倍数値に揃 えられるまでパディングされます。この属性はオフセットと共に使用するこ とはできません。 zynq、zynqmp checksum <args> パーティションのチェックサムが必要であることを示します。チェックサム アルゴリズムは次のとおりです。 None md5 zynq、zynqmp auth_params <options> 認証の追加オプションは次のとおりです。 ppk_select: 0 = 2 つの PPK のうち 1 つをサポート、1 = 2 つの PPK のう ち 1 つをサポート。 spk_id: SPK を識別するための 32 ビット ID。
spk_select: SPK とユーザー eFUSE を識別。デフォルトは spk-efuse。 header_auth: パーティションが認証されていない場合のヘッダーを認 証。
zynqmp
authentication <option> 認証されるパーティションを指定します。zynq の認証は、RSA-2048 を使用 して実行されます。zynqmp の認証は、RSA-4096 を使用して実行されます。 引数は次のとおりです。 none: パーティションは暗号化されない。 rsa: パーティションは RSA アルゴリズムを使用して暗号化される。 すべて bh_keyfile <filename> ブート ヘッダーに格納される 256 ビットの難読化キーまたはブラック キ ー。これは、[keysrc_encryption]=bh_gry_key または [keysrc_encryption]=bh_blk_key の場合にのみ有効です。 zynqmp
bh_key_iv <filename> 難読化キーまたはブラック キーを復号化する際に使用する初期化ベクター。 zynqmp bhsignature <filename> ブート ヘッダーの署名を認証証明にインポートします。これは、秘密キー
PSK を共有しない場合に使用できます。署名を作成して Bootgen に与える ことができます。ファイル フォーマットは bootheader.sha384.sig
です。
zynqmp
blocks <block sizes> 暗号化におけるキー ローリング機能のブロック サイズを指定します。各モ ジュールは独自のキーを使用して暗号化されます。最初のキーはデバイスの キー ソースで格納され、後続の各ブロックのキーは直前のモジュール内で暗 号化 (ラップ) されます。 zynqmp boot_device <options> セカンダリ ブート デバイスを指定します。パーティションが存在するデバ イスを示します。オプションは次のとおりです。 qspi32 qspi24 nand sd0 sd1 sd-ls mmc usb ethernet pcie sata zynqmp
bootimage <filename.bin> リストされた入力ファイルが Bootgen によって作成されたブート イメージ
表 19: Bootgen の属性と説明 (続き)
オプション/属性 説明 属性を使用するデバイス
bootloader <partition> パーティションがブートローダー (FSBL) であることを指定します。この属
性は、ほかのパーティションの BIF 属性と共に指定されます。 zynq、zynqmp bootvector <vector_values> XIP (eXecute In Place) のベクター テーブルを指定します。 zynqmp checksum <arg> パーティションのチェックサムが必要であることを指定します。このオプシ
ョンを認証や暗号化などのよりセキュアな機能と共に使用することはできま せん。チェックサム アルゴリズムは次のとおりです。
md5: Zynq®-7000 SoC デバイスの場合。
Zynq® UltraScale+™ MPSoC の場合、オプションは none: チェックサム なしです。 sha3: sha3 チェックサム。 zynq デバイスはブートローダーのチェックサムをサポートしていませ ん。 zynqmp デバイスはブートローダーのチェックサムをサポートしていま す。 zynq、zynqmp destination_cpu <device_core> パーティションを実行する必要があるコアを指定します。このオプションを 認証や暗号化などのよりセキュアな機能と共に使用することはできません。 a53-0 a53-1 a53-2 a53-3 r5-0 r5-1 r5-lockstep pmu zynqmp destination_device <device_type> パーティションのターゲットを PS または PL のいずれかに指定します。オプションは次のとおりです。 ps: パーティションのターゲットは PS (デフォルト)。 pl: パーティションのターゲットは PL (ビットストリームの場合)。 zynqmp early_handoff このフラグは、パーティションのロード直後に重要なアプリケーションへの ハンドオフが確実に実行されるようにします。このオプションを使用しない 場合は、最初にすべてのパーティションが順にロードされ、続いてハンドオ フが順に実行されます。 zynqmp encryption <partition_option> 暗号化するパーティションを指定します。暗号化アルゴリズムは次のとおり です。zynq は AES-CBC を使用し、zynqmp は AES-GCM を使用します。 パーティションのオプションは次のとおりです。 none: パーティションは暗号化されない。 aes: パーティションは AES アルゴリズムを使用して暗号化される。 すべて exception_level コアに設定する例外レベルを指定します。 オプションは次のとおりです。 el-0 el-1 el-2 el-3 zynqmp familykey ファミリ キーを指定します。 zynqmp
ス fsbl_config ブート イメージのコンフィギュレーションに使用するサブ属性を指定しま す。サブ属性は次のとおりです。 bh_auth_enable: PPK ハッシュと SPK ID の検証を除き、ブート イメー ジの RSA 認証が完了しました。 auth_only: ブート イメージは RSA 署名のみです。FSBL の復号化は実行 しません。 opt_key: block-0 の復号化に操作キーを使用します。操作キーはセキュ ア ヘッダーにあります。 pufhd_bh: PUF ヘルパー データはブート ヘッダーに格納されます(デフ ォルトは efuse)。 PUF ヘルパー データ ファイルは、[puf_file] オプションを使用して Bootgen に渡されます。 puf4kmode: PUF は 4k ビット コンフィギュレーションでの使用に合わ せて調整されています(デフォルトは 12k ビット)。
shutter = <value> 32 ビットの PUF_SHUT レジスタの値で、シャッター オフセット時間およびシャッター オープン時間を PUF に設定します。 zynqmp headersignature<signature_file> ヘッダーの署名を認証証明にインポートします。これは、秘密キーを共有し ない場合に使用できます。署名を作成して Bootgen に与えることができま す。 zynq、zynqmp
hivec 例外ベクター テーブルの場所を hivec (Hi-Vector) として指定します。デフ ォルトは lovec (Low-Vector) です。これは、A53 (32 ビット) および R5 コア にのみ適用されます。
hivec: 0xFFFF0000 の例外ベクター テーブル。 lovec: 0x00000000 の例外ベクター テーブル。
zynqmp
init<filename> ブートローダーの最後にあるレジスタ初期化ブロックであり、init (.int) ファ イルの仕様を解析して構築されます。最大 256 のアドレスと値の初期化ペ アが許可されます。init ファイルには特定のフォーマットがあります。 zynq、zynqmp keysrc_encryption 暗号化に使用するキー ソースを指定します。キーは次のとおりです。 efuse_gry_key: eFUSE に格納されているグレー (難読化) キー。グレ ー/難読化キーを参照してください。 bh_gry_key: ブート ヘッダーに格納されているグレー (難読化) キー。 bh_blk_key: ブート ヘッダーに格納されているブラック キー。ブラッ ク キー/PUF キーを参照してください。 efuse_blk_key: eFUSE に格納されているブラック キー。 kup_key: ユーザー キー。 efuse_red_key: eFUSE に格納されているレッド キー。キーの差し替 えを参照してください。 bbram_red_key: BBRAM に格納されているレッド キー。 zynq、zynqmp
load <partition_address> メモリ内のパーティションのロード アドレスを設定します。 zynq、zynqmp offset <offset_address> ブート イメージ内のパーティションの絶対オフセットを設定します。 zynq、zynqmp partition_owner<option>
<partition> パーティションをロードするパーティション オーナーを設定します。オプションは次のとおりです。 fsbl: パーティションは FSBL によってロードされます。
uboot: パーティションは U-Boot によってロードされます。
zynq、zynqmp
pid <ID> パーティション ID を指定します。PID は 32 ビット値 (0~0xFFFFFFFF) に設
表 19: Bootgen の属性と説明 (続き)
オプション/属性 説明 属性を使用するデバイス
pmufw_image <image_name> FSBL をロードする前に bootROM によってロードされる PMU ファームウ
ェア イメージです。 zynqmp
ppkfile <key filename> プライマリ公開キー (PPK)。ブート イメージ内のパーティションの認証に使 用します。
詳細は、認証の使用を参照してください。
zynq、zynqmp
presign <sig_filename> パーティション署名 (.sig) ファイル。 すべて pskfile <key filename> プライマリ秘密キー (PSK)。ブート イメージ内のパーティションの認証に使
用します。
詳細は、認証の使用を参照してください。
zynq、zynqmp
puf_file <filename> PUF ヘルパー データ ファイル。PUF は、暗号化キー ソースとしてブラック キーと共に使用されます。PUF ヘルパー データは 1544 バイトです。1536 バイトの PUF HD + 4 バイトの HASH + 3 バイトの AUX + 1 バイト アライメ ント。 zynqmp reserve パーティションのメモリ サイズを維持します。このサイズになるまでパー ティションにパディングが追加されます。 zynq、zynqmp spkkfile<filename> ブート イメージ内のパーティションの認証に使用するキーです。詳細は、認 証の使用を参照してください。SPK - セカンダリ公開キー。 すべて split モードに基づいてイメージを分割します。split オプションは次のとおりで す。 slaveboot: zynqmp でのみサポートされています。次のように分割しま す。 ブート ヘッダー + ブートローダー イメージ ヘッダーおよびパーティション ヘッダー 残りのパーティション
normal: zynq および zynqmp の両方でサポートされています。次のよ うに分割します。 ブート ヘッダー + イメージ ヘッダー + パーティション ヘッダー + ブー トローダー パーティション 1 パーティション 2、以下同様 分割 (split) モードのほかに、出力フォーマットも bin または mcs に設定で きます。 注記: オプションの split の normal モードは、コマンド ライン オプションの split と同じです。このコマンド ライン オプションは推奨されていません。 zynq、zynqmp
spksignature <SPK_ID> ユーザー eFUSE の SPK ID を指定します。 zynqmp spksignature <signature_file> SPK の署名を認証証明にインポートします。認証の使用を参照してくださ
い。これは、秘密キー (PSK) を共有しない場合に使用できます。署名を作成 して Bootgen に与えることができます。
zynq zynqmp
sskfile <key filename> セカンダリ秘密キー (SSK) は、ブート イメージ内のパーティションを認証す るために使用されます。プライマリ キーはセカンダリ キーを認証し、セカン ダリ キーはパーティションを認証します。
すべて
startup ロード後のパーティションのエントリ アドレスを設定します。この識別子
は、実行しないパーティションでは無視されます。 zynq、zynqmp TrustZone <option> TrustZone オプションは次のとおりです。
secure nonsecure