223
Bootgen ユーザー ガイド UG1283 (v2020.2) 2020 12 15 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。 すべてのバージョンを表示

Bootgen ユーザー ガイド - Xilinx

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Bootgen ユーザー ガイド - Xilinx

Bootgen ユーザー ガイドUG1283 (v2020.2) 2020 年 12 月 15 日

この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

すべてのバージョンを表示

Page 2: Bootgen ユーザー ガイド - Xilinx

目次改訂履歴..........................................................................................................................................................................6

第 1 章: 概要................................................................................................................................................................. 7この資料に関連する設計プロセス................................................................................................................................. 7Bootgen のインストール............................................................................................................................................... 8ブート時のセキュリティ................................................................................................................................................ 8

第 2 章: ブート イメージ レイアウト........................................................................................................ 9Zynq-7000 SoC のブートおよびコンフィギュレーション ........................................................................................... 9Zynq UltraScale+ MPSoC のブートおよびコンフィギュレーション ........................................................................ 18Versal ACAP ブート イメージの形式...........................................................................................................................30

第 3 章: ブート イメージの作成................................................................................................................. 43ブート イメージ フォーマット (BIF)........................................................................................................................... 43BIF 構文およびサポートされるファイルの種類..........................................................................................................44属性................................................................................................................................................................................48

第 4 章: Bootgen インターフェイスの使用...................................................................................... 59Bootgen GUI のオプション......................................................................................................................................... 59コマンド ラインで Bootgen を使用............................................................................................................................ 60コマンドおよび説明......................................................................................................................................................60

第 5 章: ブート時のセキュリティ ............................................................................................................. 65暗号化の使用.................................................................................................................................................................66認証の使用.....................................................................................................................................................................76HSM モードの使用........................................................................................................................................................88

第 6 章: FPGA のサポート.............................................................................................................................. 116暗号化および認証....................................................................................................................................................... 116HSM モード.................................................................................................................................................................117

第 7 章: ユース ケースおよび例.................................................................................................................120Zynq MPSoC ユース ケース.......................................................................................................................................120Versal ACAP のユース ケース.................................................................................................................................... 129

第 8 章: BIF 属性のリファレンス............................................................................................................ 140aarch32_mode............................................................................................................................................................140aeskeyfile....................................................................................................................................................................141

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 2

Page 3: Bootgen ユーザー ガイド - Xilinx

a_hwrot....................................................................................................................................................................... 144alignment................................................................................................................................................................... 144auth_params.............................................................................................................................................................. 145authentication............................................................................................................................................................147big_endian.................................................................................................................................................................. 148bbram_kek_iv............................................................................................................................................................. 149bh_kek_iv.....................................................................................................................................................................150bh_keyfile....................................................................................................................................................................150bh_key_iv.....................................................................................................................................................................151bhsignature................................................................................................................................................................152blocks.......................................................................................................................................................................... 152boot_device................................................................................................................................................................ 154bootimage.................................................................................................................................................................. 156bootloader..................................................................................................................................................................158bootvectors................................................................................................................................................................ 159boot_config.................................................................................................................................................................159checksum....................................................................................................................................................................160copy.............................................................................................................................................................................161core............................................................................................................................................................................. 161delay_handoff............................................................................................................................................................ 162delay_load...................................................................................................................................................................163destination_cpu......................................................................................................................................................... 163destination_device.....................................................................................................................................................164early_handoff............................................................................................................................................................. 165efuse_kek_iv................................................................................................................................................................165efuse_user_kek0_iv.................................................................................................................................................... 166efuse_user_kek1_iv.................................................................................................................................................... 166encryption.................................................................................................................................................................. 166exception_level...........................................................................................................................................................168familykey.................................................................................................................................................................... 169file................................................................................................................................................................................170fsbl_config.................................................................................................................................................................. 170headersignature........................................................................................................................................................ 171hivec............................................................................................................................................................................ 172id..................................................................................................................................................................................173image.......................................................................................................................................................................... 174init................................................................................................................................................................................174keysrc.......................................................................................................................................................................... 175keysrc_encryption......................................................................................................................................................176load............................................................................................................................................................................. 177metaheader................................................................................................................................................................178name........................................................................................................................................................................... 179offset........................................................................................................................................................................... 179parent_id.....................................................................................................................................................................180partition...................................................................................................................................................................... 181partition_owner、owner...........................................................................................................................................182partition_type.............................................................................................................................................................183

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 3

Page 4: Bootgen ユーザー ガイド - Xilinx

pid................................................................................................................................................................................184pmufw_image............................................................................................................................................................ 184ppkfile......................................................................................................................................................................... 185presign........................................................................................................................................................................186pskfile..........................................................................................................................................................................186puf_file........................................................................................................................................................................ 187reserve........................................................................................................................................................................ 188s_hwrot....................................................................................................................................................................... 189split..............................................................................................................................................................................190spkfile..........................................................................................................................................................................191spksignature.............................................................................................................................................................. 192spk_select................................................................................................................................................................... 193sskfile.......................................................................................................................................................................... 194startup........................................................................................................................................................................ 195TrustZone................................................................................................................................................................... 196type............................................................................................................................................................................. 197udf_bh......................................................................................................................................................................... 197udf_data......................................................................................................................................................................198xip_mode.................................................................................................................................................................... 199

第 9 章: コマンド リファレンス............................................................................................................... 200arch............................................................................................................................................................................. 200authenticatedjtag...................................................................................................................................................... 200bif_help....................................................................................................................................................................... 201dual_ospi_mode......................................................................................................................................................... 201dual_qspi_mode.........................................................................................................................................................202dump...........................................................................................................................................................................202dump_dir.................................................................................................................................................................... 203efuseppkbits...............................................................................................................................................................203encrypt........................................................................................................................................................................204encryption_dump...................................................................................................................................................... 204fill................................................................................................................................................................................. 205generate_hashes....................................................................................................................................................... 205generate_keys............................................................................................................................................................ 206h、help....................................................................................................................................................................... 207image.......................................................................................................................................................................... 207log................................................................................................................................................................................208nonbooting.................................................................................................................................................................209o...................................................................................................................................................................................209p...................................................................................................................................................................................210padimageheader....................................................................................................................................................... 210process_bitstream..................................................................................................................................................... 211read............................................................................................................................................................................. 211spksignature.............................................................................................................................................................. 212split..............................................................................................................................................................................212verify........................................................................................................................................................................... 213verify_kdf.................................................................................................................................................................... 213

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 4

Page 5: Bootgen ユーザー ガイド - Xilinx

w.................................................................................................................................................................................. 214zynqmpes1................................................................................................................................................................. 214

第 10 章: 初期化ペアおよび INIT ファイルの属性...................................................................... 215

第 11 章: CDO ユーティリティ .................................................................................................................. 216アクセス...................................................................................................................................................................... 216使用法..........................................................................................................................................................................216例................................................................................................................................................................................. 217

第 12 章: Bootgen ユーティリティ ........................................................................................................ 219

付録 A: その他のリソースおよび法的通知........................................................................................221Documentation Navigator およびデザイン ハブ.................................................................................................... 221ザイリンクス リソース...............................................................................................................................................221その他のリソース....................................................................................................................................................... 221お読みください: 重要な法的通知...............................................................................................................................222

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 5

Page 6: Bootgen ユーザー ガイド - Xilinx

改訂履歴次の表に、この文書の改訂履歴を示します。

セクション 改訂内容2020 年 12 月 15 日 バージョン 2020.2

Versal 認証サポート マイナーな修正。2020 年 11 月 24 日 バージョン 2020.2

資料全体 グレー/難読化キーは、Versal™ デバイスでは廃止予定。authenticatedjtag securedebugimage を authenticatedjtag コマンドに置換。HSM を使用した Versal デバイス ブート イメージの作成 新しいセクションを追加。a_hwrot および s_hwrot 新規属性。資料全体 BIF コードの新しい例を追加。既存 PDI への新規パーティションの追加 手順をアップデート。既存 PDI での PLM の置換 手順をアップデート。

2020 年 6 月 3 日 バージョン 2020.1

資料全体 マイナーな編集上の変更。NIST SHA-3 のサポート 認証署名の表をアップデート。HSM モードを使用した Zynq-7000 SoC デバイス ブート イメージの作成 セクションをアップデート。

オフセット属性を使用した分割 新しいセクションを追加。aeskeyfile セクションをアップデート。

2019 年 10 月 30 日 バージョン 2019.2

資料全体 マイナーな編集上の変更。第 2 章 Zynq UltraScale+ MPSoC セキュア ヘッダー が追加されています。第 5 章 HSM モードを使用した Zynq-7000 SoC デバイス ブート イメージの作成を更新。付録 B 次の属性を追加:

• aarch32_mode

• big_endian

付録 C verify_kdf コマンドを追加。HSM モードの使用 ステージ 0 エレメントに PPK 入力を追加

2019 年 5 月 22 日 バージョン 2019.1

資料全体 マイナーな編集上の変更。

改訂履歴

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 6

Page 7: Bootgen ユーザー ガイド - Xilinx

第 1 章

概要ザイリンクス FPGA およびシステム オン チップ (SoC) デバイス、ACAP (Adaptive Compute Acceleration Platform) には、設計どおりにブートおよび機能するようにするため、通常複数のハードウェアおよびソフトウェア バイナリが含まれます。これらのバイナリには、FPGA ビットストリーム、ファームウェア イメージ、ブートローダー、オペレーティング システム、およびユーザー指定のアプリケーションが含まれ、非セキュアな方法とセキュアな方法の両方でロード可能です。Bootgen は、バイナリ ファイルを統合してデバイス ブート イメージを生成するザイリンクス ツールです。このツールは、ザイリンクス デバイスで使用するブート イメージの作成時に入力される複数のプロパティ、属性、およびパラメーターを定義します。ザイリンクス デバイスのセキュア ブート機能には、公開キーおよび秘密キーの暗号化アルゴリズムを使用します。Bootgen は、各パーティションに特定のデスティネーション メモリ アドレスとアライメント要件を指定します。また、暗号化の使用および認証の使用で説明するように、暗号化と認証もサポートされます。より高度な認証フローとキー管理オプションについては、HSM モードの使用で説明されています。HSM モードでは、Bootgen で秘密キーを使用してオフラインで署名可能な中間ハッシュ ファイルを出力し、ブート イメージに含まれる認証証明に署名できます。このプログラムは、パーティション リストにヘッダー ブロックを加えることによりブート イメージを構築します。オプションで、各パーティションを Bootgen で暗号化および認証できます。出力は、システムのブート フラッシュ メモリに直接プログラム可能な 1 つのファイルです。認証および暗号化をサポートするさまざまな入力ファイルも、このツールで生成できます。詳細は、BIF 構文およびサポートされるファイルの種類 を参照してください。Bootgen には、GUI インターフェイスとコマンド ライン オプションがあります。Bootgen は Vitis™ 統合開発環境(IDE) に統合されており、基本的なブート イメージは GUI で生成できますが、Bootgen オプションの大部分はコマンド ラインで指定します。コマンド ライン オプションはスクリプトに記述できます。Bootgen ツールには、ブート イメージ フォーマット (BIF) コンフィギュレーション ファイル (*.bif) を入力します。Bootgen では、ザイリンクスSoC および ACAP に加え、ザイリンクス 7 シリーズ 以降の FPGA のパーティションを暗号化および認証できます(FPGA のサポートを参照)。ブート イメージの動作を定義するコマンドおよび属性がサポートされているだけでなく、Bootgen での作業に役立つユーティリティもあります。Bootgen のコードは、GitHub から入手できます。

この資料に関連する設計プロセスザイリンクスの資料は、開発タスクに関連する内容を見つけやすいように、標準設計プロセスに基づいて構成されています。この資料では、次の設計プロセスについて説明します。• システム/ソリューション プランニング: システム レベルのコンポーネント、パフォーマンス、I/O、およびデータ転送要件を特定します。ソリューションの PS、PL、および AI エンジン へのアプリケーション マップも含まれます。

• エンベデッド ソフトウェア開発: ハードウェア プラットフォームからソフトウェア プラットフォームを作成し、エンベデッド CPU を使用してアプリケーションを開発します。XRT および Graph API も含まれます。

第 1 章: 概要

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 7

Page 8: Bootgen ユーザー ガイド - Xilinx

Bootgen のインストールブート イメージを簡単に作成するには Bootgen を GUI モードで使用し、より複雑なブート イメージを作成する場合はコマンド ライン モードで使用します。Bootgen は、Vivado Design Suite インストーラーでインストールできます。Vivado® Design Suite をインストールすると、Vitis ソフトウェア プラットフォームが使用できるようになります。または、個別にダウンロードしてインストールすることも可能です。可能なすべてのインストール オプションの詳細は、『Vivado Design Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973) を参照してください。Vivado から Bootgen をインストールするには、ザイリンクス ダウンロード サイトに移動し、Vivado 自己解凍型インストーラーを選択します。Vivado をインストールする際に Vitis をインストールするオプションを選択します。Bootgen は Vitis と共に含まれます。また、Vitis インストーラーから Bootgen をインストールすることもできます。Vitis 自己解凍型インストーラーは、ザイリンクス ダウンロード サイトにあります。Vitis と Bootgen をインストールしたら、Vitis GUI または XSCT からこのツールを呼び出して使用できます。SDK GUI オプションには、短時間での開発および試行を可能にする最も一般的なアクションが含まれています。コマンド ライン オプションには、ブート イメージを作成するためのさらに多くのオプションが用意されています。GUI およびコマンド ライン オプションの詳細は、第 4 章: Bootgen インターフェイスの使用を参照してください。• Vitis GUI からの起動および使用は、Bootgen の GUI オプションを参照してください。• コマンド ラインからの使用は、コマンド ラインでの Bootgen オプションの使用を参照してください。

ブート時のセキュリティ最新の認証方法によるセキュア ブートは、ザイリンクス デバイス上で認証されていないコードまたは変更されたコードが実行されないようにし、さまざまな暗号化テクニックがロードされるためイメージにアクセスできるのは承認されたプログラムのみとなります。デバイス固有のハードウェア セキュリティ機能の詳細は、次の資料を参照してください。• 『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585: 英語版、日本語版)

• 『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)

• 『Versal ACAP テクニカル リファレンス マニュアル』 (AM011)

Bootgen を使用する場合のコンテンツの暗号化および認証の詳細は、暗号化の使用および認証の使用を参照してください。Bootgen ハードウェア セキュリティ モニター (HSM) モードでは、BIF 属性は RSA 秘密キーではなく公開キーを使用するため、キー処理のセキュリティが向上します。HSM はセキュア キー/署名生成デバイスであり、秘密キーを生成し、秘密キーを使用してパーティションの暗号化を実行し、RSA キーの公開部分を Bootgen に供給します。秘密キーが HSM の外部に出ることはありません。Bootgen HSM モードでの場合は、BIF は HSM によって生成された公開キーと署名を使用します。詳細は、HSM モードの使用を参照してください。

第 1 章: 概要

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 8

Page 9: Bootgen ユーザー ガイド - Xilinx

第 2 章

ブート イメージ レイアウトこのセクションでは、各アーキテクチャのブート イメージのフォーマットについて説明します。• Zynq-7000 デバイスでの Bootgen の使用に関しては、Zynq-7000 SoC のブートおよびコンフィギュレーションを参照してください。

• Zynq® UltraScale+™ MPSoC デバイスでの Bootgen の使用に関しては、Zynq UltraScale+ MPSoC のブートおよびコンフィギュレーションを参照してください。

• ザイリンクス デバイスでの Bootgen の使用方法に関しては、第 6 章: FPGA のサポートを参照してください。• Versal™ ACAP の詳細は、Versal ACAP ブート イメージの形式 を参照してください。ブート イメージをビルドするには、次の手順を実行します。1. BIF ファイルを作成します。2. ブート イメージを作成する Bootgen 実行ファイルを実行します。注記: Quick Emulator (QEMU) では、バイナリ ファイルをブート デバイスに対応するイメージ フォーマットに変換する必要があります。

入力ファイルは必ずしもデバイスごとに異なるわけではありませんが (たとえば、すべてのデバイスで ELF ファイルを入力ファイルとしてブート イメージの一部に含めることが可能)、ブート イメージの形式は異なります。次のトピックでは、各デバイスに必要なブート ヘッダー、イメージ ヘッダー、パーティション ヘッダー、初期化、および認証証明ヘッダーのフォーマットについて説明します。

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 (Waitfor Event) 命令が実行されます。bootROM の主なタスクは、システムをコンフィギュレーションし、FSBL をブートデバイスからオンチップ メモリ (OCM) にコピーした後、コードの実行を OCM に分岐します。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 9

Page 10: Bootgen ユーザー ガイド - Xilinx

非セキュアな環境では、FSBL を Quad-SPI または NOR デバイスから直接実行するオプションもあります。マスターブート デバイスは、1 つまたは複数のブート イメージを保持します。1 つのブート イメージは、ブート ヘッダーとFSBL (第 1 段階ブートローダー) で構成されます。ブート イメージにはさらに、プログラマブル ロジック (PL)、SSBL(第 2 段階ブートローダー)、およびエンベデッド オペレーティング システムとアプリケーションが含まれます。ただし、bootROM はこれらにアクセスできません。bootROM の実行フローは、ブート モードのピン ストラップ設定、ブート ヘッダー、およびシステムの影響を受けます。bootROM は、暗号化された FSBL を使用するセキュアな環境または非セキュアな環境のいずれでも実行できます。サポートされるブート モードは次のとおりです。• 開発およびデバッグのプライマリ モードは JTAG です。• デバイスのブートには、NAND、パラレル NOR、シリアル NOR (Quad-SPI)、およびセキュア デジタル (SD) フラッシュ メモリが使用されます。これらのブート モードの詳細は、『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585: 英語版、日本語版) を参照してください。一般的なブートおよびコンフィギュレーションに関する質問および回答は、Zynq-7000 - ブートおよびコンフィギュレーション (ザイリンクス アンサー 52538) を参照してください。

Zynq-7000 SoC のブート イメージ レイアウト次の図に、Zynq®-7000 SoC ブート イメージに含まれるコンポーネントを示します。

図 1: ブート ヘッダー

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)

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 10

Page 11: Bootgen ユーザー ガイド - Xilinx

Zynq-7000 SoC のブート ヘッダーBootgen は、ブート イメージの先頭にブート ヘッダーを追加します。ブート ヘッダー テーブルは、FSBL などのプライマリ ブートローダーのブートに関連する情報を含む構造です。ブート イメージには、このような構造が 1 つだけあります。bootROM はこのテーブルを解析して、FSBL がフラッシュのどこに格納されていて、OCM のどこにロードする必要があるかを判断します。一部の暗号化および認証に関連するパラメーターもここに格納されます。その他のブート イメージ コンポーネントは次のとおりです。• Zynq-7000 SoC のレジスタ初期化テーブル• Zynq-7000 SoC イメージ ヘッダー テーブル• Zynq-7000 SoC のイメージ ヘッダー• Zynq-7000 SoC のパーティション ヘッダー• Zynq-7000 SoC の認証証明ブート ヘッダーには、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 ブート ヘッダー チェックサム オフセット 0x20 〜 0x44 のワードの合計。ワードはリトル エンディアンと見なされます。

0x4c 〜 0x97 ユーザー定義フィールド 76 バイト

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 11

Page 12: Bootgen ユーザー ガイド - Xilinx

表 1: Zynq-7000 SoC ブート ヘッダー (続き)

アドレス オフセット パラメーター 説明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 です。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 12

Page 13: Bootgen ユーザー ガイド - Xilinx

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 の認証証明 を参照してください。合計パーティション ワード長は、パディング付きの暗号化された情報、拡張、および認証の各長さの合計です。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 13

Page 14: Bootgen ユーザー ガイド - Xilinx

表 5: 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: FSBL1: UBOOT2、3: 予約

15 RSA 署名の有無0: RSA 認証証明なし1: RSA 認証証明あり

14:12 チェックサム タイプ0: なし1: MD52-7: 予約

11:8 予約 不使用7:4 デスティネーション デバイス

0: なし1: PS2: PL3: INT4-15: 予約

3:2 予約 不使用1:0 予約 不使用

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 14

Page 15: Bootgen ユーザー ガイド - Xilinx

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 イネーブル

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 15

Page 16: Bootgen ユーザー ガイド - Xilinx

表 8: Zynq-7000 SoC の認証証明ヘッダー (続き)

ビット オフセット フィールド名 説明7:4 公開キー強度 0:2048

3:2 ハッシュ アルゴリズム 0: SHA256

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

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 16

Page 17: Bootgen ユーザー ガイド - Xilinx

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

X21320-081718

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 17

Page 18: Bootgen ユーザー ガイド - Xilinx

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

概要Zynq® UltraScale+™ MPSoC は、QSPI フラッシュ、SD カード、USB デバイス ファームウェア アップグレード (DFU)ホスト、NAND フラッシュ ドライブなどからのブートをサポートしています。この章では、セキュア モードと非セキュア モードの両方における各種デバイスからのブートアップ プロセスについて説明します。ブート プロセスは、プラットフォーム管理ユニット (PMU) およびコンフィギュレーション セキュリティ ユニット (CSU) により管理および実行されます。初期ブート時に、次の手順が実行されます。• パワーオン リセット (POR) により PMU がリセット状態から復帰します。• PMU が PMU ROM からのコードを実行します。• PMU が SYSMON とブートに必要な PLL を初期化し、低電力ドメインとフル電力ドメインをクリアして CSU のリセットを開放します。

PMU により CSU が開放されると、CSU は次を実行します。• FSBL またはユーザー アプリケーションによって認証が要求されているかを確認します。• 認証チェックを実行し、このチェックが成功した場合のみ次に進みます。そして、イメージに暗号化されたパーティションがあるかどうかをチェックします。

• 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 のブート イメージを示します。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 18

Page 19: Bootgen ユーザー ガイド - Xilinx

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

Boot Header

Register Initialization Table

Image Header Table

.

.

.

Header Authentication Certificate (Optional)

Image Header 1

_ _ _Image

Header 2Image 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)

X23449-102919

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

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

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 19

Page 20: Bootgen ユーザー ガイド - Xilinx

• Zynq UltraScale+ MPSoC の PUF ヘルパー データ• 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™-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 ベース アドレス。

0x30 ソース オフセット PMUFW がない場合は、FSBL の開始オフセットです。PMUFW がない場合は、FSBLPMUFW の開始です。

0x34 PMU イメージの長さ PMU ファームウェアの元のイメージの長さ (バイト)。(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 のワードの合計。ワードはリトル エンディアンと見なされます。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 20

Page 21: Bootgen ユーザー ガイド - Xilinx

表 9: Zynq UltraScale+ MPSoC デバイスのブート ヘッダー (続き)

アドレス オフセット パラメーター 説明0x4C-0x68 難読化/ブラックキーの格納 難読化キーまたはブラック キーを格納します。

0x6C シャッター値 PUF でシャッター オフセット時間およびシャッター オープン時間を設定する32 ビットの PUF_SHUT レジスタ値。

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 0x00x0、0x1: インテグリティ チェックなし。0x3: BI インテグリティ チェック用の SHA3。

PUF-HD 7:6 2 0x00x3: PUF HD はブート ヘッダーに格納されています。その他すべて : PUF HD はeFUSE に格納されています。

予約 5:0 6 0x0 今後の使用のため予約。必ず 0。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 21

Page 22: Bootgen ユーザー ガイド - Xilinx

Zynq UltraScale+ MPSoC のレジスタ初期化テーブルBootgen のレジスタ初期化テーブルの構造は、MIO マルチプレクサーの PS レジスタおよびフラッシュ デバイスのクロックを初期化するのに使用される 256 のアドレスと値のペアです。詳細は、第 10 章: 初期化ペアおよび INIT ファイルの属性を参照してください。表 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 バージョン

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

0x04 イメージ ヘッダー数 イメージ ヘッダーの数を指定します。0x08 第一パーティション ヘッダー オフセット 第一パーティション ヘッダーを指すポインター (ワード オフセット)。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 22

Page 23: Bootgen ユーザー ガイド - Xilinx

表 13: Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー テーブル (続き)

アドレス オフセット パラメーター 説明0x0C 第一イメージ オフセット ヘッダー 第一イメージ ヘッダーを指すポインター (ワード オフセット)。0x10 ヘッダー認証証明 ヘッダー認証証明を指すポインター (ワードオフセット)。0x14 セカンダリ ブート デバイス オプションは次のとおりです。

0: 同じブート デバイス1: QSPI-322: QSPI-243: NAND4: SD05: SD16: SDLS7: MMC8: USB9: ETHERNET10: PCIE11: SATA

0x18 〜 0x38 パディング 予約 (0x0)

0x3C チェックサム イメージ ヘッダーの以前のワードすべての合計値。

Zynq UltraScale+ MPSoC のイメージ ヘッダーイメージ ヘッダーについてイメージ ヘッダーは、ELF ファイル、ビットストリーム、データ ファイルなど、各イメージに関連する情報を含む構造の配列です。各イメージに複数のパーティションを含めることができます。たとえば、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 の倍数バイトです。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 23

Page 24: Bootgen ユーザー ガイド - Xilinx

表 14: Zynq UltraScale+ MPSoC デバイスのイメージ ヘッダー (続き)

アドレス オフセット パラメーター 説明不定 ストリング ターミネーター (終端名)

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 ヘッダー チェックサム パーティション ヘッダーの以前のワードの合計値。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 24

Page 25: Bootgen ユーザー ガイド - Xilinx

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: FSBL1: U-Boot2、3: 予約

15 RSA 認証証明フォーマット0: RSA 認証証明なし1: RSA 認証証明あり

14:12 チェックサム タイプ0: なし1 〜 2: 予約3: SHA34 〜 7: 予約

11:8 デスティネーション CPU0: なし1: A53-02: A53-13: A53-24: A53-35: R5-06: R5-17: R5-ロックステップ8: PMU9 〜 15: 予約

7 暗号化の有無0: 暗号化なし1: 暗号化あり

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 25

Page 26: Bootgen ユーザー ガイド - Xilinx

表 16: Zynq® UltraScale+™ MPSoC デバイスのパーティション属性ビット (続き)

ビット オフセット フィールド名 説明6:4 デスティネーション デバイス

0: なし1: PS2: PL3 〜 15: 予約

3 A5X 実行ステート0: AARCH64 (デフォルト)1: AARCH32

2:1 例外レベル0: EL01: EL12: EL23: EL3

0 TrustZone0: 非セキュア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))

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 26

Page 27: Bootgen ユーザー ガイド - Xilinx

表 17: Zynq UltraScale+ MPSoC デバイスの認証証明 (続き)

認証証明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 eFUSE10: ユーザー eFUSE

17:16 PPK キー選択0: PPK01: 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: 2048b1: 40962 〜 3: 予約

3:2 ハッシュ アルゴリズム1: SHA3/3842 〜 3: 予約

1:0 公開キー アルゴリズム0: 予約1: RSA2: 予約3: 予約

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 27

Page 28: Bootgen ユーザー ガイド - Xilinx

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

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

AES

Partition#0 (FSBL) Partition#1 Partition#2

Contents Contents Contents

Secure Header Key0 IV0 - IV1 Key0 IV0+0x01 Key1 IV1 Key0 IV0+0x02 Key1 IV1

Block #0 Key0 IV1 - - Key1 IV1 - - Key1 IV1 - -

AES with Key rolling

Partition#0 (FSBL) Partition#1 Partition#2

Contents Contents Contents

Secure Header Key0 IV0 - IV1 Key0 IV0+0x01 Key1 IV1 Key0 IV0+0x02 Key1 IV1

Block #0 Key0 IV1 Key 2 IV2 Key1 IV1 Key2 IV2 Key1 IV1 Key2 IV2

Block #1 Key2 IV2 Key 3 IV3 Key2 IV2 Key 3 IV3 Key2 IV2 Key 3 IV3

Block #2 Key3 IV3 Key 4 IV4 Key3 IV3 Key 4 IV4 Key3 IV3 Key 4 IV4

… … … … … … … … … … … … …

EncryptedUsing

EncryptedUsing

EncryptedUsing

EncryptedUsing

EncryptedUsing

EncryptedUsing

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

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 28

Page 29: Bootgen ユーザー ガイド - Xilinx

図 5: Zynq UltraScale+ MPSoC デバイスのブート イメージ ブロック図

Boot Header 0x000-0xEC0

Image Header TableImage Headers (IH1-Ihn)

Partition Header 1

Partition Header nHeader 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 HeaderSPK IDHeader

SPKHeader

SPK SignatureBH Signature

Partition Signature

Header AC

User Defined FieldPPK

AC HeaderSPK IDBootLoader

SPKBootLoader

SPK SignatureBH Signature

Partition Signature

User Defined FieldPPK

AC HeaderSPK IDPartition1

SPKPartition1

SPK SignatureBH Signature

Partition Signature

User Defined FieldPPK

AC HeaderSPK IDPartition(n)

SPKPartition(n)

SPK SignatureBH Signature

Partition Signature

User Defined FieldPPK

X#####-122118X18916-081518

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 29

Page 30: Bootgen ユーザー ガイド - Xilinx

Versal ACAP ブート イメージの形式次の図は、プログラマブル デバイス イメージ (PDI) と呼ばれる Versal™ ACAP ブート イメージに含まれるコンポーネントを示しています。

プラットフォーム管理コントローラーVersal ACAP のプラットフォーム管理コントローラー (PMC) は、ブートおよびコンフィギュレーションといったVersal ACAP のプラットフォーム管理を担います。この章では、2 つの PMC MicroBlaze プロセッサ、ROM コード ユニット (RCU) とプラットフォーム処理ユニット (PPU) で処理されるブート イメージ形式について主に説明しています。• RCU: ROM コード ユニットには、三重冗長 MicroBlaze プロセッサと、bootROM 実行ファイルが格納される ROM

(読み出し専用メモリ) があります。bootROM 実行ファイルは、メタルマスクされており、変更できません。RCUの MicroBlaze プロセッサは、bootROM 実行ファイルの検証と実行に使用されます。また、RCU は起動後のセキュリティ監視と PUF (Physical Unclonable Function) 管理も担います。

• PPU: プラットフォーム処理ユニットには、三重冗長 MicroBlaze プロセッサと 384 KB の専用 PPU RAM があります。PPU の MicroBlaze は、PLM (プラットフォーム ローダーおよびマネージャー) を駆動します。

図 6: Versal ACAP のブート イメージ ブロック図

Boot Header

PMC CDO

Meta Headers

Partition 1 _ _ _Partition 2 Partition i

Partition 1 _ _ _Partition 2 Partition j

PLM

Image Header Table

Image Header 1 _ _ _Image Header 2 Image Header n

Partition Header 1 _ _ _Partition Header 2 Partition Header i

Partition 1 _ _ _Partition 2 Partition k

Partition Header 1 _ _ _Partition Header 2 Partition Header jImage 1

Image 2

Image n

Image 1

Image 2

Image n

..

Partition Header 1 _ _ _Partition

Header 2Partition Header

k

X22829-101520

Versal ACAP ブート ヘッダーブート ヘッダーは、PMC bootROM で使用されます。PMC bootROM は、ブート ヘッダーの属性設定に基づいて、PLM (Platform Loader and Manager) を検証して PPU RAM に読み込みます。最初の 16 バイトは SelectMAP Bus の検出に使用されます。PMC bootROM および PLM ではこのデータが無視されるので、Bootgen はチェックサム/SHA/RSA/暗号化などのどの動作にもこのデータを含めません。次のコードは、SelectMAP Bus 幅検出パターン ビットの例を示しています。Bootgen は、選択した幅ごとに、最初の 16 バイトへ次のデータを配置します。次のリストは、このイメージ ヘッダー幅と該当するビットをそれぞれ示しています。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 30

Page 31: Bootgen ユーザー ガイド - Xilinx

• X8: [LSB] 00 00 00 DD 11 22 33 44 55 66 77 88 99 AA BB CC [MSB]

• X16: [LSB] 00 00 DD 00 22 11 44 33 66 55 88 77 AA 99 CC BB [MSB]

• X32: [LSB] DD 00 00 00 44 33 22 11 88 77 66 55 CC BB AA 99 [MSB]

注記: デフォルトの SelectMAP 幅は X32 です。次の表は、Versal™ ACAP のブート ヘッダー形式を示しています。表 19: Versal ACAP のブート ヘッダー フォーマット

オフセット (16 進数) サイズ (バイト) 説明 詳細0x00 16 SelectMAP バス幅 SelectMAP バス幅を x8、x16、

x32 から指定します。0x10 4 QSPI バス幅 QSPI バス幅の記述。これは、

QSPI フラッシュがシングル/デュアル スタック モードであるか、デュアル パラレル モードであるかを識別するために必要です。これはリトル エンディアン フォーマットの0xAA995566 です。

0x14 4 イメージ ID ブート イメージの ID 文字列。バイト順に 4 バイトの「X」、「N」、「L」、「X」を含みます。これは、リトル エンディアンフォーマットの 0x584c4e58です。0x18 4 暗号化キー ソース このフィールドは、AES キーソース 0x00000000 を識別するために使用します。

0x00000000: 暗号化なし0xA5C3C5A3: eFUSE レッドキー0xA5C3C5A5: eFUSE ブラック キー0x3A5C3C5A: BBRAM レッドキー0x3A5C3C59: BBRAM ブラック キー0xA35C7C53: ブート ヘッダー ブラック キー

0x1C 4 PLM ソース オフセット PDI の PLM ソース開始アドレス0x20 4 PMC データ読み込みアドレス 読み込む PMC CDO アドレス0x24 4 PMC データ長 PMC CDO 長0x28 4 合計 PMC データ長 認証および暗号化オーバーヘッドを含む PMC CDO 長0x2C 4 PLM 長 PLM の元のイメージ サイズ0x30 4 合計 PLM 長 認証および暗号化オーバーヘッドを含む PLM イメージ サイズ0x34 4 ブート ヘッダー属性 ブート ヘッダー属性

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 31

Page 32: Bootgen ユーザー ガイド - Xilinx

表 19: Versal ACAP のブート ヘッダー フォーマット (続き)

オフセット (16 進数) サイズ (バイト) 説明 詳細0x38 32 ブラック キー 256 ビットのキーで、ブート ヘッダーで暗号化ステータスがブラック キーに設定されている場合にのみ使用可能です。0x58 12 ブラック IV ブラック キーを復号化する際に使用する初期化ベクター0x64 12 セキュア ヘッダー IV セキュア ヘッダーの初期化ベクター0x70 4 PUF シャッター値 PUF がシャッターを閉じる前にサンプリングする時間の長さ

注記: このシャッター値は、PUF 登録中に使用されたシャッター値と一致している必要があります。

0x74 12 PMC データのセキュア ヘッダー IVPMC データのセキュア ヘッダーを復号化する際に使用される IV。

0x80 68 予約 すべて 0 で生成されます。0xC4 4 メタ ヘッダー オフセット メタ ヘッダーの開始のオフセット。0xC8-0x124 88 予約0x128 2048 レジスタ初期化 システム レジスタ初期化用のレジスタ書き込みペアを格納0x928 1544 PUF ヘルパー データ PUF ヘルパー データ0xF30 4 チェックサム ヘッダー チェックサム0xF34 76 SHA3 パディング SHA3 標準パディング

ブート ヘッダー属性次の表に、イメージ属性を示します。表 20: Versal ACAP のブート ヘッダー属性

フィールド名 ビット オフセット 幅 デフォルト 説明予約 [31:18] 14 0x0 今後の使用のため予約、

0 にする必要あり。PUF モード [17:16] 2 0x0 0x3: PUF 4K モード。

0x0: PUF 12K モード。ブート ヘッダー認証 [15:14] 2 0x0 0x3: PPK ハッシュと

SPK ID の検証を除き、ブート イメージの認証が実行されます。その他すべて : 認証はeFUSE RSA/ECDSA ビットに基づいて決定されます。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 32

Page 33: Bootgen ユーザー ガイド - Xilinx

表 20: Versal ACAP のブート ヘッダー属性 (続き)

フィールド名 ビット オフセット 幅 デフォルト 説明

予約 [13:12] 2 0x0 今後の使用のために予約済みで、0 にする必要あり。DPA カウンター値 [11:10] 2 0x0 0x3: イネーブル

それ以外はディスエーブル (eFUSE がこれよりも優先)

チェックサムの選択 [9:8] 2 0x0 0x0、0x1、0x2: 予約0x3: SHA3 をチェックサムを実行するハッシュ関数として使用

PUF HD [7:6] 2 0x0 0x3: PUF HD はブートヘッダーに格納その他すべて : PUF HDは eFUSE に格納

予約 [5:0] 6 0x0 予約

Versal ACAP イメージ ヘッダー テーブル次の表に、PDI イメージに関する一般情報を示します。表 21: Versal ACAP イメージ ヘッダー テーブル

オフセット 名前 説明0x0 バージョン 0x00030000(v3.0): セキュア チャンク サイズを 64 KB から 32 KB に変更します。

0x00020000(v2.00)

0x4 イメージの合計数 PDI に含まれるイメージの総数。0x8 イメージ ヘッダーのオフセット 最初のイメージ ヘッダーを開始するアドレス0xC パーティションの合計数 PDI に含まれるパーティションの総数。0x10 パーティション ヘッダーのオフセット パーティション ヘッダーの開始までのオフセット0x14 セカンダリ ブート デバイス アドレス セカンダリ イメージのあるアドレスを示します。

属性にセカンダリ ブート デバイスがある場合にのみ使用できます。0x1C イメージ ヘッダー テーブルの属性 表 22: Versal ACAP イメージ ヘッダー テーブルの属性 を参照してください。0x20 PDI ID PDI の識別子0x24 親 ID 初期ブート PDI の ID。ブート PDI の場合、PDI ID と同じになります。0x28 ID 文字列 ブート ヘッダーが含まれるフル PDI -

FPDIパーシャル/サブシステム PDI – PPDI

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 33

Page 34: Bootgen ユーザー ガイド - Xilinx

表 21: Versal ACAP イメージ ヘッダー テーブル (続き)

オフセット 名前 説明0x2C ヘッダーのサイズ 0 〜 7: イメージ ヘッダー テーブルのサイズ (ワード数)

8 〜 15: イメージ ヘッダーのサイズ (ワード数)16 〜 23: パーティション ヘッダーのサイズ (ワード数)24 〜 31: 予約済み

0x30 メタ ヘッダーの合計長 認証および暗号化オーバーヘッドを含みます (IHT は含まず AC は含む)。0x34 〜 0x3C メタ ヘッダーの暗号化用の IV ヘッダー テーブルの SH 暗号化用の IV

0x40 暗号化ステータス 暗号化キー ソース。PLM に使用されるキー ソースのみがメタ ヘッダーで有効になります。0x00000000: 暗号化なし0xA5C3C5A3: eFuse レッド キー0xA5C3C5A5: eFUSE ブラック キー0x3A5C3C5A: BBRAM レッド キー0x3A5C3C59: BBRAM ブラック キー0xA35C7C53: ブート ヘッダー ブラックキー

0x48 メタ ヘッダー AC オフセット (ワード) メタ ヘッダー認証証明へのワード オフセット0x4c メタ ヘッダー ブラック/IV メタ ヘッダーを暗号化するのに使用したブラック キーを暗号化するのに使用する

IV。0x44 ~ 0x78 予約 0x0

0x7C チェックサム イメージ ヘッダー テーブルの前のワードの合計

イメージ ヘッダー テーブルの属性次の表に、イメージ ヘッダー テーブルについて説明します。表 22: Versal ACAP イメージ ヘッダー テーブルの属性

ビット フィールド 名前 説明31:14 予約 0

14 PUF ヘルパー データのディレクトリ PUF ヘルパー データ efuse/BH のディレクトリ12 dpacm enable DPA カウンター測定をイネーブルにするかしないかを指定します。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 34

Page 35: Bootgen ユーザー ガイド - Xilinx

表 22: Versal ACAP イメージ ヘッダー テーブルの属性 (続き)

ビット フィールド 名前 説明11:6 セカンダリ ブート デバイス 残りのデータを含めるデバイスを指定します。

0: 同じブート デバイス (デフォルト)1: QSPI322: QSPI243: NAND4: SD05: SD16: SDLS7: MMC8: USB9: ETHERNET10: PCIe11: SATA12: OSPI13: SMAP14: SBI15: SD0RAW16: SD1RAW17: SDLSRAW18: MMCRAW19: MMC020: MMC0RAWその他はすべて予約注記: これらのオプションは、Bootgen のさまざまなデバイスでサポートされます。デバイスでサポートされるセカンダリ ブート デバイスのリストについては、該当するデバイスの SSDG を参照してください。

5:0 予約

Versal ACAP イメージ ヘッダーイメージ ヘッダーは、ELF ファイル、CFI、CDO、データ ファイルなど、各イメージに関連する情報を含む構造の配列です。各イメージに複数のパーティションを含めることができます。たとえば、ELF には複数のロード可能なセクションを含めることができ、それぞれがブート イメージ内にパーティションを形成します。イメージ ヘッダーは、このイメージに関連付けられたパーティション (パーティション ヘッダー) を指定します。BIF キーワード image を使用すると、複数のパーティション ファイルを 1 つのイメージにグループ化できます。これは、共通のサブシステムまたは関数に関連するパーティションを 1 つのグループにまとめるのに便利です。Bootgen は各ファイルに必要なパーティションを作成して、そのイメージに共通のイメージ ヘッダーを作成します。次の表には、イメージに関連するパーティション数の情報も含まれます。表 23: Versal ACAP イメージ ヘッダー

オフセット 名前 説明0x0 第 1 パーティション ヘッダー 第 1 パーティション ヘッダーまでのワード オフセット

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 35

Page 36: Bootgen ユーザー ガイド - Xilinx

表 23: Versal ACAP イメージ ヘッダー (続き)

オフセット 名前 説明0x4 パーティションの数 このイメージのパーティション数0x8 取り消し ID メタ ヘッダーの取り消し ID

0xC イメージ属性 イメージ属性の表を参照0x10 〜 0x1C イメージの名前 イメージの ASCII 名。最大 16 文字まで。パディングが必要な場合は 0 で埋められます。

0x20 イメージ/ノード ID イメージを初期化するリソース ノードを定義します。0x24 固有 ID デバイス リソースで必要な場合にアフィニティ/互換性指示子を定義します。0x28 親の固有 ID イメージのコンフィギュレーション内容に必要な親リソース UID を定義します

(必要な場合)。0x2c 関数 ID イメージ コンフィギュレーション データの固有関数をキャプチャするために使用される識別子0x30 イメージ コピーの DDR 下位アドレス BIF で memcpy がイネーブルの場合にイメージをコピーする必要のある DDR の下位 32 ビット アドレス0.34 イメージ コピーの DDR 上位アドレス BIF で memcpy がイネーブルの場合にイメージをコピーする必要のある DDR の上位 32 ビット アドレス0x38 予約0x3C チェックサム 前のワードすべての合計。

次の表に、イメージ ヘッダーの属性を示します。表 24: Versal ACAP イメージ ヘッダーの属性

ビット フィールド 名前 説明31:9 予約 0

8 遅延ハンドオフ 0: イメージを今すぐハンドオフします(デフォルト)。1: イメージを後でハンドオフします。

7 遅延読み込み 0: イメージを今すぐ読み込みます (デフォルト)。1: イメージを後で読み込みます。

6 メモリへのコピー 0: メモリにコピーしません (デフォルト)。1: イメージをメモリにコピーします。

5:3 イメージ オーナー 0: PLM (デフォルト)1: PLM 以外2 〜 7: 予約

2:0 予約 0

Versal ACAP パーティション ヘッダーパーティション ヘッダーには、次の表に示すパーティションの詳細が含まれます。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 36

Page 37: Bootgen ユーザー ガイド - Xilinx

表 25: Versal ACAP パーティション ヘッダー テーブルオフセット 名前 説明

0x0 パーティションのデータ ワード長 暗号化されたパーティション データの長さ。0x4 抽出されたデータ ワード長 暗号化されていないデータの長さ。0x8 パーティションの合計ワード長 (認証証明を含む)

暗号化、パディング、拡張、認証を加算した合計長さ。0xC 次のパーティション ヘッダー オフセット 次のパーティション ヘッダーのオフセット。0x10 デスティネーション実行アドレス (下位半分)

ロード後のこのパーティションの実行可能アドレスの下位 32 ビット。0x14 デスティネーション実行アドレス (上位半分)

ロード後のこのパーティションの実行可能アドレスの上位 32 ビット。0x18 デスティネーション読み込みアドレス (下位半分)

このパーティションがロードされる RAMアドレスの下位 32 ビット。ELF ファイルの場合、Bootgen が自動的に ELF フォーマットから読み出されます。RAW データを使用する場合は、読み込み先を指定する必要があります。CFI およびコンフィギュレーション データの場合は、0xFFFF_FFFF にする必要があります。

0x1C デスティネーション読み込みアドレス (上位半分)このパーティションがロードされる RAMアドレスの上位 32 ビット。ELF ファイルの場合、Bootgen が自動的に ELF フォーマットから読み出されます。RAW データを使用する場合は、読み込み先を指定する必要があります。CFI およびコンフィギュレーション データの場合は、0xFFFF_FFFF にする必要があります。

0x20 イメージのデータ ワード オフセット ブート イメージの開始に対するパーティション データの位置。0x24 属性ビット パーティション属性の表を参照。0x28 セクション数 イメージ タイプが ELF の場合は、この

ELF にさらにいくつのパーティションが関連付けられているかが示されます。0x2C チェックサム ワード オフセット ブート イメージ内のチェックサム ワードの位置。0x30 パーティション ID パーティション ID。0x34 認証証明ワード オフセット ブート イメージ内の認証証明の位置。

0x38 〜 0x40 IV パーティションのセキュア ヘッダー用IV。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 37

Page 38: Bootgen ユーザー ガイド - Xilinx

表 25: Versal ACAP パーティション ヘッダー テーブル (続き)

オフセット 名前 説明0x44 暗号化キー セレクト 暗号化ステータス:

0x00000000: 暗号化なし0xA5C3C5A3: eFuse レッド キー0xA5C3C5A5: eFuse ブラック キー0x3A5C3C5A: BBRAM レッド キー0x3A5C3C59: BBRAM ブラック キー0xA35C7C53: ブート ヘッダー ブラック キー0xC5C3A5A3: ユーザー キー 00xC3A5C5B3: ユーザー キー 10xC5C3A5C3: ユーザー キー 20xC3A5C5D3: ユーザー キー 30xC5C3A5E3: ユーザー キー 40xC3A5C5F3: ユーザー キー 50xC5C3A563: ユーザー キー 60xC3A5C573: ユーザー キー 70x5C3CA5A3: eFuse ユーザー キー 00x5C3CA5A5: eFuse ユーザー ブラック キー 00xC3A5C5A3: eFuse ユーザー キー 10xC3A5C5A5: eFuse ユーザー ブラック キー 1

0x48 ブラック IV そのパーティションのキーを暗号化するために使用される IV。0x54 取り消し ID パーティション取り消し ID

0x58 〜 0x78 予約 0

0x7C ヘッダー チェックサム パーティション ヘッダーの以前のワードの合計値。

次の表に、パーティション ヘッダー テーブルの属性をリストします。表 26: Versal ACAP パーティション ヘッダー テーブル属性

ビット フィールド 名前 説明31:29 予約 0x0

28:27 DPA CM イネーブル 0: ディスエーブル1: イネーブル

26:24 パーティション タイプ 0: 予約1: ELF2: コンフィギュレーション データ オブジェクト3: Cframe データ (PL データ)4: 生のデータ5: 生の ELF6: CFI GSR CSC アンマスク フレーム7: CFI GSR CSC マスク フレーム

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 38

Page 39: Bootgen ユーザー ガイド - Xilinx

表 26: Versal ACAP パーティション ヘッダー テーブル属性 (続き)

ビット フィールド 名前 説明23 HiVec RPU/APU (32 ビット) プロセッサの

VInitHi 設定0: LoVec1: HiVec

22:19 予約 0

18 エンディアン 0: リトル エンディアン (デフォルト)1: ビッグ エンディアン

17:16 パーティション オーナー 0: PLM (デフォルト)1: PLM 以外2、3: 予約

15:14 PUF HD の場所 0: eFuse1: ブート ヘッダー

13:12 チェックサム タイプ 000b: チェックサムなし (デフォルト)011b: SHA3

11:8 デスティネーション CPU 0: なし (ELF 以外のファイルのデフォルト)1: A72-02: A72-13: 予約4: 予約5: R5-06: R5-17: R5-L8: PSM9: AIE10 〜 15: 予約

3 A72 CPU 実行ステート 0: Aarch64 (デフォルト)1: Aarch32

2:1 A72 コアを設定する必要のある例外レベル (EL)00b: EL001b: EL110b: EL211b: EL3 (デフォルト)

0 TZ セキュア パーティション 0: 非セキュア (デフォルト)1: セキュアこのビットは、PLM を設定する必要のある (このパーティションを実行する必要のある) コアを TrustZone セキュアとして設定するかしないかを指定します。デフォルトではこれは 0 になっているはずです。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 39

Page 40: Bootgen ユーザー ガイド - Xilinx

Versal ACAP 認証証明認証証明は、パーティションの認証に関連するすべての情報を含む構造です。この構造には、公開キーと、bootROM/PLM による検証が必要な署名が含まれます。各認証証明には認証ヘッダーがあります。このヘッダーは、キー サイズ、署名に使用するアルゴリズムなどの情報を提供します。ほかのデバイスとは異なり、認証証明は認証が有効になっているパーティションの先頭に追加されます。Bootgen でメタ ヘッダーに対して認証を実行するには、metaheader BIF 属性で明示的に指定します。使用方法の詳細は、第 8 章: BIF 属性のリファレンス を参照してください。Versal ACAP では RSA-4096 認証および認証用の ECDSA アルゴリズムが使用されます。次の表に、Versal ACAP の認証証明のフォーマットを示します。表 27: Versal ACAP 認証証明 – ECDSA p384

認証証明ビット 説明0x00 認証ヘッダー。Versal ACAP 認証証明ヘッダー を参照してください。0x04 Revoke ID

0x08 UDF (56 バイト)

0x40 PPK x (48 バイト)

y (48 バイト)

パッド 0x00 (932 バイト)

0x444 PPK SHA3 パッド (12 バイト)

0x450 SPK x (48 バイト)

y (48 バイト)

パッド 0x00 (932 バイト)

0x854 SPK SHA3 パッド (4 バイト)

0x858 アライメント (8 バイト)

0x860 SPK 署名 (r+s+パッド)(48+48+416))

0xA60 BH/IHT 署名 (r+s+パッド)(48+48+416))

0xC60 パーティション署名 (r+s+パッド)(48+48+416))

表 28: Versal ACAP 認証証明 – ECDSA p521

認証証明ビット 説明0x00 認証ヘッダー。Versal ACAP 認証証明ヘッダー を参照してください。0x04 Revoke ID

0x08 UDF (56 バイト)

0x40 PPK PPK x (66 バイト)

y (66 バイト)

パッド 0x00 (896 バイト)

0x444 PPK SHA3 パッド (12 バイト)

0x450 SPK SPK x (66 バイト)

y (66 バイト)

パッド 0x00 (896 バイト)

0x854 SPK SHA3 パッド (4 バイト)

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 40

Page 41: Bootgen ユーザー ガイド - Xilinx

表 28: Versal ACAP 認証証明 – ECDSA p521 (続き)

認証証明ビット 説明0x858 アライメント (8 バイト)

0x860 SPK 署名 (r+s+パッド)(66+66+380))

0xA60 BH/IHT 署名 (r+s+パッド)(66+66+380))

0xC60 パーティション署名 (r+s+パッド)(66+66+380))

表 29: Versal ACAP 認証証明 – RSA

認証証明ビット 説明0x00 認証ヘッダー。Versal ACAP 認証証明ヘッダー を参照してください。0x04 Revoke ID

0x08 UDF (56 バイト)

0x40 PPK Mod (512 バイト)

Mod Ext (512 バイト)

Exponent (4 バイト)

0x444 PPK SHA3 パッド (12 バイト)

0x450 SPK Mod (512 バイト)

Mod Ext (512 バイト)

Exponent (4 バイト)

0x854 SPK SHA3 パッド (4 バイト)

0x858 アライメント (8 バイト)

0x860 SPK 署名0xA60 BH/IHT 署名0xC60 パーティション署名

Versal ACAP 認証証明ヘッダー次の表に、Versal ACAP の認証証明ビット フィールドを示します。表 30: 認証ヘッダー ビット フィールド

ビット フィールド 説明 注記31:16 予約 0

15 〜 14 認証証明フォーマット 00: RSAPSS

13 〜 12 認証証明バージョン 00: 現在の AC

11 PPK キー タイプ 0: ハッシュ キー10 〜 9 PPK キー ソース 0: eFUSE

8 SPK イネーブル 1: SPK イネーブル7 〜 4 公開キー強度 0: ECDSA p384

1: RSA 40962: ECDSA p521

3 〜 2 ハッシュ アルゴリズム 1: SHA3

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 41

Page 42: Bootgen ユーザー ガイド - Xilinx

表 30: 認証ヘッダー ビット フィールド (続き)

ビット フィールド 説明 注記1 〜 0 公開キー アルゴリズム 1: RSA

2: ECDSA

注記:1. ブートローダー パーティション:

a. AC のオフセット 0xA60 にはブート ヘッダー署名が含まれます。b. AC のオフセット 0xC60 には PLM および PMCDATA 署名が含まれます。

2. ヘッダー テーブル:a. AC のオフセット 0xA60 には IHT 署名が含まれます。b. AC のオフセット 0xC60 には IHT 以外のすべてのヘッダーの署名が含まれます。

3. その他のパーティション:a. AC のオフセット 0xA60 は 0 で埋められます。b. AC のオフセット 0xC60 にはそのパーティションの署名が含まれます。

第 2 章: ブート イメージ レイアウト

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 42

Page 43: Bootgen ユーザー ガイド - Xilinx

第 3 章

ブート イメージの作成ブート イメージ フォーマット (BIF)

ザイリンクスのブート イメージ レイアウトには、ファイル、ファイルの種類、およびサポートするヘッダーが複数あり、これらのファイルはブートローダーによって解析されます。Bootgen は、ブート イメージを生成するための属性を定義し、ファイルで渡された値に基づいて解釈してブート イメージを生成します。使用可能なコマンドと属性は複数あるため、Bootgen はそれらの入力を含むブート イメージ フォーマット (BIF) を定義します。BIF は次のもので構成されています。• セキュア/非セキュア ブート イメージを作成するためのコンフィギュレーション属性• ブートローダー

○ Zynq® デバイスおよび Zynq® UltraScale+™ MPSoC の第 1 段階ブートローダー (FSBL)

○ Versal™ ACAP のプラットフォーム ローダーおよびマネージャー (PLM)

• 1 つまたは複数のパーティション イメージBootgen は、プロパティおよび属性に加えて、複数のコマンドを使用してビヘイビアーを定義し、ブート イメージを作成します。たとえば、認定されている FPGA デバイス、Zynq®-7000 SoC デバイス、Versal™ ACAP または Zynq®

UltraScale+™ MPSoC デバイスのブート イメージを作成するには、Bootgen に適切な arch コマンド オプションを指定する必要があります。次の付録で、Bootgen ビヘイビアーを指示する際に使用可能なオプションをリストして説明しています。• 第 7 章: ユース ケースおよび例• 第 8 章: BIF 属性のリファレンス• 第 9 章: コマンド リファレンスBIF は、ハードウェア要件とソフトウェア要件の両方に対応します。ブート ヘッダーは、1 つのパーティション (通常はブートローダー) をロードする bootROM ローダーで必要です。その他のブート イメージは、ブートローダーによってロードされて処理されます。Bootgen は一連のパーティションを組み合わせてブート イメージを生成します。次のパーティションが考えられます。• FSBL または PLM

• U-Boot といった SSBL (第 2 段階ブートローダー)

• ビットストリーム、PL、.cfi、または .npi データ• Linux

• プロセッサ上で実行するソフトウェア アプリケーション• ユーザー データ

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 43

Page 44: Bootgen ユーザー ガイド - Xilinx

• Bootgen で生成されたブート イメージ。これは、前に生成されたブート イメージに新しいパーティションを追加する際に便利です。

BIF 構文およびサポートされるファイルの種類BIF ファイルは、ブート イメージの各コンポーネントをブート順に指定し、オプションで各イメージ コンポーネントに属性を適用できるようにします。イメージ コンポーネントがメモリ内で連続していない場合、コンポーネントは複数のパーティションにマップできます。たとえば、ELF ファイルに複数のロード可能な非連続のセクションが含まれる場合、各セクションを個別のパーティションにすることができます。BIF ファイルの構文は次の形式となります。new_bif:{ id = 0x5 id_code = 0x04ca8093 extended_id_code = 0x01 image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x11, type = bootloader, file = /path/to/plm.elf } partition { type = pmcdata, load = 0xf2000000, file = /path/to/pmc_cdo.bin } }}

注記: 上記の形式は、Versal™ デバイスにのみ使用できます。<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 つまたは複数のデータ ファイルがリストされます。• 各パーティションのデータ ファイルには、ファイル名の前に構文 [attribute, attribute=<argument>] を使用して、オプションの属性を指定できます。

• 属性によって、データ ファイルに何らかの特性が適用されます。• 複数の属性がある場合は、カンマ (,) で区切って並べることができます。その場合の順序は重要ではありません。属性は、1 つのキーワードまたはクォーテーションで囲んだ複数のキーワードとなります。

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 44

Page 45: Bootgen ユーザー ガイド - Xilinx

• 現在のディレクトリにファイルがない場合は、ファイル名を含むファイル パスを追加できます。ファイルのリスト方法は自由形式で、1 行にすべてをリスト (スペースで区切る、最低 1 スペースは必要) しても、1 つずつと改行してもかまいません。

• スペースは無視されるため、読みやすいように追加しても問題ありません。• C 形式のブロック コメント /*...*/、または C++ 形式の行コメント // を使用できます。

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 45

Page 46: Bootgen ユーザー ガイド - Xilinx

次に、読みやすいように空白と改行を追加した BIF の例を示します。<bootimage_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 でサポートされるファイルを示します。表 31: Bootgen でサポートされるファイルサポートされるデバイス 拡張子 説明 注記

すべてのデバイスでサポート

.bin バイナリ 未処理のバイナリ ファイル。

.dtb バイナリ 未処理のバイナリ ファイル。image.gz バイナリ 未処理のバイナリ ファイル。.elf 実行可能リンク ファイル

(ELF)シンボルとヘッダーを除く。

.int レジスタ初期化ファイル

.nky AES キー

.pub/.pem RSA キー

.sig 署名ファイル Bootgen または HSM によって生成される署名ファイル。

Versal

.cfi/.rcfi CFI ファイル Versal デバイスのみ。

.cdo/.rcdo/.npi/ .rnpi CDO ファイル コンフィギュレーション データ オブジェクト ファイル。Versal デバイスのみ。

.bin/.pdi ブート イメージ Bootgen を使用して生成したブート イメージ。Zynq-7000/Zynq UltraScale+MPSoC/FPGA

.bit/.rbt ビットストリーム BIT ファイル ヘッダーを除く。

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 46

Page 47: Bootgen ユーザー ガイド - Xilinx

Versal ACAP デバイスの BIF 構文次の例に、パーティションをまとめて BIF を詳細に記述する方法を示します。BIF 構文は Versal ACAP 用に変更されており、複数のパーティションをまとめて 1 つのイメージを形成するサブシステムのコンセプト (1 つのイメージ ヘッダーのサブシステムとも呼ばれる) がサポートされるようになっています。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys id = 0x1c000001 partition { id = 0x01 type = bootloader file = gen_files/executable.elf } partition { id = 0x09 type = pmcdata, load = 0xf2000000 file = topology_xcvc1902.v2.cdo file = gen_files/pmc_data.cdo } } image { name = lpd id = 0x4210002 partition { id = 0x0C type = cdo file = gen_files/lpd_data.cdo } partition { id = 0x0B core = psm file = static_files/psm_fw.elf } } image { name = pl_cfi id = 0x18700000 partition { id = 0x03 type = cdo file = system.rcdo } partition { id = 0x05 type = cdo file = system.rnpi }

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 47

Page 48: Bootgen ユーザー ガイド - Xilinx

} image { name = fpd id = 0x420c003 partition { id = 0x08 type = cdo file = gen_files/fpd_data.cdo } }}

次の例に、パーティションをまとめて BIF を簡潔に記述する方法を示します。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = gen_files/executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = gen_files/pmc_data.cdo } } image { name = lpd, id = 0x4210002 { id = 0x0C, type = cdo, file = gen_files/lpd_data.cdo } { id = 0x0B, core = psm, file = static_files/psm_fw.elf } } image { name = pl_cfi, id = 0x18700000 { id = 0x03, type = cdo, file = system.rcdo } { id = 0x05, type = cdo, file = system.rnpi } } image { name = fpd, id = 0x420c003 { id = 0x08, type = cdo, file = gen_files/fpd_data.cdo } }}

属性次の表に、Bootgen の属性を示します。この表では簡単な説明を記載しており、詳細は各属性のリンクをクリックすると参照できます。アーキテクチャ名は、属性を使用するザイリンクス デバイスを示します。• zynq: Zynq-7000 SoC デバイス• zynqmp: Zynq® UltraScale+™ MPSoC デバイス• fpga: 7 シリーズ およびそれ以上のデバイス

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 48

Page 49: Bootgen ユーザー ガイド - Xilinx

• versal: Versal™ ACAP

詳細は、第 8 章: BIF 属性のリファレンス を参照してください。表 32: Bootgen の属性と説明

オプション/属性 説明 属性を使用するデバイスaarch32_mode 32 ビット モードで実行されるバイナリ ファイルを指定します。 zynqmp

versal

aeskeyfile <aes_key_filepath> AES キー ファイルへのパスです。キー ファイルには、パーティションの暗号化に使用される AES キーが含まれます。ファイルの内容は eFUSE または BBRAM に書き込む必要があります。キー ファイルが指定されたパスに存在しない場合、Bootgen が暗号化に使用される新しいキーを生成します。たとえば BIF ファイルでビットストリームの暗号化を選択した場合、出力は暗号化されたビットストリームとなります。

すべて

a_hwrot 非対称ハードウェアの信頼のルート (A-HWRoT) ブート モード。Bootgen で A-HWRoT ブート モードのデザイン ルールがチェックされます。プロダクション PDI でのみ有効です。versal

alignment <byte> バイト アライメントを設定します。パーティションは、この値の倍数値に揃えられるまでパディングされます。この属性はオフセットと共に使用することはできません。zynqzynqmp

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 を使用して実行されます。Zynq UltraScale+ MPSoC の認証は、RSA-4096 を使用して実行されます。Versal ACAP の認証は、RSA-4096 を使用して実行されます。

引数は次のとおりです。none: パーティションは署名されません。ecdsa-p384: パーティションは ecdsa-p384 を使用して署名されます。ecdsa-p521: パーティションは ecdsa-p521 を使用して署名されます。rsa: パーティションは RSA アルゴリズムを使用して署名されます。

すべて

bbram_kek_iv 該当するキーを暗号化するために使用する IV を指定します。bbram_kek_iv は、keysrc=bbram_blk_key の場合にのみ有効です。

versal

bh_kek_iv 該当するキーを暗号化するために使用する IV を指定します。bh_kek_iv は、keysrc=bh_blk_key の場合にのみ有効です。 versal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 49

Page 50: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスbh_key_iv <filename> 難読化キーまたはブラック キーを復号化する際に使用する初期化ベクター。 zynqmp

bh_keyfile <filename> ブート ヘッダーに格納される 256 ビットの難読化キーまたはブラック キー。これは、暗号化の keysrc が bh_gry_key または bh_blk_key の場合にのみ有効です。注記: 難読化キーは、Versal デバイスではサポートされません。

zynqmpversal

bhsignature <filename> ブート ヘッダーの署名を認証証明にインポートします。これは、秘密キー PSK を共有しない場合に使用できます。署名を作成して Bootgen に供給できます。ファイル フォーマットは bootheader.sha384.sig です。zynqmpversal

big_endian バイナリ ファイルをビッグ エンディアン形式に指定します。zynqmpversal

blocks <block sizes> 暗号化の際のキー ローリング機能のブロック サイズを指定します。各モジュールは独自のキーを使用して暗号化されます。最初のキーはデバイスのキー ソースで格納され、後続の各ブロックのキーは直前のモジュール内で暗号化 (ラップ) されます。

zynqmpversal

boot_config <options> ブート イメージのコンフィギュレーションに使用するパラメーターを指定します。 versal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 50

Page 51: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスboot_device <options> セカンダリ ブート デバイスを指定します。パーティションが存在するデバイスを示します。オプションは次のとおりです。

qspi32qspi24nandsd0sd1sd-lsmmcusbethernetpciesataospismapsbisd0-rawsd1-rawsd-ls-rawmmc-rawmmc0mmc0-raw

注記: これらのオプションは、Bootgen のさまざまなデバイスでサポートされます。セカンダリ ブート オプションのリストは、『Versal ACAP システム ソフトウェア開発者向けガイド』(UG1304) を参照してください。ハードウェア/レジスタ/インターフェイス情報およびプライマリ ブート モードについては、該当するテクニカル リファレンス マニュアルを参照してください。

zynqmpversal

bootimage <filename.bin> リストされた入力ファイルが Bootgen によって作成されたブート イメージであることを示します。 zynqzynqmpversal

bootloader <partition> パーティションがブートローダー (FSBL/PLM) であることを指定します。この属性は、ほかのパーティションの BIF 属性と共に指定されます。zynqzynqmpversal

bootvectors <vector_values> XIP (eXecute In Place) のベクター テーブルを指定します。zynqmp

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 51

Page 52: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスchecksum <options> パーティションのチェックサムが必要であることを指定します。このオプションを認証や暗号化などのよりセキュアな機能と共に使用することはできません。チェックサム アルゴリズムは次のとおりです。

none: チェックサムなし。md5: Zynq®-7000 SoC デバイスの場合。sha3: Zynq® UltraScale+™ MPSoC および Versal デバイスの場合。

注記: Zynq デバイスでは、ブートローダーのチェックサムはサポートされません。Zynq UltraScale+ MPSoC およびVersal ACAP ではブートローダーのチェックサムがサポートされます。

zynqzynqmpversal

copy イメージがメモリの指定したアドレスにコピーされます。versal

core <options> パーティションをどのコアで実行するかを指定します。次のオプションがあります。*a72-0a72-1r5-0r5-1psmaie

versal

delay_handoff <delay_handoff> サブシステム/イメージへのハンドオフを遅延します。versal

delay_load <delay_load> サブシステム/イメージの読み込みを遅延します。versal

destination_device <device_type> パーティションのターゲットを PS または PL のいずれかに指定します。次のオプションがあります。ps: パーティションのターゲットは PS (デフォルト)。pl: パーティションのターゲットは PL (ビットストリームの場合)。

zynqmp

destination_cpu <device_core> パーティションを実行するコアを指定します。a53-0a53-1a53-2a53-3r5-0 (デフォルト)r5-1pmur5-lockstep

zynqmp

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 52

Page 53: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスearly_handoff このフラグは、パーティションのロード直後に重要なアプリケーションへのハンドオフが確実に実行されるようにします。このオプションを使用しない場合は、最初にすべてのパーティションが順にロードされ、続いてハンドオフが順に実行されます。

zynqmp

efuse_kek_iv 該当するキーを暗号化するために使用する IV を指定します。efuse_kek_iv は、keysrc=efuse_blk_key の場合にのみ有効です。

versal

efuse_user_kek0_iv 該当するキーを暗号化するために使用する IV を指定します。efuse_user_kek0_iv は、keysrc=efuse_user_blk_key0 の場合にのみ有効です。

versal

efuse_user_kek1_iv 該当するキーを暗号化するために使用する IV を指定します。efuse_user_kek1_iv は、keysrc=efuse_user_blk_key1 の場合にのみ有効です。

versal

encryption <option> 暗号化するパーティションを指定します。使用される暗号化アルゴリズムは、zynq では AES-CBC、zynqmp および Versalでは AES-GCM です。パーティションのオプションは次のとおりです。

none: パーティションは暗号化されない。aes: パーティションは AES アルゴリズムを使用して暗号化される。

すべて

exception_level <options> コアに設定する例外レベルを指定します。オプションは次のとおりです。

el-0el-1el-2el-3

zynqmpversal

familykey ファミリ キーを指定します。zynqmpfpga

file <path/to/file> パーティションを作成するためのファイルを指定します。versal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 53

Page 54: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイス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>: PUF でシャッター オフセット時間およびシャッター オープン時間を設定する 32 ビットの PUF_SHUT レジスタ値を指定します。このシャッター値は、PUF 登録中に使用されたシャッター値と一致している必要があります。

zynqmp

headersignature <signature_file> ヘッダーの署名を認証証明にインポートします。これは、秘密キーを共有しない場合に使用できます。署名を作成してBootgen に供給できます。

zynqzynqmpversal

hivec 例外ベクター テーブルの場所を hivec (Hi-Vector) として指定します。デフォルトは lovec (Low-Vector) です。これは、A53 (32 ビット) および R5 コアにのみ適用されます。

hivec: 0xFFFF0000 の例外ベクター テーブル。lovec: 0x00000000 の例外ベクター テーブル。

zynqmpversal

id = <id> 定義した場所に基づいて次の ID を指定します。• pdi id: 一番外側の PDI かっこ内• image id: イメージかっこ内• partition id: パーティションかっこ内

versal

image サブシステム/イメージを定義します。versal

init <filename> ブートローダーの最後にあるレジスタ初期化ブロックであり、init (.int) ファイルの仕様を解析して構築されます。最大256 のアドレスと値の初期化ペアが許可されます。init ファイルには特定のフォーマットがあります。

zynqzynqmpversal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 54

Page 55: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスkeysrc Versal ACAP の暗号化のキー ソースを指定します。keysrcは、パーティションごとに指定できます。

efuse_red_keyefuse_blk_keybbram_red_keybbram_blk_keybh_blk_keyuser_key0user_key1user_key2user_key3user_key4user_key5user_key6user_key7efuse_user_key0efuse_user_blk_key0efuse_user_key1efuse_user_blk_key1

versal

keysrc_encryptionefuse_gry_key: eFUSE に格納されているグレー (難読化) キー。グレー/難読化キー を参照してください。bh_gry_key: ブート ヘッダーに格納されているグレー(難読化) キー。bh_blk_key: ブート ヘッダーに格納されているブラック キー。ブラック キー/PUF キー を参照してください。efuse_blk_key: eFUSE に格納されているブラック キー。kup_key: ユーザー キー。efuse_red_key: eFUSE に格納されているレッド キー。キーの差し替え を参照してください。bbram_red_key: BBRAM に格納されているレッド キー。

zynqzynqmp

load <partition_address> メモリ内のパーティションのロード アドレスを設定します。zynqzynqmpversal

metaheader キー、キー ソースなどのメタ ヘッダーの暗号化および認証属性を定義するために使用します。暗号化に使用するキー ソースを指定します。キーは次のとおりです。versal

name <name> イメージ/サブシステムの名前を指定します。versal

load <offset_address> ブート イメージ内のパーティションの絶対オフセットを設定します。 zynqzynqmpversal

parent_id=<id> 親 PDI の ID を指定します。親 PDI とそれに該当するブートPDI 間の関係を識別するために使用します。 versal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 55

Page 56: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスpartition パーティションを定義します。BIF を短く読みやすくするためのオプションの属性です。 versal

partition_owner、owner <option> パーティションをロードするパーティション オーナー。オプションは次のとおりです。fsbl: パーティションは FSBL によってロードされます。uboot: パーティションは U-Boot によってロードされます。

versal

plm: パーティションは PLM によってロードされます。non-plm: パーティションは PLM によってロードされませんが、U-Boot のような別のエンティティでロードされます。

zynqzynqmpversal

pid <ID> パーティション ID を指定します。PID は 32 ビット値 (0〜0xFFFFFFFF) に設定できます。 zynqmp

pmufw_image <image_name> FSBL をロードする前に bootROM によってロードされるPMU ファームウェア イメージです。 zynqmp

ppkfile <key filename> プライマリ公開キー (PPK)。ブート イメージ内のパーティションの認証に使用します。詳細は、認証の使用 を参照してください。

zynqzynqmpversal

presign <sig_filename> パーティション署名 (.sig) ファイル。zynqzynqmpfpga

pskfile <key filename> プライマリ秘密キー (PSK)。ブート イメージ内のパーティションの認証に使用します。詳細は、認証の使用 を参照してください。

zynqzynqmpversal

puf_file <filename> PUF ヘルパー データ ファイル。PUF は、暗号化キー ソースとしてブラック キーと共に使用されます。PUF ヘルパー データは 1544 バイトです。1536 バイトの PUF HD + 4 バイトの HASH + 3 バイトの AUX + 1 バイト アライメント。zynqmpversal

reserve <size in bytes> パーティションのメモリ サイズを維持します。このサイズになるまでパーティションにパディングが追加されます。 zynqzynqmpversal

s_hwrot 非対称ハードウェアの信頼のルート (S-HWRoT) ブート モード。Bootgen で S-HWRoT ブート モードのデザイン ルールがチェックされます。プロダクション PDI でのみ有効です。versal

spk_select <SPK_ID> ユーザー eFUSE の SPK ID を指定します。zynqmp

spkfile <filename> ブート イメージ内のパーティションの認証に使用するキーです。詳細は、認証の使用 を参照してください。SPK はセカンダリ公開キーです。すべて

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 56

Page 57: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスspksignature <signature_file> SPK の署名を認証証明にインポートします。認証の使用 を参照してください。これは、秘密キー (PSK) を共有しない場合に使用できます。署名を作成して Bootgen に供給できます。

zynqzynqmpversal

split <options> モードに基づいてイメージを分割します。split オプションは次のとおりです。slaveboot: Zynq UltraScale+ MPSoC でのみサポートされています。次のように分割します。ブート ヘッダー + ブートローダーイメージ ヘッダーおよびパーティション ヘッダー残りのパーティションnormal: zynq、zynqmp、および versal でサポートされています。次のように分割します。ブート ヘッダー + イメージ ヘッダー + パーティションヘッダー + ブートローダーPartition1パーティション 2、以下同様

分割 (split) モードでは、出力フォーマットも bin または mcsに設定できます。注記: オプションの split の normal モードは、コマンド ライン オプションの split と同じです。このコマンド ライン オプションは推奨されていません。split slaveboot は、ZynqUltraScale+ MPSoC でのみサポートされます。

zynqzynqmpversal

sskfile <key filename> セカンダリ秘密キー (SSK) は、ブート イメージ内のパーティションを認証するために使用されます。プライマリ キーはセカンダリ キーを認証し、セカンダリ キーはパーティションを認証します。すべて

startup=<address> ロード後のパーティションのエントリ アドレスを設定します。この識別子は、実行しないパーティションでは無視されます。zynqzynqmpversal

TrustZone= <option> TrustZone オプションは次のとおりです。securenonsecure

zynqmpversal

type <options> パーティションのタイプを指定します。次のオプションがあります。bootloaderpmcdatacdocficfi-gscbootimage

versal

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 57

Page 58: Bootgen ユーザー ガイド - Xilinx

表 32: Bootgen の属性と説明 (続き)

オプション/属性 説明 属性を使用するデバイスudf_bh <data_file> ブート ヘッダーのユーザー定義フィールドにコピーされるデータのファイルをインポートします。UDF は、16 進数文字列フォーマットのテキスト ファイルで提供されます。UDF の総バイト数は、zynq = 76 バイトで、zynqmp = 40 バイトです。

zynqzynqmp

udf_data <data_file> 最大 56 バイトのデータを含むファイルを認証証明のユーザー定義フィールド (UDF) にインポートします。 zynqzynqmp

xip_mode FSBL が QSPI フラッシュから直接実行されるよう XIP(eXecute-In-Place) を示します。 zynq

zynqmp

第 3 章: ブート イメージの作成

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 58

Page 59: Bootgen ユーザー ガイド - Xilinx

第 4 章

Bootgen インターフェイスの使用Bootgen には GUI とコマンド ラインの 2 つのオプションがあります。GUI オプションは、 Vitis でウィザードとして利用できます。GUI の機能は、ブート イメージを作成する際の最も標準的な機能に限定されます。Bootgen コマン ドラインではすべてのコマンドを使用でき、システム用に複雑なブート イメージを作成できます。

Bootgen GUI のオプションVitis™ GUI の [Create Boot Image] ウィザードでは、ブート イメージ生成に使用できる Bootgen オプションに制限があります。注記: Versal™ ACAP の場合、Bootgen GUI のオプションはまだサポートされていません。GUI を使用してブート イメージを作成するには、次の手順に従います。1. [Project Navigator] または [C/C++ Projects] ビューでアプリケーション プロジェクトを選択し、[Create Boot

Image] を右クリックします。または、[Xilinx] → [Create Boot Image] をクリックします。[Create Boot Image] ページが開き、選択した C プロジェクトのコンテキストからあらかじめ選択されているデフォルト値が取り込まれて表示されます。次の点に注意してください。• アプリケーションに対して [Create Boot Image] を初めて実行する場合、このページに FSBL ELF ファイルへのパス、選択したハードウェアのビットストリーム (ハードウェア プロジェクトにある場合)、および選択したアプリケーションの ELF ファイルへのパスが入力されます。

• アプリケーションのブート イメージを既に作成しており、BIF ファイルが存在する場合は、このページに /bif フォルダーからの値が入力されます。

• Zynq®-7000 SoC または Zynq® UltraScale+™ MPSoC アーキテクチャ用のブート イメージを作成できるようになりました。

重要: ブート イメージ用に入力するデータは、オフセットが 0x4c の最大 76 バイト (Zynq-7000 SoCの場合)、およびオフセットが 0x70 の最大 40 バイト (Zynq UltraScale+ MPSoC の場合) である必要があります。これは Zynq アーキテクチャに基づく厳格な制限です。

2. [Create Boot Image] ページに次の情報を入力します。注記: Versal デバイスの場合、Vitis GUI のオプションはまだサポートされていません。a. [Architecture] ドロップダウンから、使用するアーキテクチャを選択します。b. [ Create a BIF file] または [Import an existing BIF file] のいずれかをオンにします。c. [Basic] ビューで、[Output BIF file path] に出力 BIF ファイルへのパスを指定します。d. 該当する場合は、[UDF data] を指定します。このオプションの詳細は、udf_data を参照してください。e. [Output path] に出力パスを指定します。

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 59

Page 60: Bootgen ユーザー ガイド - Xilinx

3. [Boot image partitions] で [Add] をクリックし、その他のパーティション イメージを追加します。4. 必要に応じて、ブート イメージ内のパーティションのオフセット値、アラインメント値、および割り当て値を作

成します。デフォルトでは、出力ファイルのパスは選択したアプリケーション プロジェクトの /bif フォルダーに設定されます。

5. [Security] ビューで、セキュア イメージを作成するための属性を指定できます。このセキュリティは、必要に応じて個々のパーティションに適用できます。a. パーティションの認証を有効にするには、[Use Authentication] をオンにし、[PPK]、[SPK]、[PSK]、および

[SSK] の値を指定します。詳細は、認証を参照してください。b. パーティションの暗号化を有効にするには、[Encryption] ビューを選択し、[Use Encryption] をオンにします。詳細は、暗号化の使用 を参照してください。

6. ブートローダーから開始して、BIF ファイルのブート イメージを 1 つずつ作成またはインポートします。パーティション リストには、BIF ファイル内のパーティションの概要が表示されます。ファイル パス、暗号化設定、および認証設定が表示されます。この領域を使用して、パーティションの追加、削除、変更、並べ替えを実行します。また、暗号化、認証、チェックサムを有効にするための値を設定し、[Load]、[Alignment]、[Offset] など、一部のその他のパーティションに関連する値を指定することもできます。

コマンド ラインで Bootgen を使用コマンド ラインで Bootgen オプションを指定すると、GUI で提供されるオプションよりも多くのオプションを利用できます。Vitis ソフトウェア プラットフォームの標準インストールでは、XSCT (ザイリンクス ソフトウェア コマンドライン ツール) が対話型のコマンド ライン環境として入手可能で、これをスクリプト作成に使用することもできます。XSCT では、Bootgen コマンドを実行できます。XSCT は別のツールである Bootgen 実行ファイルにアクセスします。この Bootgen 実行ファイルは、Bootgen のインストール で説明されているように、スタンドアロンでインストールできます。これは XSCT から呼び出されるツールと同じものなので、ここで開発されたスクリプトまたは XSCTで作成されたスクリプトは、いずれもどちらのツールでも動作します。このツールの説明は、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) のエンベデッド ソフトウェア開発フローのザイリンクス ソフトウェア コマンド ライン ツール を参照してください。XSCT で Bootgen コマンドを使用する例は、「XSCT ユース ケース」の章を参照してください。

コマンドおよび説明次の表に、Bootgen コマンド オプションを示します。各オプションは、一番左の列にあるリンクから詳細な説明を参照できます。その右側の列には簡単な説明を記載しています。アーキテクチャ名は、コマンドを使用するザイリンクス デバイスを示します。• zynq: Zynq®-7000 SoC デバイス• zynqmp: Zynq® UltraScale+™ MPSoC デバイス• fpga: 7 シリーズ およびそれ以上のデバイス• versal: Versal™ ACAP

詳細は、第 9 章: コマンド リファレンス を参照してください。

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 60

Page 61: Bootgen ユーザー ガイド - Xilinx

表 33: Bootgen コマンドおよび説明コマンド 説明およびオプション コマンドを使用するデバイス

arch <type> ザイリンクス デバイス アーキテクチャ: オプションは次のとおりです。zynq (デフォルト)zynqmpfpgaversal

すべて

bif_help BIF ヘルプ サマリをプリントアウトします。 すべてdual_qspi_mode <configuration> Dual QSPI コンフィギュレーションの場合は 2 つの出力ファイルを生成します。

parallelstacked <size>

zynqzynqmpversal

dual_ospi_mode stacked <size> スタックド コンフィギュレーションの場合は 2 つの出力ファイルを生成します。 versal

dump <options> オプションを指定するたびにパーティションまたはブート ヘッダーをダンプします。empty: パーティションをバイナリ ファイルとしてダンプします。bh: ブート ヘッダーをバイナリ ファイルとしてダンプします。plm: PLM をバイナリ ファイルとしてダンプします。pmc_cdo: PMC CDO をバイナリ ファイルとしてダンプします。boot_files: ブート ヘッダー、PLM、および PMCCDO を 3 つのバイナリ ファイルとしてダンプします。

versal

dump_dir 指定したディレクトリのコンポーネントをダンプします。 versal

efuseppkbits <PPK_filename> eFUSE 用の PPK ハッシュを生成します。zynqzynqmpversal

encrypt <options> デバイス内での AES キーの格納場所。オプションは次のとおりです。bbram (デフォルト)eFuse

zynqfpga

encryption_dump 暗号ログ ファイル aes_log.txt を生成します。zynqmpversal

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 61

Page 62: Bootgen ユーザー ガイド - Xilinx

表 33: Bootgen コマンドおよび説明 (続き)

コマンド 説明およびオプション コマンドを使用するデバイスfill <hex_byte> パディング用に使用するバイトを指定します。

zynqzynqmpversal

generate_hashes パディングされたハッシュを含むファイルを生成します。Zynq デバイス: PKCS#1v1.5 パディング スキームを使用した SHA-2Zynq UltraScale+ MPSoC: PKCS#1v1.5 パディングスキームを使用した SHA-3Versal ACAP: PSS パディング スキームを使用したSHA-3

zynqzynqmpversal

generate_keys <key_type> 認証キーを生成します。オプションは次のとおりです。pemrsaobfuscatedkey

zynqzynqmp

h、help ヘルプ サマリをプリントアウトします。 すべてimage <filename(.bif)> ブート イメージ フォーマット (.bif) ファイルを指定します。 すべてlog<level_type> 現在の作業ディレクトリに次のメッセージ タイプのログ ファイルを生成します。

errorwarning (デフォルト)infodebugtrace

すべて

nonbooting 中間のブート イメージを作成します。zynqzynqmp

o <filename> 出力ファイルを指定します。ファイル フォーマットは、ファイル名の拡張子によって決まります。有効な拡張子は次のとおりです。.bin (デフォルト).mcs.pdi

すべて

p <partname> 暗号化キーの生成に使用するパーツ名を指定します。 すべて

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 62

Page 63: Bootgen ユーザー ガイド - Xilinx

表 33: Bootgen コマンドおよび説明 (続き)

コマンド 説明およびオプション コマンドを使用するデバイスpadimageheader <option> イメージ ヘッダーをパディングして、続くパーティションを強制的に揃えます。オプションは次のとおりです。

01 (デフォルト)

zynqzynqmp

process_bitstream <option> ビットストリームを .bin または .mcs ファイルのいずれで処理および出力するかを指定します。たとえば BIF ファイルのビットストリームに暗号化を選択した場合、出力は暗号化されたビットストリームとなります。

zynqzynqmp

read <options> オプションに基づいて、ブート ヘッダー、イメージ ヘッダー、およびパーティション ヘッダーを読み出すのに使用されます。bh: bootimage からブート ヘッダーを人間が読める形式で読み出します。iht: bootimage からイメージ ヘッダー テーブルを読み出します。ih: bootimage からイメージ ヘッダーを読み出します。pht: bootimage からパーティション ヘッダーを読み出します。ac: bootimage から認証証明を読み出します。

zynqzynqmpversal

authenticatedjtag <options> セキュア ブート中に JTAG をイネーブルにします。引数は次のとおりです。rsaecdsa

versal

split <options> ブート イメージをパーティションに分割し、ファイルを .bin または .mcs として出力します。• ブート ヘッダー + イメージ ヘッダー + パーティション ヘッダー + Fsbl.elf

• Partition1.bit

• Partition2.elf

zynqzynqmpversal

spksignature <filename> SPK 署名ファイルを生成します。zynqzynqmp

verify このオプションは、ブート イメージの認証を検証するために使用します。ブート イメージ内の認証証明がすべて使用可能なパーティションに対して検証されます。zynqzynqmp

verify_kdf このオプションは、AES キーを生成するために Bootgenで使用される Counter Mode KDF を検証するために使用します。zynqmpversal

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 63

Page 64: Bootgen ユーザー ガイド - Xilinx

表 33: Bootgen コマンドおよび説明 (続き)

コマンド 説明およびオプション コマンドを使用するデバイスw <option> 出力ファイルを上書きするかどうかを指定します。

on (デフォルト)off

注記: -w にオプションを指定しない場合は、–w on として解釈されます。

すべて

zynqmpes1 ES1 (1.0) 用のブート イメージを生成します。デフォルトのパディング方式は ES2 (2.0) です。 zynqmp

BIF 属性の詳細は、ヘルプを参照してください。

第 4 章: Bootgen インターフェイスの使用

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 64

Page 65: Bootgen ユーザー ガイド - Xilinx

第 5 章

ブート時のセキュリティザイリンクスでは、最新の認証方法を使用して、すべてのデバイスのセキュアなブートをサポートし、ザイリンクスデバイス上で認証されていないコードまたは変更されたコードが実行されないようにしています。ザイリンクスでは、認証されたプログラムのみがイメージにアクセスするよう、さまざまな暗号化技術をサポートしています。デバイスごとのハードウェア セキュリティ機能の詳細は、次の各セクションを参照してください。

Zynq-7000 SoC デバイスのセキュア モードおよび非セキュア モードセキュリティ上の理由により、PS の全マスター モジュールの中で CPU 0 が最初にリセット状態を終了します。CPU1 は WFE ステートを維持します。bootROM が実行されている間は、安全性を確保するためにリセットの種類に関係なく JTAG は常に無効となります。bootROM の実行が完了した後、ブート モードが非セキュアな場合は JTAG が有効になります。bootROM コードには、FSBL/ユーザー コードをロードする役目もあります。bootROM がステージ 1 へ制御をリリースすると、ユーザー ソフトウェアがシステム全体を完全に制御します。bootROM を再度実行するには、システム リセットのいずれかを実行する以外に方法はありません。FSBL/ユーザー コードのサイズは、暗号化/非暗号化ともに192 KB までに制限されています。この制限は、非セキュアの XIP (eXecute-In-Place) オプションを使用する場合は適用されません。PS ブート ソースは BOOT_MODE ストラップ ピン (弱いプルアップまたはプルダウン抵抗で指定) を使用して選択します。このピンは、パワーオン リセット (POR) 時に 1 回サンプリングされます。サンプリングされた値は、slcr.BOOT_MODE レジスタに格納されます。bootROM は暗号化/認証されたイメージ (セキュア ブート) と暗号化していないイメージ (非セキュア ブート) をサポートしています。また、非セキュア ブート イメージのみを対象とした場合、XIP (eXecute-In-Place、xip_mode) オプションを使用してステージ 1 イメージを NOR または Quad-SPI から直接実行できます。XIP (eXecute-In-Place) は、NOR および Quad-SPI ブート モードでのみ利用できます。• セキュア ブートの場合、bootROM コードを実行している CPU は、ブート デバイス上のユーザー PS イメージを復号化/認証して OCM に格納した後、このイメージに分岐します。

• 非セキュア ブートの場合、bootROM を実行している CPU は、PL 内の AES ユニットなどすべてのセキュア ブート機能を無効にした後、OCM メモリまたはフラッシュ デバイス (XIP (eXecute-In-Place) を使用した場合) 内のユーザー イメージに分岐します。

これ以降の PS または PL に対するブート ステージは開発者であるユーザーの責任で、ユーザー制御下で実行する必要があります。bootROM コードにはユーザーからはアクセスできません。ステージ 1 ブートがセキュア ブートの場合、その後のブート ステージはセキュアまたは非セキュアのどちらも可能です。ステージ 1 ブートが非セキュア ブートの場合、その後のブート ステージは非セキュア ブートしか実行できません。

Zynq UltraScale+ MPSoC デバイスのセキュリティZynq® UltraScale+™ MPSoC デバイスでは、ハードウェア ルート オブ トラストのブート メカニズムを使用してセキュア ブートが実行されます。これにより、すべてのブート ファイルまたはコンフィギュレーション ファイルも暗号化されます。このアーキテクチャは、アプリケーションの安全性を最大限に確保するために必要な機密性、完全性、および認証を提供します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 65

Page 66: Bootgen ユーザー ガイド - Xilinx

詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版) のこのセクションを参照してください。

Versal ACAP セキュリティVersal™ ACAP では、セキュア ブートにより、デバイスにロードされるファームウェアおよびソフトウェアの機密性、完全性、および認証が保たれるようになっています。ルート オブ トラストは、PLM ソフトウェアの認証/復号化を認証する PMC ROM から開始します。PLM ソフトウェアが信頼できるようになったので、PLM でファームウェアおよびソフトウェアの残りが安全な方法でロードされます。また、セキュア ブートが必要ない場合でも、ソフトウェアは少なくともシンプルなチェックサムを使用して認証できます。詳細は、『Versal ACAP テクニカル リファレンス マニュアル』 (AM011) を参照してください。

暗号化の使用セキュア ブートは、デバイス上のイメージの実行が許可される前にこれらを検証するため、フィールドで展開されているほとんどの電子デバイスにとって不可欠な機能となっています。暗号化については、ザイリンクスでは AES(Advanced Encryption Standard) アルゴリズムによる AES 暗号化をサポートしています。AES では、対称型キー暗号 (暗号化と復号化の両方に対応する 1 つのキー定義) が提供されます。暗号化と復号化の両方を逆の順序で完了する場合も、同じステップが実行されます。AES は反復式の対称型ブロック暗号であり、次のように動作します。• 同じ定義されたステップを複数回繰り返して動作する。• 秘密キーの暗号化アルゴリズムを使用する。• 固定バイト数で動作する。

暗号化プロセスBootgen は、BIF ファイルでユーザーが提供する暗号化コマンドおよび属性に基づいてブート イメージ パーティションを暗号化できます。AES は対称キー暗号化手法であり、暗号化および復号化に同じキーを使用します。ブート イメージの暗号化に使用するキーは、デバイスがそのブート イメージでブート中、復号化プロセス用にデバイスで使用可能であることが求められます。一般に、キーは eFUSE または BBRAM のいずれかに格納され、キー ソースはブートイメージの作成時に BIF 属性を介して選択できます (次の図参照)。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 66

Page 67: Bootgen ユーザー ガイド - Xilinx

図 7: 暗号化プロセスの図

Key

AES Encryption

eFUSE

BBRAM

Partition Encrypted Partition

OR

X21274-062320

復号化プロセスSoC デバイスの場合、ブート サイクル中に bootROM および FSBL によってパーティションが復号化されます。bootROM は、フラッシュから FSBL を読み出し、復号化し、ロードし、制御を FSBL に渡します。FSBL の実行が開始されると、残りのパーティションが読み込まれ、復号化され、ロードされます。パーティションの復号化に必要なAES キーは、eFUSE または BBRAM のいずれかから取得できます。暗号化キーのソースを把握するために、ブート イメージ内のブート ヘッダー テーブルのキー ソース フィールドが読み出されます。暗号化されたパーティションはそれぞれ、AES ハードウェア エンジンを使用して復号化されます。

図 8: 復号化プロセスの図

Key

AES Decryption

eFUSE

BBRAM

Partition Decrypted Partition

OR

X21274-062320

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 67

Page 68: Bootgen ユーザー ガイド - Xilinx

Zynq-7000 デバイスのパーティションの暗号化Zynq®-7000 SoC デバイスは、内蔵型でプログラマブル ロジック (PL) ベースの HMAC (Hash-based MessageAuthentication Code)、および Cipher Block Chaining (CBC) モードの Advanced Encryption Standard (AES) モジュールを使用します。

BIF ファイルの例暗号化されたパーティションを持つブート イメージを作成するには、aeskeyfile 属性を使用して BIF で AES キー ファイルを指定します。暗号化する BIF ファイルにリストされている各イメージ ファイルに対して encryption=aes属性を指定します。BIF ファイル (secure.bif) の例を次に示します。image: { [aeskeyfile] secretkey.nky [keysrc_encryption] efuse [bootloader, encryption=aes] fsbl.elf [encryption=aes] uboot.elf}

コマンド ラインから、次のコマンドを使用して、暗号化された fsbl.elf および uboot.elf を含むブート イメージを生成します。bootgen -arch zynq -image secure.bif -w -o BOOT.bin

キーの生成Bootgen は AES-CBC キーを生成できます。Bootgen は、BIF で指定された AES キー ファイルを使用し、パーティションを暗号化します。キー ファイルが空または存在しない場合、Bootgen は BIF ファイルで指定されたファイルにキーを生成します。キー ファイルが BIF で指定されておらず、いずれかのパーティションに対して暗号化が要求されている場合、Bootgen は BIF と同じディレクトリに拡張子 .nky の BIF ファイル名を用いたキー ファイルを生成します。次に、キー ファイルの例を示します。

図 9: キー ファイルの例

Zynq MPSoC デバイスのパーティションの暗号化Zynq® UltraScale+™ MPSoC デバイスは、AES-GCM コアを使用します。このコアは 32 ビット ワード ベースのデータ インターフェイスを備えており、256 ビット キーをサポートします。AES-GCM モードは、暗号化と復号化、複数のキーソース、内蔵のメッセージ インテグリティ チェックをサポートします。

操作キー優れたキー管理の方法の 1 つは、秘密キーの使用を最小限に抑えることです。このためには、Bootgen で有効になっている操作キー オプションを使用します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 68

Page 69: Bootgen ユーザー ガイド - Xilinx

Bootgen は、暗号化された安全なヘッダーを作成します。このヘッダーには、ユーザー指定の操作キー (opt_key)と、Bootgen が有効のときにコンフィギュレーション ファイルの最初のブロックに必要な初期化ベクトル (IV) が含まれます。このため、BBRAM または eFUSE のいずれかに格納された AES キーは 384 ビットのみで使用され、サイドチャネル攻撃にさらされる可能性が大幅に制限されます。opt_key 属性は、操作キーの使用方法を指定します。fsbl_config 属性の引数である opt_key 値の詳細は、fsbl_config を参照してください。次に、opt_key 属性の使用例を示します。image:{ [fsbl_config] opt_key [keysrc_encryption] bbram_red_key [bootloader, destination_cpu = a53-0, encryption = aes, aeskeyfile = aes_p1.nky]fsbl.elf [destination_cpu = a53-3, encryption = aes, aeskeyfile = aes_p2.nky]hello.elf }

操作キーは、次に示すように、AES キー (.nky) ファイルで Key Opt を使用して指定します。図 10: 操作キー

Bootgen は暗号化キー ファイルを生成します。前の例に示すように、BIF ファイルで opt_key が有効になっている場合、操作キー opt_key が .nkyファイルで生成されます。操作キーを使用するその他の例は、開発環境での操作キーを使用したデバイス キーの保護を参照してください。この機能の詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)の「セキュリティ」章のキー管理を参照してください。

キーの差し替えAES-GCM は、暗号化されたイメージ全体をより小規模な AES 暗号化ブロック/モジュール単位で表すキー差し替え機能もサポートしています。各モジュールは独自のキーを使用して暗号化されます。最初のキーはデバイスのキーソースで格納され、後続の各モジュールのキーは直前のモジュール内で暗号化 (ラップ) されます。キー差し替えをサポートするブート イメージは、Bootgen を使用して生成できます。BIF の属性 (blocks) を使用して、暗号化用に複数の小さなブロックを作成するためのパターンを指定します。image:{ [keysrc_encryption] bbram_red_key [ bootloader,

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 69

Page 70: Bootgen ユーザー ガイド - Xilinx

destination_cpu = a53-0, encryption = aes, aeskeyfile = aes_p1.nky, blocks = 1024(2);2048;4096(2);8192(2);4096;2048;1024 ] fsbl.elf [ destination_cpu = a53-3, encryption = aes, aeskeyfile = aes_p2.nky, blocks = 4096(1);1024 ] hello.elf}

注記:

• キー ファイル内のキーの数は、暗号化されるブロックの数と常に一致する必要があります。○ キーの数が暗号化されるブロック数より少ない場合、Bootgen はエラーを返します。○ キーの数が暗号化されるブロック数より多い場合、Bootgen は余分なキーを無視します (読み込みません)。

• 複数のキー/IV ペアを指定する場合は、no. of blocks + 1 ペアを指定する必要があります。○ 余ったキー/IV ペアは、セキュア ヘッダーの暗号化に使用されます。○ Key0 と IV0 以外のキーと IV のペアは、1 つの BIF で指定されるどの aes キー ファイルでも繰り返さないようにしてください。

グレー/難読化キーユーザー キーは、ファミリ キーで暗号化されており、デバイスの金属層に埋め込まれています。このファミリ キーは、Zynq® UltraScale+™ MPSoC のすべてのデバイスで同じであり、結果、難読化キーとして使用されます。難読化キーは、認証されたブート ヘッダーまたは eFUSE のいずれかに配置できます。image:{ [keysrc_encryption] efuse_gry_key [bh_key_iv] bhiv.txt [ bootloader, destination_cpu = a53-0, encryption = aes, aeskeyfile = aes_p1.nky ] fsbl.elf [ destination_cpu = r5-0, encryption = aes, aeskeyfile = aes_p2.nky ] hello.elf}

Bootgen は、イメージの作成中に次を実行します。1. ブート ヘッダーの BH IV フィールドに bhiv.txt の IV を配置します。2. ブート ヘッダーのセキュア ヘッダー IV フィールドに aes.nky の IV 0 を配置します。3. aes.nky の Key0 および IV0 を使用して、パーティションを暗号化します。グレー/ファミリ キーを使用する別の例は、第 7 章: ユース ケースおよび例 を参照してください。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 70

Page 71: Bootgen ユーザー ガイド - Xilinx

この機能の詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)を参照してください。

キーの生成Bootgen には、AES-GCM キーを生成する機能があります。Bootgen は、NIST が認定する Counter Mode KDF を使用し、CMAC を疑似ランダム関数として使用します。ユーザーがキー ローリングのためにシードから複数のキーを派生させる場合、Bootgen はシードを入力として受け取ります。シードが指定されている場合、これを使用してキーが生成されます。シードが指定されていない場合、Key0 に基づいてキーが生成されます。空のキー ファイルが指定されている場合、Bootgen は時間ベースのランダム化 (KDF ではない) でシードを生成します。これは KDF がほかのキー/IV ペアを生成するための入力となります。注記:

• 1 つの暗号化ファイルが指定され、ほかの暗号化ファイルが生成される場合、Bootgen は最初のパーティションの暗号化ファイルにある Key0/IV0 ペアと同じものを生成されたキーに使用できます。

• 最初のパーティションに暗号化ファイルが生成され、それ以降のパーティションには Key0/IV0 を含むほかの暗号化ファイルが指定されると、Bootgen は終了し、誤った Key0/IV0 ペアが使用されたというエラーを返します。

キーの生成キー ファイルのサンプルを次に示します。

図 11: キー ファイルの例

難読化キーの生成Bootgen は、ファミリ キーと、ユーザー提供の IV を用いてレッド キーを暗号化することで難読化キーを生成できます。ファミリ キーは、ザイリンクス セキュリティ グループが提供します。詳細は、familykey を参照してください。難読化キーを生成するために、Bootgen は BIF ファイルから次の入力を取得します。obf_key:{ [aeskeyfile] aes.nky [familykey] familyKey.cfg [bh_key_iv] bhiv.txt}

難読化キーを生成する構文は、次のとおりです。bootgen -arch zynqmp -image all.bif -generate_keys obfuscatedkey

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 71

Page 72: Bootgen ユーザー ガイド - Xilinx

ブラック キー/PUF キーブラック キーのストレージ ソリューションは、PUF から生成された暗号強度の高い KEK (key encryption key) を使用し、ユーザー キーを暗号化します。生成されたブラック キーは、eFUSE に格納するか、認証されたブート ヘッダーの一部として格納できます。image:{ [puf_file] pufdata.txt [bh_key_iv] black_iv.txt [bh_keyfile] black_key.txt [fsbl_config] puf4kmode, shutter=0x0100005E, pufhd_bh [keysrc_encryption] bh_blk_key [ bootloader, destination_cpu = a53-0, encryption = aes, aeskeyfile = aes_p1.nky ] fsbl.elf [ destination_cpu = r5-0, encryption = aes, aeskeyfile = aes_p2.nky ] hello.elf}

ブラック キーを使用するその他の例は、第 7 章: ユース ケースおよび例を参照してください。

複数の暗号化キー ファイル以前のバージョンの Bootgen では、1 つの暗号化キーで複数のパーティションを暗号化してブート イメージを作成できました。この場合、各パーティションで同じキーが繰り返し使用されます。これはセキュリティの脆弱性の要因となるため、推奨されていません。各キーの使用は、フローで一度だけとする必要があります。Bootgen は、パーティションごとに個別の暗号化キーをサポートしています。キー ファイルが複数ある場合、各暗号化キー ファイルで同じ Key0 (デバイス キー)、IV0、および操作キーが使用されるようにしてください。各暗号化キーファイルでブート イメージが異なると、Bootgen でブート イメージを作成できません。ユーザーが複数の暗号化キーファイル (イメージ内の各パーティションに 1 つずつ) を指定する必要があります。パーティションは、各パーティションに指定されたキーを使用して暗号化されます。注記: ロード可能なセクションが複数あるために複数のパーティションが作成されている場合、同じディレクトリにあるファイル名に .1、.2、.n などが付いたキー ファイルを指定することにより、各パーティションに固有のキーファイルを指定できます。次に、暗号化キー ファイルの例の抜粋を示します。all:{ [keysrc_encryption] bbram_red_key // FSBL (Partition-0) [ bootloader, destination_cpu = a53-0, encryption = aes, aeskeyfile = key_p0.nky

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 72

Page 73: Bootgen ユーザー ガイド - Xilinx

]fsbla53.elf // application (Partition-1) [ destination_cpu = a53-0, encryption = aes, aeskeyfile = key_p1.nky ]hello.elf }

• fsbla53.elf パーティションは、key_p0.nky ファイルのキーを使用して暗号化されます。• hello.elf にロード可能なセクションが 3 つあるため 3 つのパーティションが存在するとした場合、

hello.elf.0 パーティションは test2.nky ファイルのキーを使用して暗号化されます。• その後 hello.elf.1 パーティションが test2.1.nky のキーを使用して暗号化されます。• hello.elf.2 パーティションは test2.2.nky からキーを使用して暗号化されます。

Versal デバイスのパーティションの暗号化Versal™ デバイスは、256 ビット キーをサポートする AES-GCM コアを使用します。セキュア イメージを作成する際、オプションでブート イメージ内の各パーティションを暗号化できます。暗号化には、キー ソースおよび aes キーファイルがあらかじめ必要です。注記: Versal ACAP で暗号化をイネーブルにする場合、AES キー ファイルと各パーティションのキー ソースを指定する必要があります。使用されるキー ソースに基づいて、それぞれ指定された aes キー ファイルで同じキー 0 を使用する必要があります (逆もまた同様です)。キー管理優れたキー管理の方法の 1 つは、秘密キーの使用を最小限に抑えることです。これには、ブート イメージ内の異なるパーティション間で異なるキー/IV を使用します。このため、BBRAM または eFUSE のいずれかに格納された AES キーは 384 ビットのみで使用され、サイド チャネル攻撃にさらされる可能性が大幅に制限されます。all: { image { {type=bootloader, encryption=aes, keysrc=bbram_red_key, aeskeyfile=plm.nky, dpacm_enable, file=plm.elf} {type=pmcdata, load=0xf2000000, aeskeyfile = pmc_data.nky, file=pmc_data.cdo} {core=psm, file=psm.elf} {type=cdo, encryption=aes, keysrc=bbram_red_key, aeskeyfile=ps_data.nky, file=ps_data.cdo} {type=cdo, file=subsystem.cdo} {core=a72-0, exception_level = el-3, file=a72-app.elf} }}

キーの差し替えAES-GCM は、暗号化されたイメージ全体をより小規模な AES 暗号化ブロック/モジュール単位で表すキー差し替え機能もサポートしています。各モジュールは独自のキーを使用して暗号化されます。最初のキーはデバイスのキーソースで格納され、後続の各モジュールのキーは直前のモジュール内で暗号化 (ラップ) されます。Bootgen を使用すると、キー ローリングを含むブート イメージを生成できます。BIF の属性 (blocks) を使用して、暗号化用に複数の小さなブロックを作成するためのパターンを指定します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 73

Page 74: Bootgen ユーザー ガイド - Xilinx

注記: Versal ACAP の場合、デフォルトのキー ローリングは 32 KB のデータで実行されます。属性 blocks で選択したキー ローリングが各 32 KB に適用されます。これは、使用するハッシュ スキームに合わせるためです。DPA キー ローリング対策をイネーブルにすると、ブート時間に影響します。ブート時間の見積もりは、ブート時間見積もりスプレッドシートを参照してください。all:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2

metaheader { encryption = aes, keysrc = bbram_red_key, aeskeyfile = efuse_red_metaheader_key.nky, dpacm_enable }

image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x01, type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = bbram_red_key.nky, dpacm_enable, blocks = 4096(2);1024;2048(2);4096(*), file = executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, aeskeyfile = pmcdata.nky, file = topology_xcvc1902.v1.cdo, file = pmc_data.cdo } }

image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, dpacm_enable, blocks = 8192(20);4096(*), file = lpd_data.cdo } partition { id = 0x0B, core = psm, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key2.nky, dpacm_enable, blocks = 4096(2);1024;2048(2);4096(*), file = psm_fw.elf

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 74

Page 75: Bootgen ユーザー ガイド - Xilinx

} }

image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key5.nky, dpacm_enable, blocks = 8192(20);4096(*), file = fpd_data.cdo } }}

注記:• キー ファイル内のキーの数は、暗号化されるブロックの数と常に一致する必要があります。• キーの数が暗号化されるブロック数より少ない場合、Bootgen はエラーを返します。• キーの数が暗号化されるブロック数より多い場合、Bootgen は余分なキーを無視します。

キーの生成Bootgen は AES-GCM キーを生成できます。Bootgen は、NIST が認定する Counter Mode KDF を使用し、CMAC を疑似ランダム関数として使用します。ユーザーがキー ローリングのためにシードから複数のキーを派生させる場合、Bootgen はシードを入力として受け取ります。シードが指定されている場合、これを使用してキーが生成されます。シードが指定されていない場合、Key0 に基づいてキーが生成されます。空のキー ファイルが指定されている場合、Bootgen は時間ベースのランダム化 (KDF ではない) でシードを生成します。これは KDF がほかのキー/IV ペアを生成するための入力となります。次の条件が適用されます。• 1 つの暗号化ファイルが指定され、ほかの暗号化ファイルが生成される場合、Bootgen は最初のパーティションの暗号化ファイルにある Key0/IV0 ペアと同じものを生成されたキーに使用できます。

• 最初のパーティションに暗号化ファイルが生成され、それ以降のパーティションには Key0/IV0 を含むほかの暗号化ファイルが指定されると、Bootgen は終了し、誤った Key0/IV0 ペアが使用されたというエラーを返します。

• キー ファイルが指定されず、暗号化が 1 つのパーティションにない場合、Bootgen はデフォルトでそのパーティション名の付いた aes キー ファイルを生成します。これによりパーティションごとに別の aeskeyfile が使用されるようになります。

• ファイル名に ".1", ".2"...".n" を付けたキー ファイルを該当パーティションのキー ファイルの同じディレクトリに読み込んだり生成することで、ロード可能なセクションが複数あるために作成された各パーティションに対して一意のキー ファイルを使用できます。

ブラック キー/PUF キーブラック キーのストレージ ソリューションは、PUF から生成された暗号強度の高い KEK (key encryption key) を使用し、ユーザー キーを暗号化します。生成されたブラック キーは、eFUSE に格納するか、認証されたブート ヘッダーの一部として格納できます。例:

test:{ bh_kek_iv = black_iv.txt bh_keyfile = black_key.txt puf_file = pufdata.txt

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 75

Page 76: Bootgen ユーザー ガイド - Xilinx

boot_config {puf4kmode} image { {type=bootloader, encryption = aes, keysrc=bh_blk_key, pufhd_bh, aeskeyfile = red_grey.nky, file=plm.elf} {type=pmcdata,load=0xf2000000, aeskeyfile = pmcdata.nky, file=pmc_data.cdo} {core=psm, file=psm.elf} {type=cdo, file=ps_data.cdo} {type=cdo, file=subsystem.cdo} {core=a72-0, exception_level = el-3, file=hello_world.elf} }}

メタ ヘッダーの暗号化Versal ACAP の場合、暗号化が metaheader 属性の下で指定されると、Bootgen がメタ ヘッダーを暗号化します。使用する aeskeyfile は、[metaheader] の下のパラメーターを使用して bif で指定できます。次は、その使用例です。metaheader{ encryption = aes, keysrc = bbram_red_key, aeskeyfile = headerkey.nky,}

次の条件が適用されます。• 特定の aeskeyfile がメタ ヘッダーに指定されていない場合、Bootgen は meta_header.nky というファイルを生成して、暗号化中に使用します。

• ブートローダーが bif に含まれる場合は、ブートローダーを暗号化してメタ ヘッダーを暗号化する必要があります。パーシャル PDI の場合、メタ ヘッダーの暗号化はオプションです。

認証の使用AES 暗号化は対称キーを用いた自己認証アルゴリズムで、暗号化と復号化に同じキーを使用します。したがって、このキーは非公開キーとして保護する必要があり、キーを格納するための領域が内部に必要になります。RSA (RivestShamir Adleman) による認証手段もあります。RSA は非対称アルゴリズムで、署名に使用するキーと検証に使用するキーが異なります。認証には一対のキーが必要です。• 署名には、秘密キーを使用します。• 検証には、公開キーを使用します。この公開キーは保護の必要がないため、セキュアな格納領域は不要です。この認証方式と暗号化を組み合わせることにより、真正性と機密性の両方を確保できます。RSA は、暗号化されているパーティションと暗号化されていないパーティションのいずれにも使用可能です。RSA のメリットは、公開キーを使用することだけではなく、復号化する前に認証を実行できることが挙げられます。RSA 公開キーのハッシュ値は eFUSE に格納する必要があります。ザイリンクス SoC デバイスでは、パーティションデータは AES 復号化エンジンに送信される前に認証されます。この方法では、パーティション データの真正性を確認してから復号化を実行することになるため、復号化エンジンへの攻撃を防ぐことができます。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 76

Page 77: Bootgen ユーザー ガイド - Xilinx

ザイリンクス SoC では、公開キーと秘密キーの 2 つのペアが使用されます (プライマリおよびセカンダリ)。プライマリ公開/秘密キーは、セカンダリ公開/秘密キー ペアを認証します。セカンダリ キーは、パーティションを署名/検証します。キーを示す頭文字の最初のアルファベットは、プライマリの場合 P、セカンダリの場合 S となります。キーを示す頭文字の 2 番目のアルファベットは、公開の場合 P、秘密の場合 S となります。キーの種類は次の 4 つです。• PPK = プライマリ公開キー• PSK = プライマリ秘密キー• SPK = セカンダリ公開キー• SSK = セカンダリ秘密キーBootgen は、次の 2 つの方法で認証証明を作成できます。• PSK と SSK を供給します。これらの 2 つの入力を使用し、SPK 署名がオンザフライで計算されます。• PPK、SSK、および SPK 署名を入力として供給します。この方法は、PSK がわからない場合に使用されます。プライマリ キーはハッシュ化されて eFUSE 内に格納されます。このハッシュ値は、FSBL によってブート イメージに格納されたプライマリ キーのハッシュ値と比較されます。このハッシュは、Vitis に付属するスタンドアロン ドライバーを使用して PS の eFUSE メモリに書き込むことができます。BIF ファイルの例を次に示します。image:{ [pskfile]primarykey.pem [sskfile]secondarykey.pem [bootloader,authentication=rsa] fsbl.elf [authentication=rsa]uboot.elf}

デバイス固有の認証の詳細は、次の資料を参照してください。• Zynq-7000 SoC デバイスの認証証明• Zynq UltraScale+ MPSoC デバイスの認証証明• Versal ACAP 認証証明

署名次の図に、パーティションの RSA 署名プロセスを示します。セキュアな施設から Bootgen により秘密キーを使用してパーティションに署名します。署名プロセスの手順は、次のとおりです。1. PPK および SPK を認証証明 (AC) に格納します。2. PSK を使用して SPK に署名し、SPK 署名を取得します。これは、AC の一部としても格納されます。3. SSK を使用してパーティションに署名し、パーティション署名を取得し、AC に格納します。4. デバイスによって認証が選択されている各パーティションの先頭または末尾に AC を追加します。5. PPK をハッシュ化し、eFUSE 内に格納します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 77

Page 78: Bootgen ユーザー ガイド - Xilinx

図 12: パーティションの RSA 署名プロセス

Hash

eFUSE

Hash + RSA

Hash + RSA

Prim

ary

Keys PPK

PSK

Seco

ndar

y Ke

ys SPK

SSK

Partition

Authentication Header

PPK

SPK

SPKSignature

PartitionSignature

PartitionAuthentication

Certificate

Partition

AuthenticationCertificate

Partition Headers

Boot Header

Secret Key

Secret Key

X21278-080618

次の表に、認証のオプションを示します。表 34: 認証キーに対してサポートされているファイル フォーマット

キー 名前 説明 サポートされているファイル フォーマットPPK プライマリ公開キー パーティションを認証するために使用するキーです。

パーティションの認証時に必ず指定する必要があります。

*.txt*.pem*.pub*.pk1

PSK プライマリ秘密キー パーティションを認証するために使用するキーです。パーティションの認証時に必ず指定する必要があります。

*.txt*.pem*.pk1

SPK セカンダリ公開キー このキーを指定した場合、パーティションの認証に使用されます。 *.txt*.pem*.pub*.pk1

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 78

Page 79: Bootgen ユーザー ガイド - Xilinx

表 34: 認証キーに対してサポートされているファイル フォーマット (続き)

キー 名前 説明 サポートされているファイル フォーマットSSK セカンダリ秘密キー このキーを指定した場合、パーティションの認証に使用されます。 *.txt

*.pem*.pk1

検証デバイス内では、公開キーを使用して、bootROM が FSBL を検証し、FSBL または U-Boot のいずれかが続くパーティションを検証します。1. PPK の検証: この手順では、プライマリ キーの認証が確立されます。プライマリ キーは、セカンダリ キーの認証に使用します。a. ブート イメージの AC から PPK が読み出されます。b. PPK ハッシュ値を生成します。c. ハッシュ化された PPK と、eFUSE から取得された PPK ハッシュ値を比較します。d. 同じ場合はプライマリ キーが信頼されます。そうでない場合はセキュア ブート エラーとなります。

2. セカンダリ キーの検証 - この手順では、セカンダリ キーの認証が確立されます。セカンダリ キーはパーティションの認証に使用します。a. ブート イメージの AC から SPK が読み出されます。b. SPK ハッシュ値を生成します。c. PPK を使用して AC に格納されている SPK 署名を検証し、SPK ハッシュ値を取得します。d. ステップ (b) およびステップ (c) からのハッシュ値を比較します。e. 同じ場合はセカンダリ キーが信頼されます。そうでない場合はセキュア ブート エラーとなります。

3. パーティションの検証: この手順では、ブートされているパーティションの信頼性を確立します。a. ブート イメージからパーティションが読み出されます。b. パーティションのハッシュ値を生成します。c. SPK を使用して AC に格納されているパーティション署名を検証し、パーティション ハッシュ値を取得しま

す。d. ステップ (b) およびステップ (c) からのハッシュ値を比較します。e. 同じ場合はパーティションが信頼されます。そうでない場合はセキュア ブート エラーとなります。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 79

Page 80: Bootgen ユーザー ガイド - Xilinx

図 13: 検証のフロー図

Hash

eFUSE

Hash + RSA

Hash + RSA

Prim

ary

Keys PPK

PSK

Seco

ndar

y Ke

ys SPK

SSK

Partition

Authentication Header

PPK

SPK

SPKSignature

PartitionSignature

PartitionAuthentication

Certificate

Partition

AuthenticationCertificate

Partition Headers

Boot Header

Secret Key

Secret Key

X21278-080618

Bootgen は、次の 2 つの方法で認証証明を作成できます。• PSK と SSK を供給します。これらの 2 つの入力を使用し、SPK 署名がオンザフライで計算されます。• PPK、SSK、および SPK 署名を入力として供給します。この方法は、PSK がわからない場合に使用されます。

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

NIST SHA-3 のサポート注記: SHA-3 認証では、ブート ヘッダー、PPK、およびブート イメージのハッシュ値の計算に Keccak SHA-3 が常に使用されます。ROM によってロードされないその他すべてのパーティションには、NIST-SHA3 が使用されます。生成された署名は、次の表に基づいて Keccak-SHA3 または NIST-SHA3 を使用します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 80

Page 81: Bootgen ユーザー ガイド - Xilinx

表 35: 認証署名

認証証明 (AC) の種類 署名 SHA アルゴリズムおよび SPKeFUSE 署名の生成に使用される秘密キー

パーティション ヘッダー AC(FSBL/FW によってロードされる)

SPK 署名 SPKID eFUSE の場合 Keccak、ユーザー eFUSE の場合はNIST

PSK

BH 署名 常に Keccak SSKheader

ヘッダー署名 常に NIST SSKheader

ブートローダー (FSBL) AC(ROM によってロードされる)

SPK 署名 常に Keccak、常に SPK 用のSPKID eFUSE

PSK

BH 署名 常に Keccak SSKBootloader

FSBL 署名 常に Keccak SSKBootloader

その他のパーティション AC(FSBL FW によってロードされる)

SPK 署名 SPKID eFUSE の場合 Keccak、ユーザー eFUSE の場合はNIST

PSK

BH 署名 常に Keccak パディング SSKPartition

パーティション署名 常に NIST パディング SSKPartition

例例 1: 1 つのキー ファイル セットでパーティションを認証するための BIF ファイルimage:{ [fsbl_config] bh_auth_enable [auth_params] ppk_select=0; spk_id=0x00000000 [pskfile] primary_4096.pem [sskfile] secondary_4096.pem [pmufw_image] pmufw.elf [bootloader, authentication=rsa, destination_cpu=a53-0] fsbl.elf [authenication=rsa, destination_cpu=r5-0] hello.elf}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 81

Page 82: Bootgen ユーザー ガイド - Xilinx

例 2: パーティションごとに個別のセカンダリ キーを使用してパーティションを認証するための BIF ファイルimage:{ [auth_params] ppk_select=1 [pskfile] primary_4096.pem [sskfile] secondary_4096.pem // FSBL (Partition-0) [ bootloader, destination_cpu = a53-0, authentication = rsa, spk_id = 0x01, sskfile = secondary_p1.pem ] fsbla53.elf

// ATF (Partition-1) [ destination_cpu = a53-0, authentication = rsa, exception_level = el-3, trustzone = secure, spk_id = 0x01, sskfile = secondary_p2.pem ] bl31.elf // UBOOT (Partition-2) [ destination_cpu = a53-0, authentication = rsa, exception_level = el-2, spk_id = 0x01, sskfile = secondary_p3.pem ] u-boot.elf}

外部メモリを使用したビットストリーム認証ビットストリームの認証は、その他のパーティションとは異なります。FSBL は、OCM 内にすべて含めることが可能であるため、デバイス内部で認証して復号化できます。ビットストリームの場合は、ファイル サイズが非常に大きいためデバイス内にすべてを含めることができず、外部メモリを使用する必要があります。外部メモリを使用すると、攻撃者がこの外部メモリに侵入する可能性があるため、セキュリティ管理という課題が生じます。ビットストリームの認証が要求されると、Bootgen はビットストリーム全体を 8MB ブロックに分割し、各ブロックに認証証明が与えられます。ビットストリームが 8MB の倍数でない場合は、最後のブロックに残りのビットストリーム データが含まれます。認証と暗号化の両方が有効の場合は、最初にビットストリームの暗号化が実行されます。その後、Bootgenは暗号化されたデータをブロックに分割して、各ブロックに認証証明を提供します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 82

Page 83: Bootgen ユーザー ガイド - Xilinx

図 14: 外部メモリを使用したビットストリーム認証

ユーザー eFUSE サポートおよび RSA キー取り消しの改善RSA キー取り消しサポートの改善RSA キーは、すべてのパーティションのセカンダリ キーを取り消すことなく、1 つのパーティションのセカンダリ キーを取り消すことができます。注記: プライマリ キーは、すべてのパーティションで同じものである必要があります。これには、USER_FUSE0 〜 USER_FUSE7 の eFUSE と、BIF パラメーターの spk_select を使用します。注記: すべてのキーを使用する必要がない場合は、最大で 256 個のキーを取り消すことができます。次の BIF ファイルの例は、改善されたユーザー eFUSE 取り消しを示しています。イメージ ヘッダーおよび FSBL は、下記の例を BIF へ追加することで、認証に異なる SSK を使用します (それぞれ ssk1.pem および ssk2.pem)。the_ROM_image:{ [auth_params]ppk_select = 0 [pskfile]psk.pem [sskfile]ssk1.pem [ bootloader, authentication = rsa, spk_select = spk-efuse, spk_id = 0x8, sskfile = ssk2.pem ] zynqmp_fsbl.elf [ destination_cpu = a53-0, authentication = rsa, spk_select = user-efuse, spk_id = 0x100, sskfile = ssk3.pem ] application.elf [ destination_cpu = a53-0, authentication = rsa,

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 83

Page 84: Bootgen ユーザー ガイド - Xilinx

spk_select = spk-efuse, spk_id = 0x8, sskfile = ssk4.pem ] application2.elf}

• spk_select = spk-efuse の場合、そのパーティションに spk_id eFUSE が使用されることを意味します。• spk_select = user-efuse の場合、そのパーティションにユーザー eFUSE が使用されることを意味します。CSU ROM によってロードされるパーティションは、常に spk_efuse を使用します。注記: spk_id eFUSE は、どのキーが有効であるかを指定します。したがって、ROM は spk_id eFUSE のフィールド全体を SPK ID と照合してビットが一致することを確認します。ユーザー eFUSE は、どのキー ID が有効でない (取り消された) かを指定します。したがって、ファームウェア (ROM以外) は、SPK ID を表すそのユーザー eFUSE がプログラムされているかどうかをチェックします。

キーの生成Bootgen には RSA キーを生成する機能があります。または、OpenSSL などの外部ツールを使用してキーを作成することもできます。Bootgen は BIF ファイルで指定したパスにキーを作成します。次の図は、RSA 秘密キー ファイルの例です。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 84

Page 85: Bootgen ユーザー ガイド - Xilinx

図 15: RSA 秘密キー ファイルの例

注記: 公開コンポーネントには、通常拡張子 .pub が使用されます。これは、公開コンポーネントおよび秘密コンポーネント両方を含む秘密キーから抽出できます。秘密キーには、通常拡張子 .pem が使用されます。公開キー コンポーネントを生成するには、上記の例の pskfile/sskfile の代わりに ppkfile/spkfile を使用します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 85

Page 86: Bootgen ユーザー ガイド - Xilinx

BIF の例BIF ファイルの例 generate_pem.bif を次に示します。generate_pem:{ [pskfile] psk0.pem [sskfile] ssk0.pem}

コマンドキーを生成する構文は、次のとおりです。bootgen -generate_keys pem -arch zynqmp -image generate_pem.bif

eFUSE 用の PPK ハッシュBootgen は、PPK が信頼されることを確実にすることを目的とした、eFUSE に格納するための PPK ハッシュを生成します。次に示す手順は、eFUSE モードの RSA 認証でのみ実行する必要があり、Zynq® UltraScale+™ MPSoC デバイスの RSA ブート ヘッダー認証ではスキップできます。efuseppksha.txt からの値は、eFUSE にプログラムして、eFUSE モードの RSA 認証に使用できます。BBRAM および eFUSE プログラミングの詳細は、『BBRAM および eFUSE のプログラミング』 (XAPP1319: 英語版、日本語版) を参照してください。

BIF ファイルの例BIF ファイルの例 (generate_hash_ppk.bif) を次に示します。generate_hash_ppk:{ [pskfile] psk0.pem [sskfile] ssk0.pem [bootloader, destination_cpu=a53-0, authentication=rsa] fsbl_a53.elf}

コマンドeFUSE プログラミング用の PPK ハッシュを生成するコマンドは次のとおりです。bootgen –image generate_hash_ppk.bif –arch zynqmp –w –o /test.bin –efuseppkbits efuseppksha.txt

Versal 認証サポートBootgen では、Versal ACAP の認証に RSA-4096 および ECDSA P384 と P521 がサポートされます。すべてのパーティション/ヘッダーのハッシュを計算するには、NIST SHA-3 が使用されます。ハッシュで計算される署名は、PDI に含まれます。注記: Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合と異なり、Versal ACAP では認証証明がパーティションよりも前に含まれます。ECDSA P521 曲線は、ブートローダー パーティション (PLM) ではサポートされていません。bootROM では、RSA-4096 または ECDSA-P384 認証のみがサポートされます。その他のパーティションの認証には、P521 を使用できます。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 86

Page 87: Bootgen ユーザー ガイド - Xilinx

メタ ヘッダー認証Versal ACAP では、BIF 属性 metaheader のパラメーターに基づいて、Bootgen でメタ ヘッダーが認証されます。次は、その使用例です。metaheader{ authentication = rsa, pskfile = psk.pem, sskfile = ssk.pem}

eFUSE 用の PPK ハッシュBootgen は、PPK が信頼されることを確実にすることを目的とした、eFUSE に格納するための PPK ハッシュを生成します。次に示す手順は、eFUSE モードの認証でのみ実行する必要があり、ブート ヘッダー認証ではスキップできます。efuseppksha.txt からの値は、eFUSE にプログラムして eFUSE モードの認証に使用できます。

BIF ファイルの例BIF ファイルの例 (generate_hash_ppk.bif) を次に示します。generate_hash_ppk:{ pskfile = primary0.pem sskfile = secondary0.pem image { name = pmc_ss, id = 0x1c000001 { type=bootloader, authentication=rsa, file=plm.elf} { type=pmcdata, load=0xf2000000, file=pmc_cdo.bin} }}

コマンドeFUSE プログラミング用の PPK ハッシュを生成するコマンドは次のとおりです。bootgen –image generate_hash_ppk.bif –arch versal –w –o test.bin –efuseppkbits efuseppksha.txt

Versal ACAP の累積セキュア ブート表 36: 累加的なセキュア ブート動作

ブート タイプ動作 ハードウェア暗号化エンジン認証 復号化 完全性 (チェックサム検証)

非セキュア ブート なし なし なし なし非対称のハードウェアによる信頼のルート (A-HWRoT)

はい (必須) なし なし RSA/ECDSA と SHA3

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 87

Page 88: Bootgen ユーザー ガイド - Xilinx

表 36: 累加的なセキュア ブート動作 (続き)

ブート タイプ動作 ハードウェア暗号化エンジン認証 復号化 完全性 (チェックサム検証)

対称のハードウェアによる信頼のルート (S-HWRoT) (PDI の復号化には強制的に eFUSE ブラック キーを使用)

なし あり (PLM とメタ ヘッダーは eFUSE KEK で暗号化する必要あり)

なし AES-GCM

A-HWRoT + S-HWRoT はい (必須) はい (必須) なし RSA/ECDSA と SHA3 および AES-GCM

PDI の認証と復号化 あり Yes (キー ソースはBBRAM または eFUSE)

なし RSA/ECDSA と SHA3 および AES-GCM

復号化 (ユーザーが選択したキーを使用。キーソースは、BBRAM/BHDR または eFUSE など任意のものを使用可能)

なし あり なし AES-GCM

チェックサム検査 なし なし Yes SHA3

HSM モードの使用現在の暗号技術では、すべてのアルゴリズムが公開されているため、秘密キーの保護が重要です。ハードウェア セキュリティ モジュール (HSM) は、暗号化キーのライフサイクルを保護するために特別に設計された専用の暗号処理デバイスであり、Bootgen に公開キーのみを渡して秘密キーを渡さないようにすることでキー処理のセキュリティを向上します。標準モードも使用可能です。このモードでは、キーを渡す必要はありません。組織によっては、情報セキュリティ担当者がセキュア エンベデッド製品のプロダクション リリースを担当します。情報セキュリティ担当者が、デジタル署名に HSM を使用し、暗号化には別のセキュア サーバーを使用することがあります。HSM とセキュア サーバーは、通常はセキュア エリア内に配置されます。HSM はセキュア キー/署名生成デバイスであり、秘密キーを生成し、秘密キーを使用してパーティションに署名し、RSA キーの公開部分を Bootgen に供給します。秘密キーは、HSM にのみ配置されます。HSM モードの Bootgen は、RSA 公開キーと、ブート イメージを生成するために HSM によって作成された署名のみを使用します。HSM は、Bootgen によって生成されたパーティションのハッシュ値を受信し、ハッシュ値と RSA 秘密キーに基づいて署名ブロックを返します。HSM モードとは異なり、標準モードの Bootgen では、イメージ内のパーティションの暗号化および認証に、BIF ファイルで提供される AES 暗号化キーと RSA 秘密キーがそれぞれ使用されます。出力は 1 つのブート イメージであり、暗号化および認証されています。ユーザーは、認証用に公開キーと秘密キーの両方を提供する必要があります。Bootgen は秘密キーを使用してパーティションに署名し、署名を作成します。これらの署名は公開キーと共に最終的なブート イメージに埋め込まれます。FPGA の HSM モードの詳細は、FPGA の HSM モードを参照してください。

高度なキー管理オプションの使用秘密キーに関連付けられている公開キーは、ppk.pub および spk.pub です。HSM は、Bootgen によって生成されたパーティションのハッシュ値を受信し、ハッシュ値と秘密キーに基づいて署名ブロックを返します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 88

Page 89: Bootgen ユーザー ガイド - Xilinx

HSM モードを使用したブート イメージの作成: PSK の共有なし次の図に、HSM モードを使用するステージ 0 〜ステージ 2 のブート スタックを示します。SSK を配布することでステップ数が削減されています。この図では、Zynq® UltraScale+™ MPSoC デバイスを使用して各ステージを説明しています。

図 16: 一般的な 3 ステージ ブート イメージ

HSM Mode

Stag

e-1 PSK hash

Generate SPKsignature

SPK hashSPK signature

BOOTGEN

Stag

e-0 SPK ID

Generate SPKHash

SPK hash

BOOTGEN

Stag

e-2

Generate Boot Image

PPK and SSKFinal Boot

ImageFSBLpartitions

NKY Key

SPK signature

SPK

AC header

PSK

SPK ID

X21359-052120

ブート プロセスHSM モードを使用したブート イメージの作成は、次の BIF ファイルを使用して標準フローでブート イメージを作成するのと似ています。all:{ [auth_params] ppk_select=1;spk_id=0x8 [keysrc_encryption]bbram_red_key [pskfile]primary.pem [sskfile]secondary.pem [ bootloader, encryption=aes, aeskeyfile=aes.nky, authentication=rsa ]fsbl.elf [destination_cpu=a53-0,authentication=rsa]hello_a53_0_64.elf}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 89

Page 90: Bootgen ユーザー ガイド - Xilinx

ステージ 0: HSM モードを使用してブート イメージを作成信頼されている個人が、プライマリ秘密キーを使用して SPK 署名を作成します。SPK 署名は、認証証明ヘッダー、SPK、および SPK にあります。上記のためのハッシュを生成するには、次の BIF ファイルの抜粋を使用します。stage 0:{ [auth_params] ppk_select=1;spk_id=0x3 [spkfile]keys/secondary.pub}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage0.bif -generate_hashes

このコマンドの出力は secondary.pub.sha384 です。

ステージ 1: SPK 署名を配布信頼されている個人が SPK 署名を開発チームに配布します。openssl rsautl -raw -sign -inkey keys/primary0.pem -in secondary.pub.sha384 > secondary.pub.sha384.sig

このコマンドの出力は secondary.pub.sha384.sig です。

ステージ 2: FSBL で AES を使用して暗号化開発チームが Bootgen を使用して必要な数のブート イメージを作成します。開発チームは次を使用します。• 信頼されている個人からの SPK 署名。• セカンダリ秘密キー (SSK)、SPK、および SPKID

Stage2:{ [keysrc_encryption]bbram_red_key [auth_params] ppk_select=1;spk_id=0x3 [ppkfile]keys/primary.pub [sskfile]keys/secondary0.pem [spksignature]secondary.pub.sha384.sig [bootloader,destination_cpu=a53-0, encryption=aes, aeskeyfile=aes0.nky, authentication=rsa] fsbl.elf [destination_cpu=a53-0, authentication=rsa] hello_a53_0_64.elf }

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage2.bif -o final.bin

HSM モードを使用した Zynq-7000 SoC デバイス ブート イメージの作成次の図に、Zynq®-7000 SoC デバイスの HSM モードのブート イメージを示します。この図の後にブート イメージを作成する手順を示します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 90

Page 91: Bootgen ユーザー ガイド - Xilinx

図 17: ステージ 0 〜 8 のブート プロセス

Stage-2b

BOOTGEN

Stag

e-7a

PPK & SPKFSBL with auth certificateencrypted

FSBL

SPK sign

BOOTGEN

Stag

e-7a

PPK & SPKFSBL with auth certificateencrypted

FSBL

SPK sign

HSM

Stag

e-1 PSK hash

Generate SPKsignature

SPK hashSPK signature

nky key

HSM

Stag

e-4a

Generate FSBL Signature

FSBL hash FSBL Signature

BOOTGEN

Stag

e-5a

PPK & SPK

FSBL Signatureencrypted FSBL

SPK signature

BOOTGENSt

age-

0

Generate SPKHash

SPK

SPK hash

BOOTGEN

Stag

e-6

Generate header Table

hash

Header Table hash

HSM

Stag

e-7

Generate Header Table

signatureHeader

Table hash

Header Table Signature

Stag

e-8 Generate

bootmage

final bootimage

Header Table Signature

PSK

Generate FSBL hashe

PPK & SPKFSBL hashencrypted

FSBL

SPK signature

Stage-3b

Generate FSBLHash

Stage-4b

Stage-5b

Partions with Authenticated

Certificates

Stag

e-3a

BOOTGEN

Stag

e-2a

Encrypt FSBLFSBL

nky Key

encrypted FSBL

BOOTGEN

Stage- 3a

SSK

FSBL signature

InsertFSBL Signature

SSK

BOOTGEN

Stag

e-8 Generate Boot

ImageFinal Boot Image

Partions with Authenticated

Certificates

Header Table Signature

AC header

SPK ID

X21416-052120

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 91

Page 92: Bootgen ユーザー ガイド - Xilinx

HSM モードを使用して Zynq®-7000 SoC デバイスのブート イメージを作成するプロセスは、次の BIF ファイルを使用して標準フローでブート イメージを作成するのと似ています。これらの例は、必要に応じてハッシュ ファイルを生成するために OpenSSL プログラムを使用します。all:{ [aeskeyfile]my_efuse.nky [pskfile]primary.pem [sskfile]secondary.pem [bootloader,encryption=aes,authentication=rsa] zynq_fsbl_0.elf [authentication=rsa]system.bit}

ステージ 0: SPK のハッシュを生成このステージは、SPK キーのハッシュを生成します。stage0:{ [ppkfile] primary.pub [spkfile] secondary.pub}

Bootgen コマンドは次のとおりです。bootgen -image stage0.bif –w -generate_hashes

ステージ 1: SPK ハッシュに署名このステージは SPK ハッシュにサインして署名を作成します。xil_rsa_sign.exe -gensig -sk primary.pem -data secondary.pub.sha256 -out secondary.pub.sha256.sig

または、OpenSSL プログラムを使用して署名を作成します。#Swap the bytes in SPK hashobjcopy -I binary -O binary --reverse-bytes=256 secondary.pub.sha256

#Generate SPK signature using OpenSSLopenssl rsautl -raw -sign -inkey primary.pem -in secondary.pub.sha256 > secondary.pub.sha256.sig

#Swap the bytes in SPK signatureobjcopy -I binary -O binary --reverse-bytes=256 secondary.pub.sha256.sig

ステージ 2: AES を使用して暗号化このステージはパーティションを暗号化します。stage2.bif は次のとおりです。stage2:{ [aeskeyfile] my_efuse.nky [bootloader, encryption=aes] zynq_fsbl_0.elf}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 92

Page 93: Bootgen ユーザー ガイド - Xilinx

Bootgen コマンドは次のとおりです。bootgen -image stage2.bif -w -o fsbl_e.bin -encrypt efuse

出力は、暗号化されたファイル (fsbl_e.bin) です。

ステージ 3: パーティションのハッシュを生成このステージは、さまざまなパーティションのハッシュを生成します。ステージ 3a: FSBL ハッシュを生成BIF ファイルは次のとおりです。stage3a:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature] secondary.pub.sha256.sig [bootimage, authentication=rsa] fsbl_e.bin}

Bootgen コマンドは次のとおりです。bootgen -image stage3a.bif -w -generate_hashes

出力は、ハッシュ ファイル (zynq_fsbl_0.elf.0.sha256) です。ステージ 3b: ビットストリーム ハッシュを生成このステージの BIF ファイルは次のとおりです。stage3b:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature] secondary.pub.sha256.sig [authentication=rsa] system.bit}

Bootgen コマンドは次のとおりです。bootgen -image stage3b.bif -w -generate_hashes

出力は、ハッシュ ファイル (system.bit.0.sha256) です。ステージ 4: ハッシュに署名このステージは作成したパーティション ハッシュ ファイルから署名を作成します。ステージ 4a: FSBL パーティション ハッシュに署名xil_rsa_sign.exe -gensig -sk secondary.pem -data zynq_fsbl_0.elf.0.sha256 -out zynq_fsbl_0.elf.0.sha256.sig

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 93

Page 94: Bootgen ユーザー ガイド - Xilinx

または、OpenSSL プログラムを使用して署名を作成します。#Swap the bytes in FSBL hashobjcopy -I binary -O binary --reverse-bytes=256 zynq_fsbl_0.elf.0.sha256

#Generate FSBL signature using OpenSSLopenssl rsautl -raw -sign -inkey secondary.pem -in zynq_fsbl_0.elf.0.sha256 > zynq_fsbl_0.elf.0.sha256.sig

#Swap the bytes in FSBL signatureobjcopy -I binary -O binary --reverse-bytes=256 zynq_fsbl_0.elf.0.sha256.sig

出力は、署名ファイル (zynq_fsbl_0.elf.0.sha256.sig) です。ステージ 4b: ビットストリーム ハッシュに署名xil_rsa_sign.exe -gensig -sk secondary.pem -data system.bit.0.sha256 -out system.bit.0.sha256.sig

または、OpenSSL プログラムを使用して署名を作成します。#Swap the bytes in bitstream hashobjcopy -I binary -O binary --reverse-bytes=256 system.bit.0.sha256

#Generate bitstream signature using OpenSSLopenssl rsautl -raw -sign -inkey secondary.pem -in system.bit.0.sha256 > system.bit.0.sha256.sig

#Swap the bytes in bitstream signatureobjcopy -I binary -O binary --reverse-bytes=256 system.bit.0.sha256.sig

出力は、署名ファイル (system.bit.0.sha256.sig) です。ステージ 5: パーティションの署名を挿入上記のステージで作成したパーティションの署名を挿入し、認証証明に変更します。ステージ 5a: FSBL 署名を挿入stage5a.bif は次のとおりです。stage5a:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature] secondary.pub.sha256.sig [bootimage, authentication=rsa, presign=zynq_fsbl_0.elf.0.sha256.sig] fsbl_e.bin}

Bootgen コマンドは次のとおりです。bootgen -image stage5a.bif -w -o fsbl_e_ac.bin -efuseppkbits efuseppkbits.txt -nonbooting

認証された出力ファイルは、fsbl_e_ac.bin および efuseppkbits.txt です。ステージ 5b: ビットストリーム署名を挿入

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 94

Page 95: Bootgen ユーザー ガイド - Xilinx

stage5b.bif は次のとおりです。stage5b:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature] secondary.pub.sha256.sig [authentication=rsa, presign=system.bit.0.sha256.sig] system.bit}

Bootgen コマンドは次のとおりです。bootgen -image stage5b.bif -o system_e_ac.bin –nonbooting

認証された出力ファイルは system_e_ac.bin です。ステージ 6: ヘッダー テーブルのハッシュを生成このステージは、ヘッダー テーブルのハッシュを生成します。stage6.bif は次のとおりです。stage6:{ [bootimage] fsbl_e_ac.bin [bootimage] system_e_ac.bin}

Bootgen コマンドは次のとおりです。bootgen -image stage6.bif -generate_hashes

出力ハッシュ ファイルは ImageHeaderTable.sha256 です。ステージ 7: ヘッダー テーブル署名を生成このステージは、ヘッダー テーブル署名を生成します。xil_rsa_sign.exe -gensig -sk secondary.pem -data ImageHeaderTable.sha256 -out ImageHeaderTable.sha256.sig

または、OpenSSL プログラムを使用して署名を作成します。#Swap the bytes in header table hashobjcopy -I binary -O binary --reverse-bytes=256 ImageHeaderTable.sha256

#Generate header table signature using OpenSSLopenssl rsautl -raw -sign -inkey secondary.pem -in ImageHeaderTable.sha256 > ImageHeaderTable.sha256.sig

#Swap the bytes in header table signatureobjcopy -I binary -O binary --reverse-bytes=256 ImageHeaderTable.sha256.sig

出力は、署名ファイル (ImageHeaderTable.sha256.sig) です。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 95

Page 96: Bootgen ユーザー ガイド - Xilinx

ステージ 8: パーティションを結合し、ヘッダー テーブル署名を挿入するstage8.bif は次のとおりです。stage8:{ [headersignature] ImageHeaderTable.sha256.sig [bootimage] fsbl_e_ac.bin [bootimage] system_e_ac.bin}

Bootgen コマンドは次のとおりです。bootgen -image stage8.bif -w -o final.bin

出力は、ブート イメージ ファイル (final.bin) です。

HSM モードを使用した Zynq UltraScale+ MPSoC デバイス ブートイメージの作成次の図に、HSM モードのブート イメージの図を示します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 96

Page 97: Bootgen ユーザー ガイド - Xilinx

図 18: 0 〜 10 ステージのブート プロセス

BH hash

BOOTGEN

Stag

e-7a

Encrypt FSBL

PPK & SPK FSBL with

auth certificate

encrypted FSBL

SPK signBOOTGEN

Stag

e-7a

Encrypt FSBL

PPK & SPK

encrypted FSBL

SPK sign

BOOTGEN

Generate SPKHash

FSBLnky key

BOOTGEN

Stage-2b

Generate SPKHash

FSBLnky key

HSM

Stag

e-1

Generate SPK

signatureSPK hash SPK

signature

BOOTGEN

Stag

e-2a

Encrypt FSBL

FSBLencrypted FSBLnky key

BOOTGEN

Stag

e-3 Generate

BHhash

PPK & SPK BH hash

Encrypted FSBL

HSM

Stag

e-4

Generate BH

signature

BH hashBH signature

BOOTGEN

Stag

e-5 Generate

partition hashes

PPK & SPKpartition hashesencrypted

partitions

SPK signature BH signature

HSM

Stag

e-6

Generate partition

signaturespartition hashes

partition signatures

BOOTGEN

Stag

e-7a

PPK & SPK

FSBL with authentication certificate

encrypted FSBL

SPK signature BH signature*BOOTGEN

Stag

e-0 SPK

Generate SPKHash

SPK

SPK hash

BOOTGEN

Stag

e-8

Generate Header

Table hash

Partitions with Authenticated

Certificate

Header Table hash

HSM

Stag

e-9

Generate headerTable

signature

Header Table hash

Header Table signature

BOOTGEN

Stag

e-10

Generate bootmage

Partitions with Authenticated

Certificate

final bootimage

header Table signatureSPK Signature

Insert FSBLSignature

Stage-7bStage-7c

Stage-2c

SSK

SSK

SSK

AC header

SPK ID

X21547-052120

HSM モードを使用した Zynq® UltraScale+™ MPSoC デバイスのブート イメージの作成は、次の BIF ファイルを使用して標準フローでブート イメージを作成するのと似ています。これらの例は、必要に応じてハッシュ ファイルを生成するために OpenSSL プログラムを使用します。all:{ [fsbl_config] bh_auth_enable [keysrc_encryption] bbram_red_key [pskfile] primary0.pem

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 97

Page 98: Bootgen ユーザー ガイド - Xilinx

[sskfile] secondary0.pem [ bootloader, destination_cpu=a53-0, encryption=aes, aeskeyfile=aes0.nky, authentication=rsa ] fsbl.elf

[ destination_device=pl, encryption=aes, aeskeyfile=aes1.nky, authentication=rsa ] system.bit

[ destination_cpu=a53-0, authentication=rsa, exception_level=el-3, trustzone=secure ] bl31.elf

[ destination_cpu=a53-0, authentication=rsa, exception_level=el-2 ] u-boot.elf}

注記: HSM フローで pmufw_image を使用するには、上記の BIF に [pmufw_image] pmufw.elf を追加します。同様の行の場合、これは FSBL が暗号化される stage2a bif に追加する必要があります。フローの残りは、同じままになります。ステージ 0: SPK のハッシュを生成次に、BIF ファイルの抜粋を示します。stage0:{ [ppkfile]primary.pub [spkfile]secondary.pub}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage0.bif -generate_hashes -w on -log error

ステージ 1: SPK ハッシュに署名 (パーティションを暗号化)

次に、OpenSSL を使用して SPK ハッシュを生成するコードの抜粋を示します。openssl rsautl -raw -sign -inkey primary0.pem -in secondary.pub.sha384 > secondary.pub.sha384.sig

このコマンドの出力は secondary.pub.sha384.sig です。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 98

Page 99: Bootgen ユーザー ガイド - Xilinx

ステージ 2a: FSBL を暗号化次の BIF ファイルの抜粋部分を使用して FSBL を暗号化します。Stage 2a:{ [keysrc_encryption] bbram_red_key

[ bootloader,destination_cpu=a53-0, encryption=aes, aeskeyfile=aes0.nky ] fsbl.elf}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage2a.bif -o fsbl_e.bin -w on -log error

ステージ 2b: ビットストリームを暗号化次の BIF ファイル エントリを生成します。stage2b:{ [ encryption=aes, aeskeyfile=aes1.nky, destination_device=pl, pid=1 ] system.bit}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage2b.bif -o system_e.bin -w on -log error

ステージ 3: ブート ヘッダー ハッシュを生成次の BIF ファイルを使用してブート ヘッダー ハッシュを生成します。stage3:{ [fsbl_config] bh_auth_enable [ppkfile] primary.pub [spkfile] secondary.pub [spksignature]secondary.pub.sha384.sig [bootimage,authentication=rsa]fsbl_e.bin}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage3.bif -generate_hashes -w on -log error

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 99

Page 100: Bootgen ユーザー ガイド - Xilinx

ステージ 4: ブート ヘッダー ハッシュに署名次の OpenSSL コマンドを使用して、ブート ヘッダー ハッシュを生成します。openssl rsautl -raw -sign -inkey secondary0.pem -in bootheader.sha384 > bootheader.sha384.sig

ステージ 5: パーティション ハッシュを取得BIF ファイルの次のコマンドを使用して、パーティション ハッシュを取得します。stage5:{ [ppkfile]primary.pub [spkfile]secondary.pub [spksignature]secondary.pub.sha384.sig [bhsignature]bootheader.sha384.sig [bootimage,authentication=rsa]fsbl_e.bin [bootimage,authentication=rsa]system_e.bin [ destination_cpu=a53-0, authentication=rsa, exception_level=el-3, trustzone=secure ] bl31.elf

[ destination_cpu=a53-0, authentication=rsa, exception_level=el-2 ] u-boot.elf}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage5.bif -generate_hashes -w on -log error

ビットストリーム パーティション用に複数のハッシュが生成されます。詳細は、外部メモリを使用したビットストリーム認証 を参照してください。ブート ヘッダー ハッシュもこのステージ 5 で生成されます。ステージ 5 では bh_auth_enable が使用されないので、このハッシュはステージ 3 で生成されたものとは異なります。これは必要に応じてステージ 5 に追加できますが、ステージ 3 で生成されたブート ヘッダー ハッシュはステージ 4 で署名され、この署名は HSM モード フローでしか使用されないので、大きな影響はありません。

ステージ 6: パーティション ハッシュに署名OpenSSL を使用して次のファイルを作成します。openssl rsautl -raw -sign -inkey secondary0.pem -in fsbl.elf.0.sha384 > fsbl.elf.0.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in system.bit.0.sha384 > system.bit.0.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in system.bit.1.sha384 > system.bit.1.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in system.bit.2.sha384 > system.bit.2.sha384.sig

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 100

Page 101: Bootgen ユーザー ガイド - Xilinx

openssl rsautl -raw -sign -inkey secondary0.pem -in system.bit.3.sha384 > system.bit.3.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in u-boot.elf.0.sha384 > u-boot.elf.0.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in bl31.elf.0.sha384 > bl31.elf.0.sha384.sigopenssl rsautl -raw -sign -inkey secondary0.pem -in bl31.elf.1.sha384 > bl31.elf.1.sha384.sig

ステージ 7: パーティション署名を認証証明に挿入ステージ 7a: 次のコードを BIF ファイルに追加して FSBL 署名を挿入します。Stage7a:{ [fsbl_config] bh_auth_enable [ppkfile] primary.pub [spkfile] secondary.pub [spksignature]secondary.pub.sha384.sig [bhsignature]bootheader.sha384.sig [bootimage,authentication=rsa,presign=fsbl.elf.0.sha384.sig]fsbl_e.bin}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage7a.bif -o fsbl_e_ac.bin -efuseppkbits efuseppkbits.txt -nonbooting -w on -log error

ステージ 7b: BIF ファイルに次を追加してビットストリーム署名を挿入します。stage7b:{ [ppkfile]primary.pub [spkfile]secondary.pub [spksignature]secondary.pub.sha384.sig [bhsignature]bootheader.sha384.sig [ bootimage, authentication=rsa, presign=system.bit.0.sha384.sig ] system_e.bin}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage7b.bif -o system_e_ac.bin -nonbooting -w on -log error

ステージ 7c: BIF ファイルに次を追加して U-Boot 署名を挿入します。stage7c:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature]secondary.pub.sha384.sig [bhsignature]bootheader.sha384.sig [ destination_cpu=a53-0,

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 101

Page 102: Bootgen ユーザー ガイド - Xilinx

authentication=rsa, exception_level=el-2, presign=u-boot.elf.0.sha384.sig ] u-boot.elf}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage7c.bif -o u-boot_ac.bin -nonbooting -w on -log error

ステージ 7d: BIF ファイルに次を追加して ATF 署名を挿入します。stage7d:{ [ppkfile] primary.pub [spkfile] secondary.pub [spksignature]secondary.pub.sha384.sig [bhsignature]bootheader.sha384.sig [ destination_cpu=a53-0, authentication=rsa, exception_level=el-3, trustzone=secure, presign=bl31.elf.0.sha384.sig ] bl31.elf}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage7d.bif -o bl31_ac.bin -nonbooting -w on -log error

ステージ 8: パーティションを結合し、ヘッダー テーブル ハッシュを取得BIF ファイルに次を追加します。stage8: { [bootimage]fsbl_e_ac.bin [bootimage]system_e_ac.bin [bootimage]bl31_ac.bin [bootimage]u-boot_ac.bin}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage8.bif -generate_hashes -o stage8.bin -w on -log error

ステージ 9: ヘッダー テーブル ハッシュに署名OpenSSL を使用して次のファイルを生成します。openssl rsautl -raw -sign -inkey secondary0.pem -in ImageHeaderTable.sha384 > ImageHeaderTable.sha384.sig

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 102

Page 103: Bootgen ユーザー ガイド - Xilinx

ステージ 10: パーティションを結合し、ヘッダー テーブル署名を挿入BIF ファイルに次を追加します。stage10: { [headersignature]ImageHeaderTable.sha384.sig [bootimage]fsbl_e_ac.bin [bootimage]system_e_ac.bin [bootimage]bl31_ac.bin [bootimage]u-boot_ac.bin}

Bootgen コマンドは次のとおりです。bootgen -arch zynqmp -image stage10.bif -o final.bin -w on -log error

注記: 現時点では、Versal デバイスでは HSM モードはサポートされていません。

HSM を使用した Versal デバイス ブート イメージの作成次の図に、Versal デバイスの HSM モードのブート イメージを示します。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 103

Page 104: Bootgen ユーザー ガイド - Xilinx

図 19: 0 〜 12 ステージのブート プロセス

Stage-1cStage-1b

Stage-0c

BOOTGEN Generate SPKHashFSBL

nky key

Stage-0b

BH hash

BOOTGEN

Stag

e-7a

Encrypt FSBL

PPK & SPK FSBL with

auth certificate

encrypted FSBL

SPK signBOOTGEN

Stag

e-7a

Encrypt FSBL

PPK & SPK

encrypted FSBL

SPK sign

nky key

HSM

Stag

e-1a

Generate SPK

signatureSPK hash SPK

signature

BOOTGEN

Stage-2b

Stag

e-2a

Encrypt PMC

Subsystem

PMC Subsystem

Encrypted PMC Subsystem

nky key

BOOTGEN

Stag

e-3 Generate

BHHash

PPK & SPK BH hash

Encrypted PMC Subsystem

HSM

Stag

e-4

Generate BH

signature

BH hashBH signature

BOOTGEN

Stag

e-5 Generate

partition hashes

PPK & SPKpartition hashesencrypted

partitions

SPK signature BH signature

HSM

Stag

e-6

Generate partition

signaturespartition hashes

partition signatures

BOOTGEN

Stag

e-7a

PPK & SPK

PMC Subsystem with authentication certificate

encrypted PLM

SPK signature BH signature*BOOTGEN

Stag

e-0a

SPKGenerate

SPKHash

SPK

SPK hash

HSM

Stag

e-9

Generate IHT

SignatureIHT Hash

IHT Signature

BOOTGEN

Stag

e-10

Generate Meta

Header Hash

IHT Signature

Meta Header Hash

BOOTGEN

Stag

e-12 Generate

bootmage

Partitions with Authenticated

Certificate

final bootimage

Meta Header Signature

SPK Signature

Insert PMC Subsystem Signature

Stage-7bStage-7c

Stage-2c

SSK

SSK

PPK & SPK

AC header

SPK ID

HSM

Generate Meta

Header Signature

Meta Header Hash

Meta Header Signature

SSK

BOOTGEN

Generate Image Header

Table Hash

PPK & SPKImage Header Table Hash

nky key

SPK signature

nky key

IHT Signature

IHT Signature

SPK Signature

nky key

PPK & SPK

Stag

e-11

Stag

e-8

SPK signature

X21547-111020

注記: PMC サブシステムには、PLM、PMC_CDO、およびトポロジ CDO が含まれます。

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 104

Page 105: Bootgen ユーザー ガイド - Xilinx

PDI の生成標準 BIF を使用して PDI を生成します。command : bootgen -arch versal -image all.bif -w on -o final_ref.bin -log error all:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 boot_config {bh_auth_enable} metaheader { authentication = rsa, pskfile = rsa-keys/PSK2.pem, sskfile = rsa-keys/SSK2.pem encryption = aes, keysrc = bbram_red_key, aeskeyfile = enc_keys/efuse_red_metaheader_key.nky, dpacm_enable } image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x01, type = bootloader, authentication = rsa, pskfile = rsa-keys/PSK1.pem, sskfile = rsa-keys/SSK1.pem, encryption = aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/bbram_red_key.nky, dpacm_enable, file = images/gen_files/executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, aeskeyfile = gen_keys/pmcdata.nky, file = images/gen_files/topology_xcvc1902.v1.cdo, file = images/gen_files/pmc_data.cdo } } image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, authentication = rsa, pskfile = rsa-keys/PSK3.pem, sskfile = rsa-keys/SSK3.pem, encryption = aes, keysrc = bbram_red_key, aeskeyfile = gen_keys/key1.nky,

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 105

Page 106: Bootgen ユーザー ガイド - Xilinx

dpacm_enable, file = images/gen_files/lpd_data.cdo } partition { id = 0x0B, core = psm, authentication = rsa, pskfile = rsa-keys/PSK1.pem, sskfile = rsa-keys/SSK1.pem, encryption = aes, keysrc = bbram_red_key, aeskeyfile = gen_keys/key2.nky, dpacm_enable, blocks = 8192(20);4096(*), file = images/static_files/psm_fw.elf } } image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, authentication = rsa, pskfile = rsa-keys/PSK3.pem, sskfile = rsa-keys/SSK3.pem, encryption = aes, keysrc = bbram_red_key, aeskeyfile = gen_keys/key5.nky, dpacm_enable, file = images/gen_files/fpd_data.cdo } } image { name = ss, id = 0x1c000033 partition { id = 0x0D, type = cdo, authentication = rsa, pskfile = rsa-keys/PSK2.pem, sskfile = rsa-keys/SSK2.pem, encryption = aes, keysrc = bbram_red_key, aeskeyfile = gen_keys/key6.nky, dpacm_enable, file = images/gen_files/subsystem.cdo } }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 106

Page 107: Bootgen ユーザー ガイド - Xilinx

HSM モードの手順ステージ 0: SPK ハッシュを生成SSK1 のハッシュ値を生成:

command : bootgen -arch versal -image stage0-SSK1.bif -generate_hashes -w on -log error stage0-SSK1:{ spkfile = rsa-keys/SSK1.pub}

SSK2 のハッシュ値を生成:

command : bootgen -arch versal -image stage0-SSK2.bif -generate_hashes -w on -log error stage0-SSK2:{ spkfile = rsa-keys/SSK2.pub}

SSK3 のハッシュ値を生成:

command : bootgen -arch versal -image stage0-SSK3.bif -generate_hashes -w on -log error stage0-SSK3:{ spkfile = rsa-keys/SSK3.pub}

ステージ 1: SPK ハッシュに署名生成されたハッシュに署名:

openssl rsautl -raw -sign -inkey rsa-keys/PSK1.pem -in SSK1.pub.sha384 > SSK1.pub.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/PSK2.pem -in SSK2.pub.sha384 > SSK2.pub.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/PSK3.pem -in SSK3.pub.sha384 > SSK3.pub.sha384.sig

ステージ 2: 個々のパーティションを暗号化パーティション 1 を暗号化:

command : bootgen -arch versal -image stage2a.bif -o pmc_subsys_e.bin -w on -log error stage2a:{ image { name = pmc_subsys, id = 0x1c000001 partition

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 107

Page 108: Bootgen ユーザー ガイド - Xilinx

{ id = 0x01, type = bootloader, encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/bbram_red_key.nky, dpacm_enable, file = images/gen_files/executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, aeskeyfile = encr_keys/pmcdata.nky, file = images/gen_files/topology_xcvc1902.v1.cdo, file = images/gen_files/pmc_data.cdo } }}

パーティション 2 を暗号化:

command : bootgen -arch versal -image stage2b-1.bif -o lpd_lpd_data_e.bin -w on -log error stage2b-1:{ image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/key1.nky, dpacm_enable, file = images/gen_files/lpd_data.cdo } }}

パーティション 3 を暗号化:

command : bootgen -arch versal -image stage2b-2.bif -o lpd_psm_fw_e.bin -w on -log error stage2b-2:{ image { name = lpd, id = 0x4210002 partition { id = 0x0B, core = psm, encryption = aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/key2.nky, dpacm_enable, file = images/static_files/psm_fw.elf } }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 108

Page 109: Bootgen ユーザー ガイド - Xilinx

パーティション 4 を暗号化:

command : bootgen -arch versal -image stage2c.bif -o fpd_e.bin -w on -log error stage2c:{ image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/key5.nky, dpacm_enable, file = images/gen_files/fpd_data.cdo } }}

ステージ 3: ブート ヘッダー ハッシュを生成command : bootgen -arch versal -image stage3.bif -generate_hashes -w on -log error stage3:{ image_config {bh_auth_enable} image { name = pmc_subsys, id = 0x1c000001 { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, file = pmc_subsys_e.bin } }}

ステージ 4: ブート ヘッダー ハッシュに署名生成されたハッシュに署名:

openssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in bootheader.sha384 > bootheader.sha384.sig

ステージ 5: パーティションのハッシュを生成command : bootgen -arch versal -image stage5.bif -generate_hashes -w on -log error stage5:{ bhsignature = bootheader.sha384.sig

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 109

Page 110: Bootgen ユーザー ガイド - Xilinx

image { name = pmc_subsys, id = 0x1c000001 { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, file = pmc_subsys_e.bin } } image { name = lpd, id = 0x4210002 partition { type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK3.pub, spkfile = rsa-keys/SSK3.pub, spksignature = SSK3.pub.sha384.sig, file = lpd_lpd_data_e.bin } partition { type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, file = lpd_psm_fw_e.bin } } image { id = 0x1c000000, name = fpd { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK3.pub, spkfile = rsa-keys/SSK3.pub, spksignature = SSK3.pub.sha384.sig, file = fpd_e.bin } } image { id = 0x1c000033, name = ss { type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK2.pub, spkfile = rsa-keys/SSK2.pub, spksignature = SSK2.pub.sha384.sig, file = subsystem_e.bin } }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 110

Page 111: Bootgen ユーザー ガイド - Xilinx

ステージ 6: パーティション ハッシュに署名openssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in pmc_subsys_1.0.sha384 > pmc_subsys.0.sha384.sig openssl rsautl -raw -sign -inkey rsa-keys/SSK3.pem -in lpd_12.0.sha384 > lpd.0.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in lpd_11.0.sha384 > psm.0.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in lpd_11.1.sha384 > psm.1.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in lpd_11.2.sha384 > psm.2.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in lpd_11.3.sha384 > psm.3.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK1.pem -in lpd_11.4.sha384 > psm.4.sha384.sig openssl rsautl -raw -sign -inkey rsa-keys/SSK3.pem -in fpd_8.0.sha384 > fpd_data.cdo.0.sha384.sigopenssl rsautl -raw -sign -inkey rsa-keys/SSK2.pem -in ss_13.0.sha384 > ss.0.sha384.sig

ステージ 7: パーティションの署名を認証証明に挿入パーティション 1 の署名を挿入:

command : bootgen -arch versal -image stage7a.bif -o pmc_subsys_e_ac.bin -w on -log error stage7a:{ bhsignature = bootheader.sha384.sig image_config {bh_auth_enable} image { name = pmc_subsys, id = 0x1c000001 { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, presign = pmc_subsys.0.sha384.sig, file = pmc_subsys_e.bin } }}

パーティション 2 の署名を挿入:

command : bootgen -arch versal -image stage7b-1.bif -o lpd_lpd_data_e_ac.bin -w on -log error stage7b-1:{ image { name = lpd, id = 0x4210002 partition

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 111

Page 112: Bootgen ユーザー ガイド - Xilinx

{ type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK3.pub, spkfile = rsa-keys/SSK3.pub, spksignature = SSK3.pub.sha384.sig, presign = lpd.0.sha384.sig, file = lpd_lpd_data_e.bin } } }

パーティション 3 の署名を挿入:

command : bootgen -arch versal -image stage7b-2.bif -o lpd_psm_fw_e_ac.bin -w on -log error stage7b-2:{ image { name = lpd, id = 0x4210002 partition { type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, presign = psm.0.sha384.sig, file = lpd_psm_fw_e.bin } } }

パーティション 4 の署名を挿入:

command : bootgen -arch versal -image stage7c.bif -o fpd_e_ac.bin.bin -w on -log error stage7c:{ image { id = 0x1c000000, name = fpd { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK3.pub, spkfile = rsa-keys/SSK3.pub, spksignature = SSK3.pub.sha384.sig, presign = fpd_data.cdo.0.sha384.sig, file = fpd_e.bin } }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 112

Page 113: Bootgen ユーザー ガイド - Xilinx

パーティション 5 の署名を挿入:

command : bootgen -arch versal -image stage7d.bif -o subsystem_e_ac.bin -w on -log error stage7d:{ image { id = 0x1c000033, name = ss { type = bootimage, authentication = rsa, ppkfile = rsa-keys/PSK2.pub, spkfile = rsa-keys/SSK2.pub, spksignature = SSK2.pub.sha384.sig, presign = ss.0.sha384.sig, file = subsystem_e.bin } }}

ステージ 8: イメージ ヘッダー テーブルのハッシュを生成command : bootgen -arch versal -image stage8a.bif -generate_hashes -w on -log error stage8:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 metaheader { authentication = rsa, ppkfile = rsa-keys/PSK2.pub, spkfile = rsa-keys/SSK2.pub, spksignature = SSK2.pub.sha384.sig, encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/efuse_red_metaheader_key.nky, dpacm_enable, revoke_id = 0x00000002 } image { {type = bootimage, file = pmc_subsys_e_ac.bin} } image { {type = bootimage, file = lpd_lpd_data_e_ac.bin} {type = bootimage, file = lpd_psm_fw_e_ac.bin} } image { {type = bootimage, file = fpd_e_ac.bin} }

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 113

Page 114: Bootgen ユーザー ガイド - Xilinx

image { {type = bootimage, file = subsystem_e_ac.bin} }}

ステージ 9: イメージ ヘッダー テーブルのハッシュに署名生成されたハッシュに署名:

openssl rsautl -raw -sign -inkey rsa-keys/SSK2.pem -in imageheadertable.sha384 > imageheadertable.sha384.sig

ステージ 10: メタ ヘッダー ハッシュを生成command : bootgen -arch versal -image stage8b.bif -generate_hashes -w on -log error stage8b:{ headersignature = imageheadertable.sha384.sig id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 metaheader { authentication = rsa, ppkfile = rsa-keys/PSK2.pub, spkfile = rsa-keys/SSK2.pub, spksignature = SSK2.pub.sha384.sig, encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/efuse_red_metaheader_key.nky, dpacm_enable } image { {type = bootimage, file = pmc_subsys_e_ac.bin} } image { {type = bootimage, file = lpd_lpd_data_e_ac.bin} {type = bootimage, file = lpd_psm_fw_e_ac.bin} } image { {type = bootimage, file = fpd_e_ac.bin} } image { {type = bootimage, file = subsystem_e_ac.bin} }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 114

Page 115: Bootgen ユーザー ガイド - Xilinx

ステージ 11: メタ ヘッダー ハッシュに署名openssl rsautl -raw -sign -inkey rsa-keys/SSK2.pem -in MetaHeader.sha384 > metaheader.sha384.sig

ステージ 12: パーティションを結合し、ヘッダー署名を挿入完全な PDI をビルド:

command : bootgen -arch versal -image stage10.bif -o final.bin -w on -log error stage10:{ headersignature = imageheadertable.sha384.sig id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 metaheader { authentication = rsa, ppkfile = rsa-keys/PSK2.pub, spkfile = rsa-keys/SSK2.pub spksignature = SSK2.pub.sha384.sig, presign = metaheader.sha384.sig encryption=aes, keysrc = bbram_red_key, aeskeyfile = encr_keys/efuse_red_metaheader_key.nky, dpacm_enable } image { {type = bootimage, file = pmc_subsys_e_ac.bin} } image { {type = bootimage, file = lpd_lpd_data_e_ac.bin} {type = bootimage, file = lpd_psm_fw_e_ac.bin} } image { {type = bootimage, file = fpd_e_ac.bin} } image { {type = bootimage, file = subsystem_e_ac.bin} }}

第 5 章: ブート時のセキュリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 115

Page 116: Bootgen ユーザー ガイド - Xilinx

第 6 章

FPGA のサポート第 5 章: ブート時のセキュリティで説明したように、FPGA のみで構成されるデバイスもセキュリティを維持しながらフィールド展開する必要があります。ザイリンクス ツールは、暗号化および認証を実現するためのエンベデッド IPモジュールをプログラミング ロジックの一部として提供します。Bootgen は、7 シリーズ以降の FPGA ファミリ デバイスに幅広く対応するセキュア イメージの作成 (暗号化および/または認証) をサポートしています。この章では、Bootgen を使用してビットストリームを暗号化して認証する方法について例を挙げて説明します。FPGA をサポートする Bootgen は、スタンドアロンの Bootgen インストールで入手できます。注記: 7 シリーズ デバイス以降のビットストリームのみがサポートされています。

暗号化および認証ザイリンクス 7 シリーズ FPGA は、内蔵型で PL ベースの HMAC (Hash-based Message Authentication Code)、および Cipher Block Chaining (CBC) モードの Advanced Encryption Standard (AES) モジュールを使用します。UltraScale以降のデバイスでは、AES-256/Galois Counter Mode (GCM) が使用され、HMAC は不要です。

暗号化の例暗号化されたビットストリームを作成するには、aeskeyfile 属性を使用して BIF で AES キー ファイルを指定します。encryption=aes 属性は、BIF ファイルにリストされている暗号化の必要なビットストリームに対して指定する必要があります。bootgen -arch fpga -image secure.bif -w -o securetop.bit

BIF ファイルは次のようになります。the_ROM_image:{ [aeskeyfile] encrypt.nky [encryption=aes] top.bit}

認証の例次に、FPGA ビットストリームを認証するための Bootgen コマンドを示します。bootgen -arch fpga -image all.bif -o rsa.bit -w on -log error

第 6 章: FPGA のサポート

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 116

Page 117: Bootgen ユーザー ガイド - Xilinx

BIF ファイルは次のとおりです。the_ROM_image:{ [sskfile] rsaPrivKeyInfo.pem [authentication=rsa] plain.bit}

ファミリ キー/難読化キー注記: 難読化キー暗号化は、Versal デバイスではサポートされません。難読化キーの暗号化を使用するには、ザイリンクス サポートに登録し、ターゲット デバイス ファミリのファミリ キー ファイルをリクエストする必要があります。このファイルが格納されている場所へのパスは、難読化キーの暗号化を実行する前に bif オプションとして渡しておく必要があります。ファミリ キーを入手するには、[email protected] までお問い合わせください。image:{ [aeskeyfile] key_file.nky [familykey] familyKey.cfg [encryption=aes] top.bit}

次の図に、サンプルの aeskey ファイルを示します。図 20: AES キーのサンプル

HSM モードプロダクションの FPGA では HSM モードを使用しますが、標準モードでも選択できます。

標準モード標準モードでは、認証署名が埋め込まれたビットストリームが生成されます。このモードでは、認証されたビットストリームを生成するための秘密キーがユーザーに提供されていると想定されます。次のコマンドを使用して Bootgenを実行します。bootgen -arch fpga -image all.bif -o rsa_ref.bit -w on -log error

次に、HSM モードで認証されたビットストリームを生成する手順を示します。このモードでは、秘密キーはセキュアチームが管理し、ユーザーには提供されません。次の図に、HSM モードのフローを示します。

第 6 章: FPGA のサポート

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 117

Page 118: Bootgen ユーザー ガイド - Xilinx

図 21: HSM モードのフロー

Stage-2

HSMGenerateSignature

Bitstream Hash& SSK

Stage-0

BootgenAuthenticate with

dummy keydummy.bit

Dummy Key and Bitstream

Bitstream Signature

Stage-3

BootgenUpdate

SignatureAuthenticated Bitstream

Bitstream& SPK

Stage-1

Bootgen

Generate Hashesdummy.bit Hash

X21279-081618

ステージ 0: ダミー キーで認証これは、1 つのビットストリームに 1 回だけ実行するタスクです。ステージ 0 では、Bootgen により stage0.bif ファイルが生成されます。the_ROM_image:{ [sskfile] dummykey.pem [authentication=rsa] plain.bit}

注記: 認証されたビットストリームには、ヘッダー、実際のビットストリーム、署名およびフッターが含まれます。この dummy.bit は、認証されたビットストリームのフォーマットのビットストリームを取得するために作成され、ダミー署名を含みます。ダミー ビット ファイルが Bootgen に渡されると、署名が計算されてオフセットに挿入され、認証されたビットストリームが生成されます。ステージ 1: ハッシュを生成bootgen -arch fpga -image stage1.bif -generate_hashes -log error

Stage1.bif は次のとおりです。the_ROM_image:{ [authentication=rsa] dummy.bit}

第 6 章: FPGA のサポート

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 118

Page 119: Bootgen ユーザー ガイド - Xilinx

ステージ 2: Hash HSM に署名 (例として OpenSSL を使用)

openssl rsautl -sign -inkey rsaPrivKeyInfo.pem -in dummy.sha384 > dummy.sha384.sig

ステージ 3: RSA 証明を実際の署名で更新Stage3.bif は次のとおりです。bootgen -arch fpga -image stage3.bif -w -o rsa_rel.bit -log error

the_ROM_image:{ [spkfile] rsaPubKeyInfo.pem [authentication=rsa, presign=dummy.sha384.sig]dummy.bit}

注記: eFUSE に書き込む必要のある公開キー ダイジェストは、HSM モードのステージ 3 で生成されたrsaPubKeyInfo.pem.nky ファイルに含まれます。

第 6 章: FPGA のサポート

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 119

Page 120: Bootgen ユーザー ガイド - Xilinx

第 7 章

ユース ケースおよび例この章では、Bootgen の代表的なユース ケースおよび例を示します。一部のユース ケースは複雑であり、手順を明示的に示す必要があります。これらのユース ケースおよび例で使用している属性の定義の詳細は、属性 を参照してください。

Zynq MPSoC ユース ケース異なるコアでのシンプル アプリケーション ブート次の例に、異なるコアで動作するアプリケーションでブート イメージを作成する方法を示します。pmu_fw.elf はbootROM によってロードされます。fsbl_a53.elf はブートローダーであり、A53-0 コアにロードされます。app_a53.elf は A53-1 コアで、app_r5.elf は r5-0 コアで実行されます。the_ROM_image: { [pmufw_image] pmu_fw.elf [bootloader, destination_cpu=a53-0] fsbl_a53.elf [destination_cpu=a53-1] app_a53.elf [destination_cpu=r5-0] app_r5.elf}

bootROM でロードされる PMU ファームウェア次の例に、bootROM によってロードされた pmu_fw.elf でブート イメージを作成する方法を示します。the_ROM_image: { [pmufw_image] pmu_fw.elf [bootloader, destination_cpu=a53-0] fsbl_a53.elf [destination_cpu=r5-0] app_r5.elf}

次の例に、bootROM によってロードされた pmu_fw.elf でブート イメージを作成する方法を示します。[pmufw_image] 属性を使用して PMU ファームウェアが指定されている場合、PMU ファームウェアは別のパーティションとしては扱われません。FSBL に追加され、FSBL と PMU ファームウェアが 1 つのパーティションに含まれます。このため、PMU ファームウェアは Bootgen ログにも表示されません。

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 120

Page 121: Bootgen ユーザー ガイド - Xilinx

FSBL でロードされる PMU ファームウェア次の例に、FSBL によりロードされた pmu_fw.elf を含むブート イメージを作成する方法を示します。the_ROM_image:{ [bootloader, destination_cpu=a53-0] fsbl_a53.elf [destination_cpu=pmu] pmu_fw.elf [destination_cpu=r5-0] app_r5.elf}

注記: Bootgen は、[pmufw_image] にも [bootloader] で指定されたオプションを使用します。[pmufw_image]では追加のパラメーターは指定できません。

Linux のブート次の例に、Zynq® UltraScale+™ MPSoC デバイス (arch=zynqmp) で Linux をブートする方法を示します。• fsbl_a53.elf はブートローダーであり、a53-0 上で動作します。• pmu_fw.elf は FSBL によってロードされます。• bl31.elf は Arm® トラステッド ファームウェア (ATF) であり、el-3 で動作します。• U-Boot プログラムの uboot は a53-0 上で el-2 で動作します。• Linux イメージの image.ub はオフセット 0x1E40000 に配置され、0x10000000 にロードされます。the_ROM_image: { [bootloader, destination_cpu = a53-0]fsbl_a53.elf [destination_cpu=pmu]pmu_fw.elf [destination_cpu=a53-0, exception_level=el-3, trustzone]bl31.elf [destination_cpu=a53-0, exception_level=el-2] u-boot.elf [offset=0x1E40000, load=0X10000000, destination_cpu=a53-0]image.ub }

暗号化フロー: BBRAM レッド キー次の例は、BBRAM に格納されているレッド キーを使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示しています。the_ROM_image: { [keysrc_encryption] bbram_red_key [ bootloader, encryption=aes, aeskeyfile=aes0.nky, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf [destination_cpu=a53-0, encryption=aes, aeskeyfile=aes1.nky]App_A53_0.elf }

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 121

Page 122: Bootgen ユーザー ガイド - Xilinx

暗号化フロー: eFUSE に格納されたレッド キー次の例は、eFUSE に格納されているレッド キーを使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示しています。the_ROM_image: { [keysrc_encryption] efuse_red_key

[ bootloader, encryption=aes, aeskeyfile=aes0.nky, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf

[ destination_cpu = a53-0, encryption=aes, aeskeyfile=aes1.nky ] App_A53_0.elf }

暗号化フロー: eFUSE に格納されたブラック キー次の例に、eFUSE に格納されている efuse_blk_key を使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示します。FSBL に対しては認証も有効です。the_ROM_image: { [fsbl_config] puf4kmode, shutter=0x0100005E [auth_params] ppk_select=0; spk_id=0x5 [pskfile] primary_4096.pem [sskfile] secondary_4096.pem [keysrc_encryption] efuse_blk_key [bh_key_iv] bhkeyiv.txt [ bootloader, encryption=aes, aeskeyfile=aes0.nky, authentication=rsa ] fsbl.elf }

注記: ブラック キーの暗号化を使用する場合は、ブート イメージの認証が必須です。

暗号化フロー: ブート ヘッダーに格納されたブラック キー次の例に、ブート ヘッダーに格納されている bh_blk_key を使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示します。FSBL に対しては、認証も有効にします。the_ROM_image: { [pskfile] PSK.pem [sskfile] SSK.pem [fsbl_config] shutter=0x0100005E [auth_params] ppk_select=0

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 122

Page 123: Bootgen ユーザー ガイド - Xilinx

[bh_keyfile] blackkey.txt [bh_key_iv] black_key_iv.txt [puf_file]helperdata4k.txt [keysrc_encryption] bh_blk_key [ bootloader, encryption=aes, aeskeyfile=aes0.nky, authentication=rsa, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf

[ destination_cpu = a53-0, encryption=aes, aeskeyfile=aes1.nky ] App_A53_0.elf }

注記: ブラック キーの暗号化を使用する場合は、ブート イメージの認証が必要です。

暗号化フロー: eFUSE に格納されたグレー キー次の例に、eFUSE に格納されている efuse_gry_key を使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示します。the_ROM_image: { [keysrc_encryption] efuse_gry_key [bh_key_iv] bh_key_iv.txt [ bootloader, encryption=aes, aeskeyfile=aes0.nky, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf [ destination_cpu=a53-0, encryption=aes, aeskeyfile=aes1.nky ] App_A53_0.elf }

暗号化フロー: ブート ヘッダーに格納されたグレー キー次の例に、ブート ヘッダーに格納されている bh_gry_key を使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示します。the_ROM_image:{ [keysrc_encryption] bh_gry_key [bh_keyfile] bhkey.txt [bh_key_iv] bh_key_iv.txt [ bootloader,

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 123

Page 124: Bootgen ユーザー ガイド - Xilinx

encryption=aes, aeskeyfile=aes0.nky, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf [ destination_cpu=a53-0, encryption=aes, aeskeyfile=aes1.nky ] App_A53_0.elf }

操作キー次の例に、eFUSE に格納されているレッド キーを使用して FSBL およびアプリケーションに対して暗号化を有効にし、ブート イメージを作成する方法を示します。the_ROM_image:{ [fsbl_config] opt_key [keysrc_encryption] efuse_red_key

[ bootloader, encryption=aes, aeskeyfile=aes0.nky, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf

[ destination_cpu=a53-0, encryption=aes, aeskeyfile=aes1.nky ] App_A53_0.elf }

開発環境での操作キーを使用したデバイス キーの保護次に、秘密レッド キーを管理するチーム A (セキュア チーム) とチーム B (非セキュア チーム) の 2 つの開発チームが共同で作業している場合に、秘密レッド キーを共有せずに暗号化されたイメージをビルドする手順を説明します。チーム A は秘密レッド キーを管理します。チーム B は、開発およびテスト用に暗号化されたイメージをビルドしますが、秘密レッド キーにはアクセスできません。チーム A はデバイス キー (Op_key (操作キー) オプションを使用) を使用してブートローダーを暗号化し、それをチーム B に渡します。チーム B は Op_key を使用してその他すべてのパーティションを暗号化します。チーム B は、Bootgen を使用して、暗号化したパーティションとチーム A から受け取った暗号化されたブートローダーを 1 つの boot.bin にまとめます。次に、イメージを作成する手順を説明します。方法 1

まず、チーム A が opt_key を使用してデバイス キーでブートローダーを暗号化し、それをチーム B に渡します。チーム B は、操作キーをデバイス キーとして使用し、すべてのパーティションと暗号化されたブートローダーをまとめて完全なイメージを作成します。

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 124

Page 125: Bootgen ユーザー ガイド - Xilinx

1. ブートローダーをデバイス キーで暗号化します。bootgen -arch zynqmp -image stage1.bif -o fsbl_e.bin -w on -log error

stage1.bif の例:

stage1:{ [fsbl_config] opt_key [keysrc_encryption] bbram_red_key [ bootloader, destination_cpu=a53-0, encryption=aes,aeskeyfile=aes.nky ] fsbl.elf}

stage1 の aes.nky の例:

Device xc7z020clg484;Key 0 AD00C023E238AC9039EA984D49AA8C819456A98C124AE890ACEF002100128932;IV 0 F7F8FDE08674A28DC6ED8E37;Key Opt 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;

2. 操作キーをデバイス キーとして使用し、暗号化されたブートローダーと残りのパーティションをまとめて完全なイメージを作成します。bootgen -arch zynqmp -image stage2a.bif -o final.bin -w on -log error

stage2.bif の例:

stage2:{ [bootimage]fsbl_e.bin [ destination_cpu=a53-0, encryption=aes, aeskeyfile=aes-opt.nky ] hello.elf [ destination_cpu=a53-1, encryption=aes, aeskeyfile=aes-opt1.nky ] hello1.elf}

stage2 の aes-opt.nky の例:

Device xc7z020clg484;Key 0 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;IV 0 F7F8FDE08674A28DC6ED8E37;

方法 2

まず、チーム A が opt_key オプションを使用してデバイス キーでブートローダーを暗号化し、それをチーム B に渡します。チーム B は、操作キーをデバイス キーとして使用し、パーティションごとに個別に暗号化されたイメージを作成します。最後に、チーム B は Bootgen を使用して、暗号化されたパーティションすべてと暗号化されたブートローダーをまとめて完全なイメージを作成します。

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 125

Page 126: Bootgen ユーザー ガイド - Xilinx

1. ブートローダーをデバイス キーで暗号化します。bootgen -arch zynqmp -image stage1.bif -o fsbl_e.bin -w on -log error

stage1.bif の例:

stage1:{ [fsbl_config] opt_key [keysrc_encryption] bbram_red_key [ bootloader, destination_cpu=a53-0, encryption=aes,aeskeyfile=aes.nky ] fsbl.elf}

stage1 の aes.nky の例:

Device xc7z020clg484;Key 0 AD00C023E238AC9039EA984D49AA8C819456A98C124AE890ACEF002100128932;IV 0 F7F8FDE08674A28DC6ED8E37;Key Opt 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F

2. 操作キーをデバイス キーとして使用し、残りのパーティションを暗号化します。bootgen -arch zynqmp -image stage2a.bif -o hello_e.bin -w on -log error

stage2a.bif の例:

stage2a:{ [ destination_cpu=a53-0, encryption=aes, aeskeyfile=aes-opt.nky ] hello.elf}bootgen -arch zynqmp -image stage2b.bif -o hello1_e.bin -w on -log error

stage2b.bif の例:

stage2b:{ [aeskeyfile] aes-opt.nky [ destination_cpu=a53-1, encryption=aes, aeskeyfile=aes-opt.nky ] hello1.elf}

stage2a および stage2b の aes-opt.nky の例:

Device xc7z020clg484;Key 0 229C993D1310DD27B6713749B6D07FCF8D3DCA01EC9C64778CBAF457D613508F;IV 0 F7F8FDE08674A28DC6ED8E37;

3. Bootgen を使用して上記の例をまとめて完全なイメージを作成します。Use bootgen to stitch the above, to form a complete image.

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 126

Page 127: Bootgen ユーザー ガイド - Xilinx

stage3.bif の例:

stage3:{ [bootimage]fsbl_e.bin [bootimage]hello_e.bin [bootimage]hello1_e.bin}

注記: aes.nky の opt_key は aes-opt.nky のキー 0 と同じで、IV 0 は両方の nky ファイルで同じである必要があります。

シングル パーティション イメージこの機能は、Bootgen の U-Boot プロンプトで作成されたシングル パーティション (ビットストリームなしの) イメージの認証および暗号化の両方またはいずれかをサポートします。注記: 複数パーティションを含むイメージはサポートしません。

セキュア イメージを読み込む U-Boot コマンドzynqmp secure <srcaddr> <len> [key_addr]

このコマンドは、アドレス $src で $len bytes\ long のセキュア イメージを検証します。暗号化にキーを使用する必要がある場合は、オプションで key_addr を指定できます。

認証のみのユース ケースU-Boot で認証のみを使用する場合は、次の例に示すように bif を使用して認証イメージを作成します。1. U-Boot で認証されるシングル パーティション イメージを作成します。注記: elf ファイルを指定する場合は、複数のロード可能なセクションが含まれていないことを確認してください。elf ファイルに複数のロード可能なセクションが含まれる場合は、入力を .bin 形式に変換して、その .binを bif で入力として指定します。次に、bif の例を示します。the_ROM_image:{ [pskfile]rsa4096_private1.pem [sskfile]rsa4096_private2.pem [auth_params] ppk_select=1;spk_id=0x1 [authentication = rsa]Data.bin}

2. イメージが生成されたら、その認証イメージを DDR にダウンロードします。3. 次の例のように、U-Boot コマンドを実行してセキュア イメージを認証します。

ZynqMP> zynqmp secure 100000 2d000Verified image at 0x102800

4. 問題なく認証されると、U-Boot から実際のパーティションの開始アドレスが返されます。エラーがあった場合は、エラー コードが表示されます。RSA_EN eFUSE をプログラムする場合、イメージ認証は必須です。eFUSERSA がイネーブルの場合、ブート ヘッダーの認証はサポートされません。

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 127

Page 128: Bootgen ユーザー ガイド - Xilinx

暗号化のみのユース ケースイメージを暗号化するだけの場合、デバイス キーはサポートされません。認証がイネーブルになっていない場合は、KUP キーの暗号化のみがサポートされます。

認証フロー次の例は、FSBL およびアプリケーションに対して認証を有効にし、PPK ハッシュ値の検証をスキップしたブート ヘッダー認証を有効にしてブート イメージを作成する方法を示しています。the_ROM_image: { [fsbl_config] bh_auth_enable [auth_params] ppk_select=0; spk_id=0x00000000 [pskfile] PSK.pem [sskfile] SSK.pem [ bootloader, authentication=rsa, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf [destination_cpu=a53-0, encryption=aes] App_A53_0.elf }

SHA-3 eFUSE RSA 認証と PPK0 を使用する BIF ファイル次の例は、FSBL およびアプリケーションに対して認証を有効にし、PPK ハッシュ値の検証をスキップしたブート ヘッダー認証を有効にしてブート イメージを作成する方法を示しています。the_ROM_image: { [auth_params] ppk_select=0; spk_id=0x00000000 [pskfile] PSK.pem [sskfile] SSK.pem [ bootloader, authentication=rsa, destination_cpu=a53-0 ] ZynqMP_Fsbl.elf [destination_cpu=a53-0, authentication=aes] App_A53_0.elf }

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 128

Page 129: Bootgen ユーザー ガイド - Xilinx

XIP次の例は、zynqmp (Zynq® UltraScale+™ MPSoC) に対して、XIP を実行するブート イメージの作成方法を示しています。the_ROM_image:{ [ bootloader, destination_cpu=a53-0, xip_mode ] mpsoc_qspi_xip.elf}

コマンドの詳細は、xip_mode を参照してください。

オフセット属性を使用した分割この例は、オフセット属性を使用した分割方法を示しています。the_ROM_image:{ [split]mode=slaveboot,fmt=bin [bootloader, destination_cpu = a53-0] fsbl.elf [destination_cpu = pmu, offset=0x3000000] pmufw.elf [destination_device = pl, offset=0x4000000] design_1_wrapper.bit [destination_cpu = a53-0, exception_level = el-3, trustzone, offset=0x6000000]\ hello.elf }

オフセットがパーティションに指定されると、ブート イメージ内のそのパーティションのアドレスは指定したオフセットから開始されます。Bootgen は、現在のパーティションに指定されたオフセットと前のパーティション間のギャップを埋めるため、前のパーティションに 0xFF を追加します。これにより、同じイメージで分割をしようとすると、ブート イメージはそのパーティションのアドレス (この場合は指定したオフセット) に基づいて分割されるようになります。分割されたパーティション出力に 0xFF がパディングされているのはこのためです。

Versal ACAP のユース ケースVersal™ ACAP に対しては、Vivado® でプログラマブル デバイス イメージ (PDI) と呼ばれるブート イメージを生成します。この Vivado で生成される PDI には、ブートローダー ソフトウェア実行ファイルの PLM (Platform Loader andManager) のほか、PL 関連のコンポーネントとサポートされるデータ ファイルが含まれます。Vivado はプロジェクトおよび CIPS コンフィギュレーションに基づいて BIF ファイルを作成し、Bootgen を起動して PDI を作成します。この BIF が XSA の一部として Vitis™ のようなソフトウェア ツールにエクスポートされます。その後、BIF は必要なパーティションおよび属性を使用して変更できます。id_code および extended_id_code に関連する行が BIF ファイルにそのまま含まれていることを確認してください。この情報は PDI が Bootgen で生成される際に必ず必要となります。

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 129

Page 130: Bootgen ユーザー ガイド - Xilinx

BIF を手動で記述する場合は、Vivado で同じデバイスに対して生成された BIF を参照し、id_code およびextended_id_code に関連する行を手動で記述する BIF に追加してください。次に、Vivado で生成されたサンプル BIF を示します。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys id = 0x1c000001 partition { id = 0x01 type = bootloader file = gen_files/executable.elf } partition { id = 0x09 type = pmcdata, load = 0xf2000000 file = topology_xcvc1902.v2.cdo file = gen_files/pmc_data.cdo } } image { name = lpd id = 0x4210002 partition { id = 0x0C type = cdo file = gen_files/lpd_data.cdo } partition { id = 0x0B core = psm file = static_files/psm_fw.elf } } image { name = pl_cfi id = 0x18700000 partition { id = 0x03 type = cdo file = system.rcdo } partition { id = 0x05 type = cdo file = system.rnpi } } image {

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 130

Page 131: Bootgen ユーザー ガイド - Xilinx

name = fpd id = 0x420c003 partition { id = 0x08 type = cdo file = gen_files/fpd_data.cdo } }}

注記: Vivado で生成された BIF ファイルの executable.elf は、PLM を実行するファームウェアです。Vivado プロジェクトで生成される BIF ファイルは、<vivado_project>/<vivado_project>.runs/impl_1/<Vivado_project>_wrapper.pdi.bif に含まれます。

ブートローダー、PMC_CDO次の例に、ブートローダーを PMC_CDO と使用する方法を示します。all:{ id_code = 0x04ca8093 extended_id_code = 0x01

init = reginit.ini image { {type=bootloader, file=PLM.elf} {type=pmcdata, file=pmc_cdo.bin} }}

ブートローダー、PMC_CDO およびロード アドレス次の例に、ブートローダーを PMC_CDO およびロードアドレスと一緒に使用する方法を示します。all:{ id_code = 0x04ca8093 extended_id_code = 0x01

init = reginit.ini image { {type=bootloader, file=PLM.elf} {type=pmcdata, load=0xf0400000, file=pmc_cdo.bin} }}

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 131

Page 132: Bootgen ユーザー ガイド - Xilinx

ブートローダーのチェックサムのイネーブル次の例に、ブートローダーを使用しながらチェックサムをイネーブルにする方法を示します。

all:{ id_code = 0x04ca8093 extended_id_code = 0x01

init = reginit.ini image { {type=bootloader, checksum=sha3, file=PLM.elf} {type=pmcdata, load=0xf0400000, file=pmc_cdo.bin} }}

ブートローダー、PMC_CDO、PL CDO、NPI次の例に、ブートローダーを PMC_CDO および NPI と使用する方法を示します。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = gen_files/executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = gen_files/pmc_data.cdo } } image { name = lpd, id = 0x4210002 { id = 0x0C, type = cdo, file = gen_files/lpd_data.cdo } { id = 0x0B, core = psm, file = static_files/psm_fw.elf } } image { name = pl_cfi, id = 0x18700000 { id = 0x03, type = cdo, file = system.rcdo } { id = 0x05, type = cdo, file = system.rnpi } } image { name = fpd, id = 0x420c003 { id = 0x08, type = cdo, file = gen_files/fpd_data.cdo } }}

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 132

Page 133: Bootgen ユーザー ガイド - Xilinx

ブートローダー、PMC_CDO、PL CDO、NPI、PS CDO、および PSELF次の例に、ブートローダーを PMC_CDO、NPI、PS CDO、および PS ELF と共に使用する方法を示します。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = gen_files/executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = gen_files/pmc_data.cdo } } image { name = lpd, id = 0x4210002 { id = 0x0C, type = cdo, file = gen_files/lpd_data.cdo } { id = 0x0B, core = psm, file = static_files/psm_fw.elf } } image { name = pl_cfi, id = 0x18700000 { id = 0x03, type = cdo, file = system.rcdo } { id = 0x05, type = cdo, file = system.rnpi } } image { name = fpd, id = 0x420c003 { id = 0x08, type = cdo, file = gen_files/fpd_data.cdo } } image { name = apu_ss, id = 0x1c000000 { core = a72-0, file = apu.elf } { core = r5-0, file = rpu.elf } }}

AI エンジンのコンフィギュレーションおよび AI エンジンのパーティション次の例に、AI エンジンのブート イメージと AI エンジンのパーティションをコンフィギュレーションする方法を示します。all:{ image { { type=bootimage, file=base.pdi } } image { name=default_subsys, id=0x1c000000 { type=cdo

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 133

Page 134: Bootgen ユーザー ガイド - Xilinx

file = Work/ps/cdo/aie.cdo.reset.bin file = Work/ps/cdo/aie.cdo.clock.gating.bin file = Work/ps/cdo/aie.cdo.error.handling.bin file = Work/ps/cdo/aie.cdo.elfs.bin file = Work/ps/cdo/aie.cdo.init.bin file = Work/ps/cdo/aie.cdo.enable.bin } }}

注記: 異なる CDO が統合され、PDI に 1 つのパーティションが作成されます。

既存 PDI への新規パーティションの追加次の例に、既存の PDI に新しいパーティションを追加する方法を示します。1. Vivado で生成された PDI (base.pdi) を使用します。2. dtb、uboot、および bl31 アプリケーションを追加して新しい PDI を作成します。new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

RSA 認証次の例に、RSA 認証の使用方法を示します。all:{ id_code = 0x04CA8093 extended_id_code = 0x01 boot_config {bh_auth_enable} image { name = pmc_subsys, id = 0x1c000001 {type = bootloader, authentication=rsa, pskfile = ./PSK.pem, sskfile = ./SSK2.pem, revoke_id = 0x2, file = ./plm.elf} {type = pmcdata, file = ./pmc_data.cdo} } metaheader { authentication=rsa,pskfile = ./PSK.pem, sskfile = ./SSK16.pem, revoke_id = 0x10,

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 134

Page 135: Bootgen ユーザー ガイド - Xilinx

} image { id = 0x1c000002, name = ss_psm {type = cdo, authentication=rsa, pskfile = ./PSK1.pem, sskfile = ./SSK1.pem, revoke_id = 0x1, file = ./lpd_data.cdo} { core = psm, file = ./psm_fw.elf} } image { id = 0x1c000000, name = fpd {type = cdo, authentication=rsa, pskfile = ./PSK1.pem, sskfile = ./SSK5.pem, revoke_id = 0x5, file = ./fpd_data.cdo} } image { id = 0x1c000000, name = subsystem {type = cdo,file = ./subsystem.cdo} }}

ECDSA 認証次の例に、ECDSA 認証の使用方法を示します。

all:{ id_code = 0x04CA8093 extended_id_code = 0x01 boot_config {bh_auth_enable} image { name = pmc_subsys, id = 0x1c000001 {type = bootloader, authentication = ecdsa-p384, pskfile = ./PSK.pem, sskfile = ./SSK2.pem, revoke_id = 0x2, file = ./plm.elf} {type = pmcdata, file = ./pmc_data.cdo} } metaheader { authentication = ecdsa-p384,pskfile = ./PSK.pem, sskfile = ./SSK16.pem, revoke_id = 0x10, } image { id = 0x1c000002, name = ss_psm {type = cdo, authentication = ecdsa-p521, pskfile = ./PSK1.pem, sskfile = ./SSK1.pem, revoke_id = 0x1, file = ./lpd_data.cdo} { core = psm, file = ./psm_fw.elf} } image { id = 0x1c000000, name = fpd

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 135

Page 136: Bootgen ユーザー ガイド - Xilinx

{type = cdo, authentication = ecdsa-p384, pskfile = ./PSK1.pem, sskfile = ./SSK5.pem, revoke_id = 0x5, file = ./fpd_data.cdo} } image { id = 0x1c000000, name = subsystem {type = cdo,file = ./subsystem.cdo} }}

AES 暗号化次の例に、AES 暗号化の使用方法を示します。

all:{ id_code = 0x04ca8093 extended_id_code = 0x01

image { {type=bootloader, encryption=aes, keysrc=bbram_red_key, aeskeyfile=key1.nky, file=plm.elf} {type=pmcdata, load=0xf0400000, file=pmc_cdo.bin} {type=cdo, file=ps_cdo.bin} {core=a72-0, encryption=aes, keysrc=bbram_red_key, aeskeyfile=key2.nky, file=a72_app.elf} }}

キー ローリングを使用した AES 暗号化次の例に、キー ローリングを使用した AES 暗号化方法を示します。

all:{ id_code = 0x04ca8093 extended_id_code = 0x01

image { { type=bootloader, encryption=aes, keysrc=bbram_red_key, aeskeyfile=key1.nky, blocks=65536;32768;16384;8192;4096;2048;1024;512, file=plm.elf } { type=pmcdata, load=0xf0400000, file=pmc_cdo.bin } {

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 136

Page 137: Bootgen ユーザー ガイド - Xilinx

type=cdo, file=ps_cdo.bin } { core=a72-0, encryption=aes, keysrc=bbram_red_key, aeskeyfile=key2.nky, blocks=65536;32768;16384;8192;4096;2048;1024;512, file=a72_app.elf } }}

複数のキー ソースを使用した AES 暗号化次の例に、異なるパーティションに異なるキー ソースを使用する方法を示します。

all:{ bh_keyfile = ./PUF4K_KEY.txt puf_file = ./PUFHD_4K.txt bh_kek_iv = ./blk_iv.txt bbram_kek_iv = ./bbram_blkIv.txt efuse_kek_iv = ./efuse_blkIv.txt boot_config {puf4kmode , shutter=0x0100005E} id_code = 0x04CA8093 extended_id_code = 0x01 image { name = pmc_subsys, id = 0x1c000001 {type = bootloader, encryption = aes, keysrc=bbram_blk_key, dpacm_enable,revoke_id = 0x5, aeskeyfile = ./plm.nky, file = ./plm.elf} {type = pmcdata, aeskeyfile = pmcCdo.nky, file = ./pmc_data.cdo} } metaheader { encryption = aes, keysrc=bbram_blk_key,dpacm_enable, revoke_id = 0x6, aeskeyfile = metaheader.nky } image { id = 0x1c000002, name = ss_psm {type = cdo, encryption = aes, keysrc = bh_blk_key, pufhd_bh, revoke_id = 0x8, aeskeyfile = ./psmfw.nky, file = ./lpd_data.cdo} { core = psm, file = ./psm_fw.elf} } image { id = 0x1c000000, name = fpd {type = cdo, encryption = aes, keysrc = efuse_blk_key, dpacm_enable, revoke_id = 0x10,aeskeyfile = ./fpdcdo.nky,/*Here PUF helper data is also on efuse */

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 137

Page 138: Bootgen ユーザー ガイド - Xilinx

file = ./fpd_data.cdo} } image { id = 0x1c000000, name = subsystem {type = cdo,file = ./subsystem.cdo} }}

AES 暗号化および認証次の例に、AES 暗号化と認証の使用方法を示します。all:{ bh_kek_iv = ./blkiv.txt bh_keyfile = ./blkkey.txt efuse_kek_iv = ./efuse_blkIv.txt boot_config {bh_auth_enable, puf4kmode , shutter=0x0100005E} id_code = 0x04CA8093 extended_id_code = 0x01 image { name = pmc_subsys, id = 0x1c000001 {type = bootloader, encryption = aes, keysrc=bh_blk_key, dpacm_enable,revoke_id = 0x5, aeskeyfile = ./plm.nky, authentication = rsa, pskfile = ./PSK1.pem, sskfile = ./SSK5.pem, file = ./plm.elf} {type = pmcdata, aeskeyfile = ./pmc_data.nky, file = ./pmc_data.cdo} } metaheader { encryption = aes, keysrc=bh_blk_key, dpacm_enable, revoke_id = 0x6, aeskeyfile = metaheader.nky } image { id = 0x1c000002, name = ss_psm {type = cdo, encryption = aes, keysrc = bbram_red_key, revoke_id = 0x8, aeskeyfile = psmfw.nky, file = ./lpd_data.cdo} { core = psm, file = ./psm_fw.elf} } image { id = 0x1c000000, name = fpd {type = cdo, encryption = aes, keysrc = efuse_blk_key, dpacm_enable, revoke_id = 0x10, aeskeyfile = fpd.nky, authentication = ecdsa-p384, pskfile = ./PSK1.pem, sskfile = ./SSK5.pem, file = ./fpd_data.cdo} } image { id = 0x1c000000, name = subsystem {type = cdo,file = ./subsystem.cdo} }}

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 138

Page 139: Bootgen ユーザー ガイド - Xilinx

既存 PDI での PLM の置換次の例では、既存の PDI で PLM を置換する手順について説明します。1. Vivado で生成された PDI (base.pdi) を使用します。2. ベース PDI からの PLM (ブートローダー) を置換し新しい PDI を作成します。

new_bif:{ image { { type = bootimage, file = base.pdi } { type = bootloade, file = plm_v1.elf } }}

Bootgen によりブートローダー plm.elf が新しい plm_v1.elf に置き換えられます。

PDI を作成する Bootgen コマンドの例次のコマンドを使用して PDI を作成します。bootgen -arch versal -image {filename.bif} -w -o {boot.pdi}

第 7 章: ユース ケースおよび例

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 139

Page 140: Bootgen ユーザー ガイド - Xilinx

第 8 章

BIF 属性のリファレンスaarch32_mode

構文• Zynq® UltraScale+™ MPSoC:

[aarch32_mode] <partition>

• Versal™ ACAP の場合:

{aarch32_mode, file=<partition>}

説明バイナリ ファイルが 32 ビット モードで実行されるように指定します。注記: Bootgen では自動的に .elf ファイルからプロセッサの実行モードが検出されます。これは、バイナリ ファイルにのみ使用できます。

引数指定されたパーティション。

例• Zynq UltraScale+ MPSoC:

the_ROM_image:{ [bootloader, destination_cpu=a53-0] zynqmp_fsbl.elf [destination_cpu=a53-0, aarch32_mode] hello.bin [destination_cpu=r5-0] hello_world.elf}

• Versal ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 140

Page 141: Bootgen ユーザー ガイド - Xilinx

{ name = apu_ss, id = 0x1c000000 { core = a72-0, aarch32_mode, file = apu.bin } }}

注記: *base.pdi は Vivado で生成される PDI です。

aeskeyfile構文• Zynq デバイスおよび FPGA の場合:

[aeskeyfile] <key filename>

• Zynq UltraScale+ MPSoC の場合:

[aeskeyfile = <keyfile name>] <partition>

• Versal ACAP の場合:

{ aeskeyfile = <keyfile name>, file = <filename> }

説明AES キー ファイルへのパスを指定します。キー ファイルには、パーティションの暗号化に使用される AES キーが含まれます。キー ファイルの内容は、eFUSE または BBRAM に書き込む必要があります。指定したパスにキー ファイルが存在しない場合は、Bootgen により暗号化に使用する新しいキーが生成されます。注記: Zynq UltraScale+ MPSoC のみ: BIF ファイルで複数のキー ファイルを指定できます。使用するすべての NKY ファイルで Key0、IV0、および Key Opt を同じにする必要があります。1 つの ELF ファイルに対して複数のパーティションを生成する場合、各パーティションを固有のキー ファイルのキーを使用して暗号化できます。次の例を参照してください。引数指定するファイルの名前。

戻り値なし

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 141

Page 142: Bootgen ユーザー ガイド - Xilinx

Zynq-7000 SoC 例fsbl.elf パーティションと hello.elf パーティションは test.nky のキーを使用して暗号化されます。all: { [keysrc_encryption] bbram_red_key [aeskeyfile] test.nky [bootloader, encryption=aes] fsbl.elf [encryption=aes] hello.elf }

サンプル キー (.nky) ファイルは test.nky です。Device xc7z020clg484; Key 0 8177B12032A7DEEE35D0F71A7FC399027BF....D608C58; Key StartCBC 952FD2DF1DA543C46CDDE4F811506228; Key HMAC 123177B12032A7DEEE35D0F71A7FC3990BF....127BD89;

Zynq UltraScale+ MPSoC 例例 1:

fsbl.elf パーティションは test.nky のキーを使用し、hello.elf は test1.nky のキーを使用し、app.elf はtest2.nky のキーを使用して暗号化されます。サンプル BIF は test_multipl.bif です。all: { [keysrc_encryption] bbram_red_key [bootloader,encryption=aes,aeskeyfile=test.nky] fsbl.elf [encryption=aes,aeskeyfile=test1.nky] hello.elf [encryption=aes,aeskeyfile=test2.nky] app.elf }

例 2:

Bootgen が、hello.elf の hello.elf.0、hello.elf.1、および hello.elf.2 という 3 つのパーティションを作成するとします。サンプル BIF は test_mulitple.bif です。all: { [keysrc_encryption] bbram_red_key [bootloader,encryption=aes,aeskeyfile=test.nky] fsbl.elf [encryption=aes,aeskeyfile=test1.nky] hello.elf }

その他の情報:

• fsbl.elf パーティションは、test.nky のキーで暗号化されます。すべての hello.elf パーティションは、test1.nky のキーを使用して暗号化されます。

• test1.1.nky および test1.2.nky という名前のキー ファイルを test1.nky と同じパスに置くことで、hello パーティションごとに一意のキー ファイルを使用できます。

• hello.elf.0 は test1.nky を使用• hello.elf.1 は test1.1.nky を使用• hello.elf.2 は test1.2.nky を使用

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 142

Page 143: Bootgen ユーザー ガイド - Xilinx

• キー ファイル (test1.1.nky または test1.2.nky) が存在しない場合、Bootgen はそのキー ファイルを生成します。

• aeskeyfile の形式:

.nky ファイルには次のフィールドを使用できます。• Device: .nky ファイルを使用するデバイスの名前。Zynq デバイスおよび Zynq UltraScale+ MPSoC の両方で有効です。

• Keyx, IVx: x は Key0、Key1、Key2 ...、IV0、IV1、IV2...といったキー/IV 番号に該当する整数。AES キーは 256ビット、キーは 12 バイト長にする必要があります。Keyx は Zynq デバイスおよび Zynq UltraScale+ MPSoCに有効ですが、IVx は Zynq UltraScale+ MPSoC にのみ有効です。

• Key Opt: ブートローダーの最初のブロックを暗号化するのに使用するオプションのキー。Zynq UltraScale+MPSoC にのみ有効です。

• StartCBC - CBC Key: CBC キーは 128 ビット長である必要があります。Zynq デバイスにのみ有効です。• HMAC - HMAC Key: HMAC キーは 128 ビット長である必要があります。Zynq デバイスにのみ有効です。• Seed: パーティションの暗号化に必要なキー/IV ペアを生成するために使用する必要のある最初のシード。

AES シードは 256 ビット長である必要があります。Zynq UltraScale+ MPSoC にのみ有効です。• FixedInputData: カウンター モード KDF への入力としてシードと共に使用されるデータ。AES 固定入力データは 60 バイト長である必要があります。Zynq UltraScale+ MPSoC にのみ有効です。

注記:• シードは FixedInputData と共に指定する必要があります。• シードには、複数のキー/IV ペアは使用されません。

Versal ACAP の例:

all: { image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, file = plm.elf } { type = pmcdata, load = 0xf2000000, aeskeyfile = key2.nky, file = pmc_cdo.bin } { type=cdo, encryption = aes, keysrc = efuse_red_key, aeskeyfile = key3.nky, file=fpd_data.cdo } } }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 143

Page 144: Bootgen ユーザー ガイド - Xilinx

a_hwrot構文boot_config { a_hwrot }

説明非対称ハードウェアの信頼のルート (A-HWRoT) ブート モード。Bootgen で A-HWRoT ブート モードのデザイン ルールがチェックされます。プロダクション PDI でのみ有効です。

alignment構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[alignment= <value>] <partition>

• Versal ACAP の場合:

{ alignment=<value>, file=<partition> }

バイト アライメントを設定します。パーティションは、この値の倍数値に揃えられるまでパディングされます。この属性はオフセットと共に使用することはできません。

引数揃えられるバイト数。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [bootloader]fsbl.elf [alignment=64] u-boot.elf}

• Versal ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 144

Page 145: Bootgen ユーザー ガイド - Xilinx

{ name = apu_ss, id = 0x1c000000 { core = a72-0, alignment=64, file = apu.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

auth_params構文[auth_params] ppk_select=<0|1>; spk_id <32-bit spk id>;/ spk_select=<spk-efuse/user-efuse>; auth_header

説明認証パラメーターは、ブート イメージ内のパーティションの認証に使用する PPK、SPK などの追加設定を指定します。この BIF パラメーターの引数は次のとおりです。• ppk_select: 使用する PPK を選択します。オプションは 0 (デフォルト) または 1 です。• spk_id: 使用または取り消し可能な SPK を指定します。ユーザー eFUSE サポートおよび RSA キー取り消しの改善を参照してください。デフォルト値は 0x00 です。

• spk_select: SPK とユーザー eFUSE を識別。オプションは spk-efuse (デフォルト) と user_efuse です。• header_auth: パーティションが認証されていない場合のヘッダーを認証。注記:

1. ppk_select は各イメージに固有です。2. 各パーティションは固有の spk_select および spk_id を持つことができます。3. spk-efuse id はイメージ全体で一意ですが、spk-efuse id はパーティションによって異なる場合があります。4. パーティションの範囲外の spk_select/spk_id は、ヘッダーと、これらの指定をパーティション属性として持たないその他のパーティションに使用されます。

例サンプル BIF 1 - test.bif

all:{ [auth_params]ppk_select=0;spk_id=0x4 [pskfile] primary.pem [sskfile]secondary.pem [bootloader, authentication=rsa]fsbl.elf}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 145

Page 146: Bootgen ユーザー ガイド - Xilinx

サンプル BIF 2 - test.bif

all: { [auth_params] ppk_select=0;spk_select=user-efuse;spk_id=0x22 [pskfile] primary.pem [sskfile] secondary.pem [bootloader, authentication = rsa] fsbl.elf }

サンプル BIF 3 - test.bif

all: { [auth_params] ppk_select=1; spk_select= user-efuse; spk_id=0x22; header_auth [pskfile] primary.pem [sskfile] secondary.pem [destination_cpu=a53-0] test.elf }

サンプル BIF 4 - test.bif

all: { [auth_params] ppk_select=1;spk_select=user-efuse;spk_id=0x22 [pskfile] primary.pem [sskfile] secondary0.pem /* FSBL - Partition-0) */ [ bootloader, destination_cpu = a53-0, authentication = rsa, spk_id = 0x3, spk_select = spk-efuse, sskfile = secondary1.pem ] fsbla53.elf /* Partition-1 */ [ destination_cpu = a53-1, authentication = rsa, spk_id = 0x24, spk_select = user-efuse, sskfile = secondary2.pem ] hello.elf }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 146

Page 147: Bootgen ユーザー ガイド - Xilinx

authentication構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[authenication = <options>] <partition>

• Versal ACAP の場合:

{authentication=<options>, file=<partition>}

説明認証するパーティションを指定します。

引数• none: パーティションは認証されません。これがデフォルト値です。• rsa: パーティションを RSA アルゴリズムを使用して認証します。• ecdsa-p384: パーティションは ECDSA p384 曲線を使用して認証します。• ecdsa-p521: パーティションは ECDSA p521 曲線を使用して認証します。例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [ppkfile] ppk.txt [spkfile] spk.txt [bootloader, authentication=rsa] fsbl.elf [authentication=rsa] hello.elf }

• Versal ACAP の場合:

all:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 boot_config {bh_auth_enable}

metaheader { authentication = rsa, pskfile = PSK2.pem, sskfile = SSK2.pem }

image { name = pmc_subsys, id = 0x1c000001 partition

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 147

Page 148: Bootgen ユーザー ガイド - Xilinx

{ id = 0x01, type = bootloader, authentication = rsa, pskfile =PSK1.pem, sskfile =SSK1.pem, file = executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v1.cdo, file = pmc_data.cdo } }

image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, authentication = rsa, pskfile = PSK3.pem, sskfile = SSK3.pem, file = lpd_data.cdo } partition { id = 0x0B, core = psm, authentication = rsa, pskfile = PSK1.pem, sskfile = SSK1.pem, file = psm_fw.elf } }

image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, authentication = rsa, pskfile = PSK3.pem, sskfile = SSK3.pem, file = fpd_data.cdo } }}

big_endian構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[big_endian] <partition>

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 148

Page 149: Bootgen ユーザー ガイド - Xilinx

• Versal ACAP の場合:

{ big_endian, file=<partition> }

説明バイナリ ファイルをビッグ エンディアン形式に指定します。注記: Bootgen では、自動的に .elf ファイルのエンディアン形式が検出されます。これは、バイナリ ファイルにのみ使用できます。

引数指定されたパーティション。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

the_ROM_image:{ [bootloader, destination_cpu=a53-0] zynqmp_fsbl.elf [destination_cpu=a53-0, big_endian] hello.bin [destination_cpu=r5-0] hello_world.elf}

• Versal ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { core = a72-0, big_endian, file = apu.bin } }}

Note: *base.pdi is the PDI generated by Vivado

bbram_kek_iv構文bbram_kek_iv = <iv file path>

説明bbram ブラック キーの暗号化に使用する IV を指定します。bbram_kek_iv は、keysrc=bbram_blk_key の場合にのみ有効です。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 149

Page 150: Bootgen ユーザー ガイド - Xilinx

例例は、複数のキー ソースを使用した AES 暗号化 を参照してください。

bh_kek_iv構文bh_kek_iv = <iv file path>

説明ブート ヘッダー ブラック キーの暗号化に使用する IV を指定します。bh_kek_iv は、keysrc=bh_blk_key の場合にのみ有効です。

例例は、複数のキー ソースを使用した AES 暗号化 を参照してください。

bh_keyfile構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[bh_keyfile] <key file path>

• Versal ACAP の場合:

bh_keyfile = <key file path>

説明ブート ヘッダーに格納される 256 ビットの難読化キーまたはブラック キーです。これは、暗号化キーのソースが難読化キーまたはブラック キーの場合にのみ有効です。注記: 難読化キーは、Versal デバイスではサポートされません。引数難読化キーまたはブラック キーへのパス (選択されているソースによって異なる)。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 150

Page 151: Bootgen ユーザー ガイド - Xilinx

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [keysrc_encryption] bh_gry_key [bh_keyfile] obfuscated_key.txt [bh_key_iv] obfuscated_iv.txt [bootloader, encryption=aes, aeskeyfile = encr.nky, destination_cpu=a53-0]fsbl.elf }

• Versal ACAP の場合:

all: { bh_keyfile = bh_key1.txt bh_kek_iv = blk_iv.txt image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, file = plm.elf } { type = pmcdata, load = 0xf2000000, aeskeyfile = key2.nky, file = pmc_cdo.bin } { type=cdo, encryption = aes, keysrc = bh_blk_key, aeskeyfile = key3.nky, file=fpd_data.cdo } } }

bh_key_iv構文[bh_key_iv] <iv file path>

説明ブラック キーを復号化する際に使用する初期化ベクター。

引数ファイルへのパス。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 151

Page 152: Bootgen ユーザー ガイド - Xilinx

例Sample BIF - test.bif all:{ [keysrc_encryption] bh_blk_key [bh_keyfile] bh_black_key.txt [bh_key_iv] bh_black_iv.txt [bootloader, encryption=aes, aeskeyfile=encr.nky, destination_cpu=a53-0]fsbl.elf}

bhsignature構文[bhsignature] <signature-file>

説明ブート ヘッダーの署名を認証証明にインポートします。これは、秘密キー PSK を共有しない場合に使用できます。署名を作成して Bootgen に与えることができます。

例all: { [ppkfile] ppk.txt [spkfile] spk.txt [spksignature] spk.txt.sha384.sig [bhsignature] bootheader.sha384.sig [bootloader,authentication=rsa] fsbl.elf}

blocks構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[blocks = <size><num>;<size><num>;...;<size><*>] <partition>

• Versal ACAP の場合:

{ blocks = <size><num>;...;<size><*>, file=<partition> }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 152

Page 153: Bootgen ユーザー ガイド - Xilinx

説明暗号化におけるキー ローリング機能のブロック サイズを指定します。各モジュールは独自のキーを使用して暗号化されます。最初のキーはデバイスのキー ソースに格納され、後続の各モジュールのキーは直前のモジュール内で暗号化 (ラップ) されます。

引数<size>: ブロックのサイズをバイト数で指定します。X(*) と指定すると、残りのブロックのサイズがすべて X になります。

例• Zynq® UltraScale+™ MPSoC:

Sample BIF - test.bif all:{ [keysrc_encryption] bbram_red_key [bootloader,encryption=aes, aeskeyfile=encr.nky, destination_cpu=a53-0,blocks=4096(2);1024;2048(2);4096(*)] fsbl.elf}

• Versal ACAP の場合:

all:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2

metaheader { encryption = aes, keysrc = bbram_red_key, aeskeyfile = efuse_red_metaheader_key.nky, dpacm_enable }

image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x01, type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = bbram_red_key.nky, dpacm_enable, blocks = 4096(2);1024;2048(2);4096(*), file = executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, aeskeyfile = pmcdata.nky, file = topology_xcvc1902.v1.cdo, file = pmc_data.cdo } }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 153

Page 154: Bootgen ユーザー ガイド - Xilinx

image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, dpacm_enable, blocks = 8192(20);4096(*), file = lpd_data.cdo } partition { id = 0x0B, core = psm, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key2.nky, dpacm_enable, blocks = 4096(2);1024;2048(2);4096(*), file = psm_fw.elf } }

image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key5.nky, dpacm_enable, blocks = 8192(20);4096(*), file = fpd_data.cdo } }}

注記: 上記の例では、最初の 2 つのブロックは 4096 バイト、次のブロックは 1024 バイト、その次の 2 つのブロックは 2048 バイトになり、残りのブロックは 4096 バイトになります。

boot_device構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[boot_device] <options>

• Versal™ ACAP の場合:

boot_device { <options>, address=<address> }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 154

Page 155: Bootgen ユーザー ガイド - Xilinx

説明セカンダリ ブート デバイスを指定します。パーティションが存在するデバイスを示します。

引数Zynq デバイスおよび Zynq UltraScale+ MPSoC のオプション:

• qspi32

• qspi24

• nand

• sd0

• sd1

• sd-ls

• mmc

• usb

• ethernet

• pcie

• sata

Versal ACAP のオプション:

• qspi32

• qspi24

• nand

• sd0

• sd1

• sd-ls (SD0 (3.0) または SD1 (3.0))

• mmc

• usb

• ethernet

• pcie

• sata

• ospi

• smap

• sbi

• sd0-raw

• sd1-raw

• sd-ls-raw

• mmc1-raw

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 155

Page 156: Bootgen ユーザー ガイド - Xilinx

• mmc0

• mmc0-raw

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [boot_device]sd0 [bootloader,destination_cpu=a53-0]fsbl.elf}

• Versal™ ACAP の場合:

new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 boot_device { qspi32, address=0x10000 } image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } } image { name = lpd, id = 0x4210002 { id = 0x0C, type = cdo, file = lpd_data.cdo } { id = 0x0B, core = psm, file = psm_fw.elf } } image { name = pl_cfi, id = 0x18700000 { id = 0x03, type = cdo, file = system.rcdo } { id = 0x05, type = cdo, file = system.rnpi } } image { name = fpd, id = 0x420c003 { id = 0x08, type = cdo, file = fpd_data.cdo } }}

bootimage構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[bootimage] <partition>

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 156

Page 157: Bootgen ユーザー ガイド - Xilinx

• Versal™ ACAP の場合:

{ type=bootimage, file=<partition> }

説明入力ファイルが Bootgen で作成されたブート イメージであることを指定します。

引数指定されたファイル名。

例• FSBL の場合:

all:{ [bootimage]fsbl.bin [bootimage]system.bin}

上記の例では、fsbl.bin および system.bin は Bootgen を使用して生成されたイメージです。○ fsbl.bin を生成する場合:

image: { [pskfile] primary.pem [sskfile] secondary.pem [bootloader, authentication=rsa, aeskeyfile=encr_key.nky, encryption=aes] fsbl.elf }

次のコマンドを使用します。bootgen -image fsbl.bif -o fsbl.bin -encrypt efuse

○ system.bin を生成する場合:

image: { [pskfile] primary.pem [sskfile] secondary.pem [authentication=rsa] system.bit }

次のコマンドを使用します。bootgen -image system.bif -o system.bin

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 157

Page 158: Bootgen ユーザー ガイド - Xilinx

{ name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

bootloader構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[bootloader] <partition>

• Versal™ ACAP の場合:

{ type=bootloader, file=<partition> }

説明ELF ファイルを FSBL または PLM として認識します。• この属性は ELF ファイルのみに適用可能です。• ブートローダーに指定できるのは 1 つのファイルのみです。• この ELF ファイルのプログラム ヘッダーに含めることができるのは filesz が 0 より大きい LOAD セクションを 1つのみで、このセクションは実行可能であることが必要です (x フラグを設定)。

引数指定するファイルの名前。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [bootloader] fsbl.elf hello.elf}

• Versal™ ACAP の場合:

new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 158

Page 159: Bootgen ユーザー ガイド - Xilinx

{ name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } }}

bootvectors構文[bootvectors] <values>

説明この属性は、XIP (eXecute In Place) のベクター テーブルを指定します。

例all:{ [bootvectors]0x14000000,0x14000000,0x14000000,0x14000000,0x14000000,0x14000000,0x14000000,0x14000000 [bootloader,destination_cpu=a53-0]fsbl.elf}

boot_config構文boot_config { <options> }

説明ブート イメージのコンフィギュレーションに使用するパラメーターを指定します。次のオプションがあります。• bh_auth_enable: ブート ヘッダー認証イネーブル。ブート イメージの認証を実行します (PPK ハッシュおよび

SPK ID の検証を除く)。• pufhd_bh: PUF ヘルパー データをブート ヘッダーに格納します (デフォルトは efuse)。PUF ヘルパー データ ファイルは、puf_file オプションを使用して Bootgen に渡されます。

• puf4kmode: PUF を 4k ビット シンドローム コンフィギュレーションでの使用に合わせて調整します (デフォルトは 12k ビット)。

• shutter = <value>: PUF でシャッター オフセット時間およびシャッター オープン時間を設定する 32 ビットのPUF_SHUT レジスタ値を指定します。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 159

Page 160: Bootgen ユーザー ガイド - Xilinx

• smap_width = <value>: SMAP バス幅を定義します。指定可能な値は 8、16、32 で、デフォルトは 32 ビットです。

• dpacm_enable: DPA カウンター メジャー イネーブル例example_1:{ boot_config {bh_auth_enable, smap_width=16 } pskfile = primary0.pem sskfile = secondary0.pem image { {type=bootloader, authentication=rsa, file=plm.elf} {type=pmcdata, load=0xf2000000, file=pmc_cdo.bin} }}

checksum構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[checksum = <options>] <partition>

• Versal™ ACAP の場合:

{ checksum = <options>, file=<partition> }

説明チェックサムを実行する必要があるパーティションを指定します。認証や暗号化などのよりセキュアな機能と共に使用することはできません。

引数• none: チェックサムなし。• MD5: Zynq®-7000 SoC デバイスの MD5 チェックサム。このデバイスでは、チェックサムはブートローダーでサポートされていません。

• SHA3: Zynq® UltraScale+™ MPSoC デバイスおよび Versal ACAP のチェックサム。例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf [checksum=md5] hello.elf }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 160

Page 161: Bootgen ユーザー ガイド - Xilinx

• Versal™ ACAP の場合:

all: { image { name = image1, id = 0x1c000001 { type=bootloader, checksum=sha3, file=plm.elf } { type=pmcdata, file=pmc_cdo.bin } } }

copy構文{ copy = <addr> }

説明イメージがメモリの指定したアドレスにコピーされます。

例test:{ image { { type = bootimage, file = base.pdi } } image { name=subsys_1, id=0x1c000000, copy = 0x30000 { core=psm, file=psm.elf } { type=cdo, file=ps_data.cdo } { core=a72-0, file=a72_app.elf } }}

core構文{ core = <options> }

説明パーティションをどのコアで実行するかを指定します。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 161

Page 162: Bootgen ユーザー ガイド - Xilinx

引数• *a72-0

• a72-1

• r5-0

• r5-1

• psm

• aie

例new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { core = a72-0, file = apu.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

delay_handoff構文{ delay_handoff }

説明サブシステムへのハンドオフが遅延されます。

例test:{ image { { type = bootimage, file = base.pdi } } image { name=subsys_1, id=0x1c000000, delay_handoff

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 162

Page 163: Bootgen ユーザー ガイド - Xilinx

{ core=psm, file=psm.elf } { type=cdo, file=ps_data.cdo } { core=a72-0, file=a72_app.elf } }}

delay_load構文{ delay_load }

説明サブシステムの読み込みが遅延されます。

例test:{ image { { type = bootimage, file = base.pdi } } image { name=subsys_1, id=0x1c000000, delay_load { core=psm, file=psm.elf } { type=cdo, file=ps_data.cdo } { core=a72-0, file=a72_app.elf } }}

destination_cpu構文[destination_cpu <options>] <partition>

説明パーティションをどのコアで実行するかを指定します。次の例では、FSBL を A53-0 コアで実行し、アプリケーションを R5-0 コアで実行するように指定します。注記:

• FSBL は、A53-0 または R5-0 のいずれかでのみ実行できます。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 163

Page 164: Bootgen ユーザー ガイド - Xilinx

• FSBL によってロードされる PMU: [destination_cpu=pmu] pmu.elf。このフローでは、最初に bootROMが FSBL をロードし、続いて FSBL が PMU ファームウェアをロードします。

• bootROM によってロードされる PMU: [pmufw_image] pmu.elf。このフローでは、bootROM が PMU をロードした後に FSBL のロードが続くため、PMU は FSBL が起動する前に電力管理タスクを実行します。

引数• a53-0 (デフォルト)

• a53-1

• a53-2

• a53-3

• r5-0

• r5-1

• r5-lockstep

• pmu

例all:{ [bootloader,destination_cpu=a53-0]fsbl.elf [destination_cpu=r5-0] app.elf}

destination_device構文[destination_device <options>] <partition>

説明パーティションのターゲットを PS または PL のいずれに指定します。

引数• ps: パーティションのターゲットは PS。これがデフォルト値です。• pl: パーティションのターゲットはビットストリームの場合 PL。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 164

Page 165: Bootgen ユーザー ガイド - Xilinx

例all:{ [bootloader,destination_cpu=a53-0]fsbl.elf [destination_device=pl]system.bit [destination_cpu=r5-1]app.elf}

early_handoff構文[early_handoff] <partition>

説明このフラグは、パーティションのロード直後に重要なアプリケーションへのハンドオフが確実に実行されるようにします。このオプションを使用しない場合は、最初にすべてのパーティションが順にロードされ、続いてハンドオフが順に実行されます。注記: 次のシナリオでは、FSBL は app1 をロードしてから app2 をロードし、その後すぐに app2 に制御を渡して app1に制御を渡します。例all:{ [bootloader, destination_cpu=a53_0]fsbl.el [destination_cpu=r5-0]app1.elf [destination_cpu=r5-1,early_handoff]app2.elf}

efuse_kek_iv構文efuse_kek_iv = <iv file path>

説明eFUSE キーの暗号化に使用する IV を指定します。efuse_kek_iv は、keysrc=efuse_blk_key の場合にのみ有効です。

例例は、複数のキー ソースを使用した AES 暗号化 を参照してください。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 165

Page 166: Bootgen ユーザー ガイド - Xilinx

efuse_user_kek0_iv構文efuse_user_kek0_iv = <iv file path>

説明eFuse ユーザー ブラック キー key0 の暗号化に使用する IV を指定します。efuse_user_kek0_iv は、keysrc=efuse_user_blk_key0 の場合にのみ有効です。

例例は、複数のキー ソースを使用した AES 暗号化 を参照してください。

efuse_user_kek1_iv構文efuse_user_kek1_iv = <iv file path>

説明eFuse ユーザー ブラック キー key1 の暗号化に使用する IV を指定します。efuse_user_kek1_iv は、keysrc=efuse_user_blk_key1 の場合にのみ有効です。

例例は、複数のキー ソースを使用した AES 暗号化 を参照してください。

encryption構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[encryption = <options>] <partition>

• Versal™ ACAP の場合:

{ encryption = <options>, file = <filename> }

説明パーティションを暗号化する必要があることを指定します。暗号化アルゴリズムは次のとおりです。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 166

Page 167: Bootgen ユーザー ガイド - Xilinx

引数• none: パーティションは暗号化されない。これがデフォルト値です。• aes: パーティションは AES アルゴリズムを使用して暗号化される。例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [aeskeyfile] test.nky [bootloader, encryption=aes] fsbl.elf [encryption=aes] hello.elf }

• Versal™ ACAP の場合:

all:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2

metaheader { encryption = aes, keysrc = bbram_red_key, aeskeyfile = efuse_red_metaheader_key.nky, }

image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x01, type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = bbram_red_key.nky, file = executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, aeskeyfile = pmcdata.nky, file = topology_xcvc1902.v1.cdo, file = pmc_data.cdo } }

image { name = lpd, id = 0x4210002 partition { id = 0x0C, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, file = lpd_data.cdo

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 167

Page 168: Bootgen ユーザー ガイド - Xilinx

} partition { id = 0x0B, core = psm, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key2.nky, file = psm_fw.elf } }

image { name = fpd, id = 0x420c003 partition { id = 0x08, type = cdo, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key5.nky, file = fpd_data.cdo } }}

exception_level構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[exception_level=<options>] <partition>

• Versal™ ACAP の場合:

{ exception_level=<options>, file=<partition> }

説明コアに設定する例外レベルを指定します。

引数• el-0

• el-1

• el-2

• el-3 (デフォルト)

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 168

Page 169: Bootgen ユーザー ガイド - Xilinx

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [bootloader, destination_cpu=a53-0]fsbl.elf [destination_cpu=a53-0, exception_level=el-3] bl31.elf [destination_cpu=a53-0, exception_level=el-2] u-boot.elf}

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

familykey構文[familykey] <key file path>

説明ファミリ キーを指定します。ファミリ キーを入手するには、ザイリンクスの代理店 ([email protected]) までお問い合わせください。

引数ファイルへのパス。

例all:{ [aeskeyfile] encr.nky [bh_key_iv] bh_iv.txt [familykey] familykey.cfg}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 169

Page 170: Bootgen ユーザー ガイド - Xilinx

file構文{ file = <path/to/file> }

説明パーティションを作成するためのファイルを指定します。

例new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { core = a72-0, file = apu.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

fsbl_config構文[fsbl_config <options>] <partition>

説明このオプションは、ブート イメージのコンフィギュレーションに使用するパラメーターを指定します。FSBL は、ブート ヘッダー認証モードで 64 ビット モードの A53 上で実行する必要があります。

引数• bh_auth_enable: ブート ヘッダー認証イネーブル: ブート イメージの RSA 認証を実行します (PPK ハッシュおよび

SPK ID の検証を除く)。• auth_only: ブート イメージの RSA 署名のみを実行します。FSBL の復号化は実行しません。• opt_key: block-0 の復号化に操作キーを使用します。操作キーはセキュア ヘッダーにあります。• pufhd_bh: PUF ヘルパー データをブート ヘッダーに格納します。デフォルトは efuse です。PUF ヘルパー データ ファイルは、[puf_file] オプションを使用して Bootgen に渡されます。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 170

Page 171: Bootgen ユーザー ガイド - Xilinx

• puf4kmode: PUF を 4k ビット コンフィギュレーションでの使用に合わせて調整します。デフォルトは 12k ビットです。shutter = <value>: PUF でシャッター オフセット時間およびシャッター オープン時間を設定する32 ビットの PUF_SHUT レジスタ値を指定します。注記: このシャッター値は、PUF 登録中に使用されたシャッター値と一致している必要があります。

例all:{ [fsbl_config] bh_auth_enable [pskfile] primary.pem [sskfile]secondary.pem [bootloader,destination_cpu=a53-0,authentication=rsa] fsbl.elf}

headersignature構文Zynq UltraScale+ MPSoC:

[headersignature] <signature file>

Versal:

headersignature = <signature file>

説明ヘッダーの署名を認証証明にインポートします。これは、秘密キーを共有しない場合に使用できます。署名を作成して Bootgen に供給できます。

引数<signature_file>

例Zynq UltraScale+ MPSoC:

all:{ [ppkfile] ppk.txt [spkfile] spk.txt [headersignature] headers.sha256.sig [spksignature] spk.txt.sha256.sig [bootloader, authentication=rsa] fsbl.elf}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 171

Page 172: Bootgen ユーザー ガイド - Xilinx

Versal ACAP の場合:

stage5:{ bhsignature = bootheader.sha384.sig image { name = pmc_subsys, id = 0x1c000001 { type = bootimage, authentication=rsa, ppkfile = rsa-keys/PSK1.pub, spkfile = rsa-keys/SSK1.pub, spksignature = SSK1.pub.sha384.sig, file = pmc_subsys_e.bin } }}

hivec構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[hivec] <partition>

• Versal™ ACAP の場合:

{ hivec, file=<partition> }

説明例外ベクター テーブルの場所を hivec として指定します。これは、A53 (32 ビット) および R5 コアにのみ適用されます。• hivec: 0xFFFF0000 の例外ベクター テーブル。• lovec: 0x00000000 の例外ベクター テーブル。これがデフォルト値です。引数なし例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader, destination_cpu=a53_0] fsbl.elf [destination_cpu=r5-0,hivec] app1.elf }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 172

Page 173: Bootgen ユーザー ガイド - Xilinx

• Versal™ ACAP の場合:

all: { image { name = image1, id = 0x1c000001 { type=bootloader, file=plm.elf } { type=pmcdata, file=pmc_cdo.bin } { type=cdo, file=fpd_data.cdo } { core=psm, file=psm.elf } { core=r5-0, hivec, file=hello.elf } } }

id構文id = <id>

説明定義した場所に基づいて次の ID を指定します。• pdi id: 最外/PDI かっこ内• image id: イメージかっこ内• partition id: パーティションかっこ内例new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 // PDI ID image { name = pmc_subsys, id = 0x1c000001 // Image ID partition { id = 0x01, // Partition ID type = bootloader, file = executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000,

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 173

Page 174: Bootgen ユーザー ガイド - Xilinx

file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } }}

image構文image {

}

説明サブシステム/イメージを定義します。

例test:{ image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, file = plm.elf } { type=pmcdata, load=0xf2000000, file=pmc_cdo.bin} } image { name = PL_SS, id = 0x18700000 { id = 0x3, type = cdo, file = bitstream.rcdo } { id = 0x4, file = bitstream.rnpi } } }

init構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[init] <filename>

• Versal™ ACAP の場合:

init = <filename>

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 174

Page 175: Bootgen ユーザー ガイド - Xilinx

説明ブートローダーの最後にあるレジスタ初期化ブロックで、.int ファイル仕様を解析することにより構築されます。最大 256 個ののアドレスと値の初期化ペアを指定できます。.int ファイルには特定のフォーマットがあります。

例BIF ファイルのサンプルを次に示します。• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [init] test.int }

• Versal™ ACAP の場合:

all: { init = reginit.int image { name = image1, id = 0x1c000001 { type=bootloader, file=plm.elf } { type=pmcdata, file=pmc_cdo.bin } } }

keysrc構文keysrc = <options>

説明暗号化に使用するキー ソースを指定します。

引数ブートローダー、メタ ヘッダー、およびパーティションに有効なキー ソースは、次のとおりです。• efuse_red_key

• efuse_blk_key

• bbram_red_key

• bbram_blk_key

• bh_blk_key

次はパーティションにのみ有効なキーソースです。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 175

Page 176: Bootgen ユーザー ガイド - Xilinx

• user_key0

• user_key1

• user_key2

• user_key3

• user_key4

• user_key5

• user_key6

• user_key7

• efuse_user_key0

• efuse_user_blk_key0

例all: { image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, file = plm.elf } { type = pmcdata, load = 0xf2000000, aeskeyfile = key2.nky, file = pmc_cdo.bin } } }

keysrc_encryption構文[keysrc_encryption] <options> <partition>

説明暗号化に使用するキー ソースを指定します。

引数• bbram_red_key: BBRAM に格納されているレッド キー。• efuse_red_key: eFUSE に格納されているレッド キー。• efuse_gry_key: eFUSE に格納されているグレー (難読化) キー。• bh_gry_key: ブート ヘッダーに格納されているグレー (難読化) キー。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 176

Page 177: Bootgen ユーザー ガイド - Xilinx

• bh_blk_key: ブート ヘッダーに格納されているブラック キー。• efuse_blk_key: eFUSE に格納されているブラック キー。• kup_key: ユーザー キー。例all:{ [keysrc_encryption]efuse_gry_key [bootloader,encryption=aes, aeskeyfile=encr.nky, destination_cpu=a53-0]fsbl.elf}

FSBL は、暗号化用に eFUSE に格納されている encr.nky キーを使用して暗号化されます。

load構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[load = <value>] <partition>

• Versal™ ACAP の場合:

{ load = <value> , file=<partition> }

説明メモリ内のパーティションのロード アドレスを設定します。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf u-boot.elf [load=0x3000000, offset=0x500000] uImage.bin [load=0x2A00000, offset=0xa00000] devicetree.dtb [load=0x2000000, offset=0xc00000] uramdisk.image.gz }

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image {

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 177

Page 178: Bootgen ユーザー ガイド - Xilinx

name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

metaheader構文metahdr { }

説明キー、キーソースなどのようなメタ ヘッダーの暗号化および認証属性を定義します。

例test:{ metaheader { encryption = aes, keysrc = bbram_red_key, aeskeyfile = headerkey.nky, authentication = rsa } image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, encryption = aes, keysrc = bbram_red_key, aeskeyfile = key1.nky, blocks = 8192(*), file = plm.elf } { type=pmcdata, load=0xf2000000, aeskeyfile=key2.nky, file=pmc_cdo.bin } }}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 178

Page 179: Bootgen ユーザー ガイド - Xilinx

name構文name = <name>

説明イメージ/サブシステムの名前を指定します。

例new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } } image { name = lpd, id = 0x4210002 { id = 0x0C, type = cdo, file = lpd_data.cdo } { id = 0x0B, core = psm, file = psm_fw.elf } } image { name = pl_cfi, id = 0x18700000 { id = 0x03, type = cdo, file = system.rcdo } { id = 0x05, type = cdo, file = system.rnpi } } image { name = fpd, id = 0x420c003 { id = 0x08, type = cdo, file = fpd_data.cdo } }}

offset構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[offset = <value>] <filename>

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 179

Page 180: Bootgen ユーザー ガイド - Xilinx

• Versal™ ACAP の場合:

{ offset = <value>, file=<filename> }

説明ブート イメージ内のパーティションの絶対オフセットを設定します。

引数指定された値およびパーティション。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf u-boot.elf [load=0x3000000, offset=0x500000] uImage.bin [load=0x2A00000, offset=0xa00000] devicetree.dtb [load=0x2000000, offset=0xc00000] uramdisk.image.gz }

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { offset = 0x8000, file = data.bin } }}

注記: *base.pdi は Vivado で生成される PDI です。

parent_id構文parent_id = <id>

説明親 PDI の ID を指定します。親 PDI とそれに該当するブート PDI 間の関係を識別するために使用します。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 180

Page 181: Bootgen ユーザー ガイド - Xilinx

例new_bif:{ id = 0x22 parent_id = 0x2

image { name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

partition構文partition {

}

説明パーティションを定義します。BIF を短く読みやすくするためのオプションの属性です。

例new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 partition { id = 0x01, type = bootloader, file = executable.elf } partition { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } }}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 181

Page 182: Bootgen ユーザー ガイド - Xilinx

注記: partition 属性はオプションであり、設定しなくても BIF ファイルは生成できます。上記の BIF を partition 属性を使用せずに記述すると、次のようになります。new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = pmc_subsys, id = 0x1c000001 { id = 0x01, type = bootloader, file = executable.elf } { id = 0x09, type = pmcdata, load = 0xf2000000, file = topology_xcvc1902.v2.cdo, file = pmc_data.cdo } }}

partition_owner、owner構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[partition_owner = <options>] <filename>

• Versal™ ACAP の場合:

{ owner = <options>, file=<filename> }

説明パーティションをロードするパーティション オーナー。

引数• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

○ fsbl: FSBL がこのパーティションを読み込みます。○ uboot: U-Boot がこのパーティションを読み込みます。

• Versal™ ACAP の場合:

○ plm: PLM がこのパーティションを読み込みます。○ non-plm: PLM はこのパーティションを無視します。パーティションは別の方法で読み込まれます。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 182

Page 183: Bootgen ユーザー ガイド - Xilinx

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf uboot.elf [partition_owner=uboot] hello.elf }

• Versal™ ACAP の場合:

all: { image { { type = bootimage, file = base.pdi } } image { name = apu_subsys, id = 0x1c000003 { id = 0x00000000, core = a72-0, owner = non-plm, file = /path/to/image.ub } } }

partition_type構文[partition_type = <options>] <partition>

説明パーティションのフォーマット タイプ。

引数• cdo: パーティションはコンフィギュレーション データ オブジェクト形式。• raw: パーティションはバイナリ形式。• cfi: パーティションは Cframe (ビットストリーム形式)。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 183

Page 184: Bootgen ユーザー ガイド - Xilinx

pid構文 [pid = <id_no>] <partition>

説明パーティション ID を指定します。デフォルト値は 0 です。

例all:{ [encryption=aes, aeskeyfile=test.nky, pid=1] hello.elf}

pmufw_image構文[pmufw_image] <PMU ELF file>

説明FSBL をロードする前に bootROM によってロードされる PMU ファームウェア イメージです。pmufw_image のオプションは、ブートローダー パーティションに含まれます。Bootgen では、pmufw_image オプションと共に指定される追加の属性は考慮されません。

引数ファイル名

例the_ROM_image:{ [pmufw_image] pmu_fw.elf [bootloader, destination_cpu=a53-0] fsbl_a53.elf [destination_cpu=a53-1] app_a53.elf [destination_cpu=r5-0] app_r5.elf}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 184

Page 185: Bootgen ユーザー ガイド - Xilinx

ppkfile構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[ppkfile] <key filename>

• Versal™ ACAP の場合:

ppkfile = <filename>

説明プライマリ公開キー (PPK) は、ブート イメージ内のパーティションを認証するために使用されます。認証の使用 を参照してください。

引数指定するファイルの名前。注記: 秘密キー ファイルには、キーの公開キー コンポーネントが含まれます。秘密キー (PSK) が指定されている場合は、公開キー (PPK) を指定する必要はありません。例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [ppkfile] primarykey.pub [pskfile] primarykey.pem [sskfile] secondarykey.pem [bootloader, authentication=rsa]fsbl.elf [authentication=rsa] hello.elf}

• Versal™ ACAP の場合:

all: { boot_config {bh_auth_enable} image { name = pmc_ss, id = 0x1c000001 { type=bootloader, authentication=rsa, file=plm.elf, ppkfile=primary0.pub, pskfile=primary0.pem, sskfile=secondary0.pem } { type = pmcdata, load = 0xf2000000, file=pmc_cdo.bin } { type=cdo, authentication=rsa, file=fpd_cdo.bin, ppkfile=primary1.pub, pskfile = primary1.pem, sskfile = secondary1.pem } } }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 185

Page 186: Bootgen ユーザー ガイド - Xilinx

presign構文Zynq-7000 および Zynq UltraScale+ MPSoC デバイスの場合:

[presign = <signature_file>] <partition>

Versal ACAP の場合:

presign = <signature file>

説明パーティション署名をパーティション認証証明にインポートします。これは、秘密キー (SSK) を共有しない場合に使用します。署名を作成して Bootgen に供給できます。• <signature_file>: 署名ファイルを指定します。• <partition>: 署名ファイルを適用するパーティションをリストします。

例Zynq-7000 および Zynq UltraScale+ MPSoC デバイスの場合:

all:{ [ppkfile] ppk.txt [spkfile] spk.txt [headsignature] headers.sha256.sig [spksignature] spk.txt.sha256.sig [bootloader, authentication=rsa, presign=fsbl.sig]fsbl.elf}

pskfile構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[pskfile] <key filename>

• Versal™ ACAP の場合:

pskfile = <filename>

説明このプライマリ秘密キー (PSK) は、ブート イメージ内のパーティションを認証するために使用されます。詳細は、認証の使用 を参照してください。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 186

Page 187: Bootgen ユーザー ガイド - Xilinx

引数指定するファイルの名前。注記: 秘密キー ファイルには、キーの公開キー コンポーネントが含まれます。秘密キー (PSK) が指定されている場合は、公開キー (PPK) を指定する必要はありません。例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [pskfile] primarykey.pem [sskfile] secondarykey.pem [bootloader, authentication=rsa]fsbl.elf [authentication=rsa] hello.elf}

• Versal™ ACAP の場合:

all: { boot_config {bh_auth_enable} image { name = pmc_ss, id = 0x1c000001 { type=bootloader, authentication=rsa, file=plm.elf, pskfile=primary0.pem, sskfile=secondary0.pem } { type = pmcdata, load = 0xf2000000, file=pmc_cdo.bin } { type=cdo, authentication=rsa, file=fpd_cdo.bin, pskfile = primary1.pem, sskfile = secondary1.pem } } }

puf_file構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[puf_file] <puf data file>

• Versal ACAP の場合:

puf_file = <puf data file>

説明PUF ヘルパー データ ファイル。• PUF は、暗号化キー ソースとしてブラック キーと共に使用されます。• PUF ヘルパー データは 1544 バイトです。• 1536 バイトの PUF HD + 4 バイトの CHASH + 3 バイトの AUX + 1 バイト アライメント。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 187

Page 188: Bootgen ユーザー ガイド - Xilinx

詳細は、ブラック キー/PUF キー を参照してください。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [fsbl_config] pufhd_bh [puf_file] pufhelperdata.txt [bh_keyfile] black_key.txt [bh_key_iv] bhkeyiv.txt [bootloader,destination_cpu=a53-0,encryption=aes]fsbl.elf}

• Versal™ ACAP の場合:

all: { boot_config {puf4kmode} puf_file = pufhd_file_4K.txt bh_kek_iv = bh_black_key-iv.txt image { name = pmc_subsys, id = 0x1c000001 { type = bootloader, encryption = aes, keysrc = bh_black_key, aeskeyfile = key1.nky, file = plm.elf } { type = pmcdata, load = 0xf2000000, aeskeyfile = key2.nky, file = pmc_cdo.bin } { type=cdo, encryption = aes, keysrc = efuse_red_key, aeskeyfile = key3.nky, file=fpd_data.cdo } } }

reserve構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[reserve = <value>] <filename>

• Versal™ ACAP の場合:

{ reserve = <value>, file=<filename> }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 188

Page 189: Bootgen ユーザー ガイド - Xilinx

説明パーティションのメモリ サイズを維持します。このサイズになるまでパーティションにパディングが追加されます。維持するメモリ サイズは、バイト数で指定します。

引数指定されたパーティション。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf [reserve=0x1000] test.bin }

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { reserve = 0x1000, file = data.bin } }}

注記: *base.pdi は Vivado で生成される PDI です。

s_hwrot構文boot_config { s_hwrot }

説明非対称ハードウェアの信頼のルート (S-HWRoT) ブート モード。Bootgen で S-HWRoT ブート モードのデザイン ルールがチェックされます。プロダクション PDI でのみ有効です。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 189

Page 190: Bootgen ユーザー ガイド - Xilinx

split構文[split] mode = <mode-options>, fmt=<format>

説明モードに基づいてイメージを分割します。スレーブ ブート (slaveboot) モードでは次のように分割されます。• ブート ヘッダー + ブートローダー• イメージ ヘッダーおよびパーティション ヘッダー• 残りのパーティション通常 (normal) モードでは次のように分割されます。• ブート ヘッダー + イメージ ヘッダー + パーティション ヘッダー + ブートローダー• Partition1

• パーティション 2、以下同様スレーブ ブート モードは Zynq UltraScale+ MPSoC でのみサポートされ、通常モードは Zynq-7000 および ZynqUltraScale+ MPSoC の両方でサポートされます。分割 (split) モードでは、出力フォーマットも bin または mcs に設定できます。

オプション引数で使用可能なオプションは次のとおりです。• slaveboot

• normal

• bin

• mcs

例all:{ [split]mode=slaveboot,fmt=bin [bootloader,destination_cpu=a53-0]fsbl.elf [destination_device=pl]system.bit [destination_cpu=r5-1]app.elf}

注記: オプションの split の normal モードは、コマンド ライン オプションの split と同じです。このコマンド ラインオプションは廃止予定です。注記: split slaveboot モードでは Versal ACAP ではサポートされていません。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 190

Page 191: Bootgen ユーザー ガイド - Xilinx

spkfile構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[spkfile] <key filename>

• Versal™ ACAP の場合:

spkfile = <filename>

説明セカンダリ公開キー (SPK) は、ブート イメージ内のパーティションを認証するために使用されます。詳細は、認証の使用 を参照してください。

引数指定するファイルの名前。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [pskfile] primarykey.pem [spkfile] secondarykey.pub [sskfile] secondarykey.pem [bootloader, authentication=rsa]fsbl.elf [authentication=rsa] hello.elf}

• Versal™ ACAP の場合:

all: { boot_config {bh_auth_enable} pskfile=primary0.pem, image { name = pmc_ss, id = 0x1c000001 { type=bootloader, authentication=rsa, file=plm.elf, spkfile=secondary0.pub, sskfile=secondary0.pem } { type = pmcdata, load = 0xf2000000, file=pmc_cdo.bin } { type=cdo, authentication=rsa, file=fpd_cdo.bin} spkfile=secondary1.pub, sskfile = secondary1.pem } } }

注記: 秘密キー ファイルには、キーの公開キー コンポーネントが含まれます。秘密キー (SSK) が指定されている場合は、公開キー (SPK) を指定する必要はありません。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 191

Page 192: Bootgen ユーザー ガイド - Xilinx

spksignature構文Zynq および Zynq UltraScale+ MPSoC デバイスの場合:

[spksignature] <Signature file>

Versal ACAP の場合:

spksignature = <signature file>

説明SPK 署名を認証証明にインポートします。これは、秘密キー PSK を共有しない場合に使用できます。署名を作成してBootgen に供給できます。

引数指定するファイルの名前。

例Zynq および Zynq UltraScale+ MPSoC デバイスの場合:

all:{ [ppkfile] ppk.txt [spkfile] spk.txt [headersignature]headers.sha256.sig [spksignature] spk.txt.sha256.sig [bootloader, authentication=rsa] fsbl.elf}

Versal ACAP の場合:

stage7c:{ image { id = 0x1c000000, name = fpd { type = bootimage, authentication=rsa, ppkfile = PSK3.pub, spkfile = SSK3.pub, spksignature = SSK3.pub.sha384.sig, presign = fpd_data.cdo.0.sha384.sig, file = fpd_e.bin } }}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 192

Page 193: Bootgen ユーザー ガイド - Xilinx

spk_select構文[spk_select = <options>]

または

[auth_params] spk_select = <options>

説明オプションは次のとおりです。• spk-efuse: パーティションに spk_id eFUSE が使用されていることを示します。これがデフォルト値です。• user-efuse: パーティションにユーザー eFUSE が使用されていることを示します。CSU ROM によってロードされるパーティションは、常に spk_efuse を使用します。注記: spk_id eFUSE は、どのキーが有効であるかを指定します。したがって、ROM は spk_id eFUSE のフィールド全体を SPK ID と照合してビットが一致することを確認します。ユーザー eFUSE は、どのキー ID が有効でない (取り消された) かを指定します。したがって、ファームウェア (ROM以外) は、SPK ID を表すそのユーザー eFUSE がプログラムされているかどうかをチェックします。spk_select =user-efuse の場合、そのパーティションにユーザー eFUSE が使用されることを意味します。例the_ROM_image:{ [auth_params]ppk_select = 0 [pskfile]psk.pem [sskfile]ssk1.pem

[ bootloader, authentication = rsa, spk_select = spk-efuse, spk_id = 0x5, sskfile = ssk2.pem ] zynqmp_fsbl.elf

[ destination_cpu =a53-0, authentication = rsa, spk_select = user-efuse, spk_id = 0xF, sskfile = ssk3.pem ] application1.elf

[ destination_cpu =a53-0, authentication = rsa,

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 193

Page 194: Bootgen ユーザー ガイド - Xilinx

spk_select = spk-efuse, spk_id =0x5, sskfile = ssk4.pem ] application2.elf}

sskfile構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[sskfile] <key filename>

• Versal™ ACAP の場合:

sskfile = <filename>

説明セカンダリ秘密キー (SSK) は、ブート イメージ内のパーティションを認証するために使用されます。詳細は、認証の使用 を参照してください。

引数指定するファイルの名前。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all:{ [pskfile] primarykey.pem [sskfile] secondarykey.pem [bootloader, authentication=rsa]fsbl.elf [authentication=rsa] hello.elf}

• Versal™ ACAP の場合:

all: { boot_config {bh_auth_enable} image { name = pmc_ss, id = 0x1c000001 { type=bootloader, authentication=rsa, file=plm.elf, pskfile=primary0.pem, sskfile=secondary0.pem } { type = pmcdata, load = 0xf2000000, file=pmc_cdo.bin } { type=cdo, authentication=rsa, file=fpd_cdo.bin, pskfile = primary1.pem, sskfile = secondary1.pem } } }

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 194

Page 195: Bootgen ユーザー ガイド - Xilinx

注記: 秘密キー ファイルには、キーの公開キー コンポーネントが含まれます。秘密キー (PSK) が指定されている場合は、公開キー (PPK) を指定する必要はありません。

startup構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[startup = <value>] <filename>

• Versal™ ACAP の場合:

{ startup = <value>, file = <filename> }

説明このオプションは、ロード後のパーティションのエントリ アドレスを設定します。この識別子は、実行しないパーティションでは無視されます。これは、バイナリ パーティションにのみ使用できます。

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader] fsbl.elf [startup=0x1000000] app.bin }

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { core=a72-0, load=0x1000, startup = 0x1000, file = apu.bin } }}

注記: *base.pdi は Vivado で生成される PDI です。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 195

Page 196: Bootgen ユーザー ガイド - Xilinx

TrustZone構文• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

[trustzone = <options> ] <filename>

• Versal™ ACAP の場合:

{ trustzone = <options>, file = <filename> }

説明コアを TrustZone セキュアまたは非セキュアに設定します。オプションは次のとおりです。• secure

• nonsecure (デフォルト)

例• Zynq デバイスおよび Zynq UltraScale+ MPSoC の場合:

all: { [bootloader, destination_cpu=a53-0] fsbl.elf [exception_level=el-3, trustzone = secure] bl31.elf }

• Versal™ ACAP の場合:

new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { load = 0x1000, file = system.dtb } { exception_level = el-2, file = u-boot.elf } { core = a72-0, exception_level = el-3, trustzone, file = bl31.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 196

Page 197: Bootgen ユーザー ガイド - Xilinx

type構文{ type = <options> }

説明パーティションのタイプを指定します。オプションは次のとおりです。• bootloader

• pmcdata

• cdo

• cfi

• cfi-gsc

• bootimage

例new_bif:{ image { { type = bootimage, file = base.pdi } } image { name = apu_ss, id = 0x1c000000 { core = a72-0, file = apu.elf } }}

注記: *base.pdi は Vivado で生成される PDI です。

udf_bh構文[udf_bh] <filename>

説明ブート ヘッダーのユーザー定義フィールドにコピーされるデータのファイルをインポートします。入力されたユーザー定義データは、16 進数文字列フォーマットのテキスト ファイルで提供されます。ザイリンクス SoC におけるUDF の総バイト数は次のとおりです。• zynq: 76 バイト

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 197

Page 198: Bootgen ユーザー ガイド - Xilinx

• zynqmp: 40 バイト引数指定するファイルの名前。

例all:{ [udf_bh]test.txt [bootloader]fsbl.elf hello.elf}

次に、udf_bh の入力ファイルの例を示します。udf_bh - test.txt のサンプル入力ファイル 123456789abcdef85072696e636530300301440408706d616c6c6164000508 266431530102030405060708090a0b0c0d0e0f101112131415161718191a1b 1c1d1

udf_data構文[udf_data=<filename>] <partition>

説明最大 56 バイトのデータを含むファイルを認証証明のユーザー定義フィールド (UDF) にインポートします。認証証明の詳細は、認証を参照してください。

引数指定するファイルの名前。

例all:{ [pskfile] primary0.pem [sskfile]secondary0.pem [bootloader, destination_cpu=a53-0, authentication=rsa,udf_data=udf.txt]fsbl.elf [destination_cpu=a53-0,authentication=rsa] hello.elf}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 198

Page 199: Bootgen ユーザー ガイド - Xilinx

xip_mode構文[xip_mode] <partition>

説明FSBL が QSPI フラッシュから直接実行されるよう XIP (eXecute-In-Place) を示します。注記: この属性は、FSBL/ブートローダー パーティションにのみ適用されます。引数指定されたパーティション。

例次の例は、Zynq® UltraScale+™ MPSoC デバイスの代わりに実行するブート イメージをを作成する方法を示しています。all:{ [bootloader, xip_mode] fsbl.elf application.elf}

第 8 章: BIF 属性のリファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 199

Page 200: Bootgen ユーザー ガイド - Xilinx

第 9 章

コマンド リファレンスarch

構文-arch [options]

説明ブート イメージを作成する必要のあるザイリンクス ファミリ アーキテクチャ。

引数• zynq: Zynq®-7000 デバイス アーキテクチャ。これがブート イメージを作成する必要のあるファミリ アーキテクチャのデフォルト値です。

• zynqmp: Zynq® UltraScale+™ MPSoC デバイス アーキテクチャ。• fpga: イメージはほかの FPGA アーキテクチャをターゲットとしています。• versal: このイメージは Versal™ デバイスをターゲットにしています。戻り値なし

例bootgen -arch zynq -image test.bif -o boot.bin

authenticatedjtag構文-authenticatedjtag [options] [filename]

説明セキュア ブート中に JTAG をイネーブルにします。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 200

Page 201: Bootgen ユーザー ガイド - Xilinx

引数• rsa

• ecdsa

例bootgen -arch versal -image boot.bif -w -o boot.bin -authenticatedjtag rsa authJtag-rsa.bin

bif_help構文bootgen -bif_help

bootgen -bif_help aeskeyfile

説明サポートされている BIF ファイルの属性をリストします。各 BIF 属性の詳細は、コマンド ラインで -bif_help の引数として属性名を指定すると説明が得られます。

dual_ospi_mode構文bootgen -arch versal -dual_ospi_mode stacked <size>

説明デュアル OSPI スタックド コンフィギュレーションに対して 2 つの出力ファイルを生成します。フラッシュのサイズを MB で指定する必要があります (64、128、または 256)。

例次の例は、OSPI デュアル パラレル コンフィギュレーションの 2 つのフラッシュを個別にプログラムするため、2 つの出力ファイルを生成します。実際のイメージの最初の 64 MB が 1 つ目のファイルに書き込まれ、残りは 2 つ目のファイルに書き込まれます。実際のイメージが 64 MB 未満の場合は、1 つのファイルのみ生成されます。これはVersal ACAP でのみサポートされます。bootgen -arch versal -image test.bif -o -boot.bin -dual_ospi_mode stacked 64

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 201

Page 202: Bootgen ユーザー ガイド - Xilinx

引数• stacked、<size>

dual_qspi_mode構文bootgen -dual_qspi_mode [parallel]|[stacked <size>]

説明Dual QSPI コンフィギュレーションの場合は 2 つの出力ファイルを生成します。スタックド コンフィギュレーションの場合は、フラッシュのサイズ (MB) を指定する必要があります (16、32、128、または 256)。

例次の例は、QSPI デュアル パラレル コンフィギュレーションの 2 つのフラッシュを個別にプログラムするため、2 つの出力ファイルを生成します。bootgen -image test.bif -o -boot.bin -dual_qspi_mode parallel

次の例は、QSPI デュアル パラレル コンフィギュレーションの 2 つのフラッシュを個別にプログラムするため、2 つの出力ファイルを生成します。実際のイメージの最初の 64 MB が 1 つ目のファイルに書き込まれ、残りは 2 つ目のファイルに書き込まれます。実際のイメージが 64 MB 未満の場合は、1 つのファイルのみ生成されます。bootgen -image test.bif -o -boot.bin -dual_qspi_mode stacked 64

引数• parallel

• stacked <size>

dump構文-dump [options]

説明ブート ヘッダーの内容を PDI 生成中に別のバイナリ ファイルへダンプします。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 202

Page 203: Bootgen ユーザー ガイド - Xilinx

例[bootgen -image test.bif -o -boot.bin -log trace -dump bh]

引数• empty: パーティションをバイナリ ファイルとしてダンプします。• bh: ブート ヘッダーを別のファイルとしてダンプします。注記: ブート ヘッダーは、PDI と一緒に別のバイナリ ファイルとしてダンプされます。生成される PDI はブート ヘッダーから取り出されませんが、ブート ヘッダーを含みます。

dump_dir構文dump_dir <path>

説明-dump コマンドの内容を書き込みディレクトリを指定します。

例bootgen -arch versal -dump boot.bin -dump_dir <path>

efuseppkbits構文

bootgen -image test.bif -o boot.bin -efuseppkbits efusefile.txt

引数efusefile.txt

説明このオプションは、PPK ハッシュを書き込む eFUSE ファイルの名前を指定します。また、パディングなしでダイレクト ハッシュを生成します。PPK キーのハッシュを含む efusefile.txt ファイルが生成されます。• Zynq®-7000 では、ハッシュ処理に SHA2 プロトコルが使用されます。• Zynq® UltraScale+™ MPSoC および Versal ACAP では、ハッシュ処理に SHA3 が使用されます。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 203

Page 204: Bootgen ユーザー ガイド - Xilinx

encrypt構文bootgen -image test.bif -o boot.bin -encrypt <efuse|bbram|>

説明このオプションは、暗号化の実行方法とキーの格納場所を指定します。NKY キー ファイルは、BIF ファイルのaeskeyfile 属性で渡されます。コマンド ラインで指定されるのはキー ソースのみです。

引数キー ソースの引数は次のとおりです。• efuse: AES キーは eFUSE に格納されます。これがデフォルト値です。• bbram: AES キーは BBRAM に格納されます。

encryption_dump構文bootgen -arch zynqmp -image test.bif -encryption_dump

説明暗号ログ ファイル aes_log.txt を生成します。生成される aes_log.txt には、データの各ブロックの暗号化に使用される AES キー/IV ペアの詳細が含まれます。また、パーティションとそれを暗号化するために使用した AES キー ファイルもログに記録されます。注記: このオプションは、Zynq® UltraScale+™ MPSoC でのみサポートされます。例all:{ [bootloader, encryption=aes, aeskeyfile=test.nky] fsbl.elf [encryption=aes, aeskeyfile=test1.nky] hello.elf}

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 204

Page 205: Bootgen ユーザー ガイド - Xilinx

fill構文bootgen -arch zynq -image test.bif -fill 0xAB -o boot.bin

説明このオプションは、パディング/予約されているメモリを <hex byte> フォーマットで埋めるために使用するバイトを指定します。

出力0xAB バイトの boot.bin ファイル。

例出力イメージは boot.bin という名前で生成されます。出力イメージのフォーマットは、-o オプションで指定するファイル拡張子に基づいて決まります。この例では、-fill: でパディングするバイトを指定します。0xFF ではなく <hex byte> がヘッダー テーブルにパディングされます。bootgen -arch zynq -image test.bif -fill 0xAB -o boot.bin

generate_hashes構文bootgen -image test.bif -generate_hashes

説明このオプションは、すべてのパーティションおよびその他のコンポーネントがブート ヘッダー、イメージ、およびパーティション ヘッダーと同様に署名されるようハッシュ ファイルを生成します。また、Zynq®-7000 フォーマット用に PKCS#1v1.5 のパディングされたハッシュを含むファイルを生成します。表 37: Zynq: SHA-2 (256 バイト)

値 SHA-2 ハッシュ* T-パディング 0x0 0xFF 0x01 0x00

バイト数 32 19 1 202 1 1

このオプションは、Zynq® UltraScale+™ MPSoC フォーマット用に PKCS#1v1.5 のパディングされたハッシュを含むファイルを生成します。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 205

Page 206: Bootgen ユーザー ガイド - Xilinx

表 38: ZynqMP: SHA-3 (384 バイト)

値 0x0 0x1 0xFF 0xFF T-パディング SHA-3 ハッシュバイト数 1 1 314 1 19 48

例test:{ [pskfile] ppk.txt [sskfile] spk.txt [bootloader, authentication=rsa] fsbl.elf [authentication=rsa] hello.elf }

Bootgen は、指定された BIF で次のハッシュ ファイルを生成します。• ブート ヘッダー ハッシュ• spk ハッシュ• ヘッダー テーブル ハッシュ• fsbl.elf パーティション ハッシュ• hello.elf パーティション ハッシュ

generate_keys構文bootgen -image test.bif -generate_keys <rsa|pem|obfuscated>

説明このオプションは、認証用のキーと暗号化に使用される難読化キーを生成します。注記: 暗号化キーの生成の詳細は、キーの生成を参照してください。認証キー生成の例認証キー生成の例。この例では、BIF ファイルで指定したパスに認証キーを生成します。

例image:{ [ppkfile] <path/ppkgenfile.txt> [pskfile] <path/pskgenfile.txt> [spkfile] <path/spkgenfile.txt> [sskfile] <path/sskgenfile.txt>}

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 206

Page 207: Bootgen ユーザー ガイド - Xilinx

難読化キー生成の例この例では、familykey.txt と同じパスで難読化されたものを生成します。

コマンドbootgen -image test.bif -generata_keys rsa

BIF ファイルの例を次に示します。image:{ [aeskeyfile] aes.nky [bh_key_iv] bhkeyiv.txt [familykey] familykey.txt}

引数• rsa

• pem

• obfuscated

h、help構文bootgen -helpbootgen -help arch

説明サポートされるコマンド ライン属性をリストします。各属性の詳細は、コマンド ラインで -help の引数として属性名を指定すると表示されます。

image構文-image <BIF_filename>

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 207

Page 208: Bootgen ユーザー ガイド - Xilinx

説明このオプションは、入力する BIF ファイル名を指定します。BIF ファイルは、ブート イメージの各コンポーネントをブート順に指定し、オプションで各イメージ コンポーネントに属性を指定できるようにします。各イメージ コンポーネントは、通常 1 つのパーティションにマップされますが、1 つのイメージ コンポーネントがメモリ内で連続する場合は、1 つのイメージ コンポーネントが複数パーティションにマップされます。

引数bif_filename

例bootgen -arch zynq -image test.bif -o boot.bin

BIF ファイルの例を次に示します。the_ROM_image: { [init] init_data.int [bootloader] fsbl.elf Partition1.bit Partition2.elf }

log構文bootgen -image test.bif -o -boot.bin -log trace

説明ブート イメージの作成中にログを生成します。情報のレベルに応じてさまざまなオプションがあります。情報はコンソールに表示され、bootgen_log.txt という名前のログ ファイルが作業ディレクトリに生成されます。

引数• error: エラー情報のみ記録されます。• warning: 警告およびエラー情報が記録されます。これがデフォルト値です。• info: 一般的な情報および上記すべての情報が記録されます。• trace: より詳細な情報が上記の情報と共に記録されます。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 208

Page 209: Bootgen ユーザー ガイド - Xilinx

nonbooting構文bootgen -arch zynq -image test.bif -o test.bin -nonbooting

説明このオプションは、中間のブート イメージを作成するために使用されます。中間の test.bin イメージは、認証イメージの生成に必要な秘密キーがなくても出力として生成されます。この中間イメージはブートできません。

例all: { [ppkfile]primary.pub [spkfile]secondary.pub [spksignature]secondary.pub.sha256.sig [bootimage,authentication=rsa,presign=fsbl_0.elf.0.sha256.sig]fsbl_e.bin }

o構文bootgen -arch zynq -image test.bif -o boot.<bin|mcs>

説明このオプションは、出力イメージ ファイルの名前 (拡張子) を .bin または .mcs で指定します。

出力BIN または MCS フォーマットのフル ブート イメージ ファイル。

例bootgen -arch zynq -image test.bif -o boot.mcs

ブート イメージは MCS フォーマットで出力されます。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 209

Page 210: Bootgen ユーザー ガイド - Xilinx

p構文bootgen -image test.bif -o boot.bin -p xc7z020clg48 -encrypt efuse

説明このオプションは、ザイリンクス デバイスのパーツ名を指定します。これは、暗号化キーを生成するために必要です。NKY ファイルの Device 行の *.nky ファイルにそのままコピーされます。これは、暗号化が有効な場合にのみ適用されます。BIF ファイルで指定されたパスにキー ファイルが存在しない場合、同じパスに新しい暗号化キーが生成され、nky ファイルの Device フィールドの横に xc7z020clg484 がコピーされます。生成されたイメージは暗号化されたイメージです。

padimageheader構文bootgen -image test.bif -w on -o boot.bin -padimageheader <0|1>

説明このオプションは、イメージ ヘッダー テーブルとパーティション ヘッダー テーブルを可能な限り数多くのパーティションにパディングし、続くパーティションを強制的に揃えます。この機能はデフォルトで有効になっています。0を指定すると、無効になります。実際の boot.bin にはイメージ ヘッダー テーブルとパーティション ヘッダー テーブルがあり、余分なテーブルはパディングされていません。何も指定されていない場合、または -padimageheader=1 の場合、イメージ ヘッダー テーブルおよびパーティション ヘッダー テーブルの合計が最大数のパーティションにパディングされます。

引数• 1: ヘッダー テーブルを最大数のパーティションにパディングする。これがデフォルト値です。• 0: ヘッダー テーブルをパディングしない。イメージ ヘッダーまたはパーティション ヘッダーの長さ• Zynq デバイスの場合、最大パーティションは 14 です。• Zynq UltraScale+ MPSoC の場合、最大パーティションは 32 です。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 210

Page 211: Bootgen ユーザー ガイド - Xilinx

process_bitstream構文-process_bitstream <bin|mcs>

説明BIF からのビットストリームのみを処理し、MCS ファイルまたは BIN ファイルとして出力します。たとえば、BIF ファイルのビットストリームに暗号化を選択した場合、出力は暗号化されたビットストリームとなります。

引数• bin: BIN フォーマットでの出力。• mcs: MCS フォーマットでの出力。戻り値生成される出力は、BIN フォーマットまたは MCS フォーマットのビットストリームで、ヘッダーが添付されていない処理済みファイルです。

read構文-read [options] <filename>

説明オプションに基づいて、ブート ヘッダー、イメージ ヘッダー、およびパーティション ヘッダーを読み出すのに使用されます。

引数• bh: bootimage からブート ヘッダーを人間が読める形式で読み出します。• iht: bootimage からイメージ ヘッダー テーブルを読み出します。• ih: bootimage からイメージ ヘッダーを読み出します。• pht: bootimage からパーティション ヘッダーを読み出します。• ac: bootimage から認証証明を読み出します。コード例bootgen -arch zynqmp -read BOOT.bin

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 211

Page 212: Bootgen ユーザー ガイド - Xilinx

spksignature構文bootgen -image test.bif -w on -o boot.bin -spksignature spksignfile.txt

説明このオプションは、SPK 署名ファイルの生成に使用します。これは、spkfile および pskfile が BIF で指定されている場合にのみ使用する必要があります。SPK 署名ファイル (spksignfile.txt) が生成されます。

オプション生成する署名ファイルの名前を指定します。

split構文bootgen -arch zynq -image test.bif -split bin

説明このオプションは、ヘッダーを含む各データ パーティションを MCS または BIN フォーマットの新しいファイルとして出力します。

出力出力ファイルは次のとおりです。• ブート ヘッダー + イメージ ヘッダー + パーティション ヘッダー + Fsbl.elf

• Partition1.bit

• Partition2.elf

例the_ROM_image: { [bootloader] Fsbl.elf Partition1.bit Partition2.elf }

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 212

Page 213: Bootgen ユーザー ガイド - Xilinx

verify構文bootgen -arch zynqmp -verify boot.bin

説明このオプションは、ブート イメージの認証を検証するために使用します。ブート イメージ内の認証証明がすべて使用可能なパーティションに対して検証されます。検証は、次の手順で実行されます。1. ヘッダー認証証明の検証、SPK 署名の検証、およびヘッダー署名の検証。2. ヘッダー ブートローダー認証証明の検証、ブート ヘッダー署名の検証、SPK 署名の検証、およびブートローダー署名の検証。

3. パーティション認証証明の検証、SPK 署名の検証、およびパーティション署名の検証。これは、該当するブート イメージのすべてのパーティションで繰り返されます。

verify_kdf構文bootgen -arch zynqmp -verify_kdf testVec.txt

説明testVec.txt ファイルのフォーマットは、次のとおりです。L = 256KI = d54b6fd94f7cf98fd955517f937e9927f9536caebe148fba1818c1ba46bba3a4FixedInputDataByteLen = 60FixedInputData = 94c4a0c69526196c1377cebf0a2ae0fb4b57797c61bea8eeb0518ca08652d14a5e1bd1b116b1794ac8a476acbdbbcd4f6142d7b8515bad09ec72f7af

Bootgen は、カウンターの Mode KDF を使用して、テスト ベクター ファイルの入力データに基づいて出力キー (KO)を生成します。この KO は、ユーザーが比較できるようにコンソールに表示されます。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 213

Page 214: Bootgen ユーザー ガイド - Xilinx

w構文bootgen -image test.bif -w on -o boot.binor bootgen -image test.bif -w -o boot.bin

説明このオプションは、既存のファイルを上書きするかどうかを指定します。boot.bin ファイルが既にパスに存在する場合は上書きされます。-w on オプションと -w オプションは同じように扱われます。-w オプションが指定されていない場合、ファイルはデフォルトで上書きされません。

引数• on: 引数ありの -w on コマンドまたは引数なしの -w で指定します。これがデフォルト値です。• off: 既存ファイルを上書きしないよう指定します。

zynqmpes1構文bootgen -arch zynqmp -image test.bif -o boot.bin -zynqmpes1

説明生成されたイメージを ES1 (1.0) で使用することを指定します。このオプションは、認証イメージを生成する場合にのみ影響をおよぼします。それ以外は無視されます。デフォルトのパディング方式は、ES2 (2.0) 以降が対象です。

第 9 章: コマンド リファレンス

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 214

Page 215: Bootgen ユーザー ガイド - Xilinx

第 10 章

初期化ペアおよび INIT ファイルの属性初期化ペアを使用すると、MIO マルチプレクサーのプロセッサ システム (PS) レジスタとフラッシュ デバイスのクロックの初期化が容易になります。これにより、FSBL イメージを OCM にコピーする前、または XIP (eXecute in place)でフラッシュから実行する前に MIO マルチプレクサーを完全にコンフィギュレーションでき、フラッシュ デバイスのクロックを帯域幅が最大となるように設定できます。ブート イメージ ヘッダーの固定部分の最後に 256 の初期化ペアがあります。1 つのペアは 32 ビットのアドレス値と 32 ビットのデータ値で構成されるため、初期化ペアはこれに従って指定されます。初期化が実行されない場合、アドレス値はすべて 0xFFFFFFFF となり、データ値はすべて 0x00000000 となります。これらの初期化ペアは、デフォルトでファイル拡張子が .int のテキスト ファイルで設定されますが、拡張子は変更できます。このファイルは、ファイル名の前に [init] ファイル属性を使用することによって、BIF 内で INIT ファイルとして認識されます。データ フォーマットでは、動作指示子の後に次の情報が続きます。• アドレス値• = 文字• データ値行末はセミコロン (;) で示します。次に、.set. operation directive; の例を示します。.set. 0xE0000018 = 0x00000411; // This is the 9600 uart setting.

Bootgen は、INT ファイルからブート ヘッダー初期化データを最大で 256 ペアまで挿入します。bootROM が実行されると、bootROM はアドレス値を参照し、その値が 0xFFFFFFFF でない場合は、アドレス値に続く次の 32 ビット値を使用してアドレスの値を書き込みます。bootROM は、アドレス値が 0xFFFFFFFF になるまで、または 256 番目の初期化ペアに到達するまで、初期化ペアを順に設定します。Bootgen では、次に示す演算子を含む式の評価 (優先を強制するネストされたかっこを含む) を実行できます。* = multiply/ = divide% = modan address valueulo divide+ = addition- = subtraction~ = negation>> = shift right<< = shift left& = binary and = binary or^ = binary nor

値は 16 進数 (0x)、8 進数 (0o)、または 10 進数で指定できます。数表現は、128 ビットの固定小数点整数として保持されます。読みやすいように、表現演算子の前後にスペースを入れることができます。

第 10 章: 初期化ペアおよび INIT ファイルの属性

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 215

Page 216: Bootgen ユーザー ガイド - Xilinx

第 11 章

CDO ユーティリティCDO ユーティリティ (cdoutil) は CDO ファイルをさまざまな方法で処理可能なプログラムです。CDO ファイルは、クロック、PLL、MIO のユーザー コンフィギュレーションに基づいて Versal™ デバイス用に Vivado® Design Suite で作成されたバイナリ ファイルです。CDO は PDI の一部で、PLM でロード/実行されます。Zynq® デバイスおよびZynq® UltraScale+™ MPSoC の場合、コンフィギュレーションは ps7/psu_init.c/h ファイルの一部で、FSBL と共にコンパイルされます。

アクセスcdoutil は、Vivado Design Suite/Vitis™ 統合ソフトウェア プラットフォーム/Bootgen をインストールすると<INSTALL_DIR>/bin/cdoutil に含まれます。

使用法cdoutil の一般的なコマンド ライン構文は、次のとおりです。cdoutil <options> <input(s)>

cdoutil は、デフォルトで入力ファイルをデコードして、CDO を表示します。

コマンド ライン オプションデフォルト動作を変更するオプションは複数あります。表 39: コマンド ライン オプション

オプション 説明-address-filter-file <path> アドレス フィルター タイプを指定します。-annotate コマンドの詳細を含めてソース出力をアノテートします。-device <type> デバイス名を指定します。デフォルトは s80 です。-help ヘルプ情報を表示します。-output-binary-be ビッグ エンディアンのバイナリ形式で CDO コマンドを出力します。-output-binary-le リトル エンディアンのバイナリ形式で CDO コマンドを出力します。-output-file <path> 出力ファイルを指定します。デフォルトは stdout です。

第 11 章: CDO ユーティリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 216

Page 217: Bootgen ユーザー ガイド - Xilinx

表 39: コマンド ライン オプション (続き)

オプション 説明-output-modules 入力ファイルで使用されるモジュールのリストを出力します。-output-raw-be ビッグ エンディアンの RAW 形式で CDO コマンドを出力します。-output-raw-le リトル エンディアンの RAW 形式で CDO コマンドを出力します。-output-source ソース形式 (デフォルト) 形式で CDO コマンドを出力します。-remove-comments 入力からコメントを削除します。-rewrite-block 複数の書き込みコマンドにブロック書き込みコマンドを書き直します。-rewrite-sequential 1 つのブロック書き込みコマンドに順次書き込みコマンドを書き直します。-verbose ログ情報を表示します。

注記: Vivado Design Suite はビッグ エンディアンの RAW 形式で CDO コマンドを生成するので、-output-raw-beをお勧めします。-output-raw-le、-output-binary-be、-output-binary-le はお勧めしません。

アドレス フィルター ファイルアドレス フィルター ファイルは、-address-filter-file <path> で指定します。このファイルは、コンフィギュレーションから削除する必要のあるモジュールを指定するために使用します。アドレス フィルター ファイルは、各行がダッシュ (-) で始まるテキスト ファイルで、すべての初期化を削除するアドレス範囲が指定されます。例:

# Remove configuration of UART0-UART0

デザインで使用されるモジュールのリストは、-output-modules オプションを使用して生成できます。これは、アドレス フィルター ファイルの開始点として使用すると便利です。

例アノテーションなしのバイナリからソースへの変換cdoutil -output-file test.txt test.bin

出力例:

version 2.0write 0xfca50000 0write 0xfca50010 0write 0xfca50018 0x1write 0xfca5001c 0write 0xfca50020 0write 0xfca50024 0xffffffff

第 11 章: CDO ユーティリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 217

Page 218: Bootgen ユーザー ガイド - Xilinx

アノテーションありのバイナリからソースへの変換cdoutil -annotate -output-file test.txt test.bin

出力例:

version 2.0# PCIEA_ATTRIB_0.MISC_CTRL.slverr_enable[0]=0x0write 0xfca50000 0# PCIEA_ATTRIB_0.ISR.{dpll_lock_timeout_err[1]=0x0, addr_decode_err[0]=0x0}write 0xfca50010 0# PCIEA_ATTRIB_0.IER.{dpll_lock_timeout_err[1]=0x0, addr_decode_err[0]=0x1}write 0xfca50018 0x1# PCIEA_ATTRIB_0.IDR.{dpll_lock_timeout_err[1]=0x0, addr_decode_err[0]=0x0}write 0xfca5001c 0# PCIEA_ATTRIB_0.ECO_0.eco_0[31:0]=0x0write 0xfca50020 0# PCIEA_ATTRIB_0.ECO_1.eco_1[31:0]=0xffffffffwrite 0xfca50024 0xffffffff

バイナリ CDO ファイルの編集cdoutil -annotate -output-file test.txt test.binvim text.txtcdoutil -output-binary-be -output-file test-new.bin test.txt

.bif ファイルが test.bin ではなく test-new.bin を使用していることを確認したら、Bootgen を再実行して .pdiファイルを作成します。

ソースのバイナリへの変換cdoutil -output-binary-be -output-file test.bin test.txt

第 11 章: CDO ユーティリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 218

Page 219: Bootgen ユーザー ガイド - Xilinx

第 12 章

Bootgen ユーティリティ注意: このユーティリティは、廃止される予定です。代わりに、bootgen コマンドに -read オプションを使用してください。

bootgen_utility は、Bootgen によって生成されたブート イメージの内容をヒトが読めるログ ファイルにダンプするツールです。これは、ブート イメージのさまざまなヘッダー テーブルの内容をデバッグおよび理解するのに役立ちます。ユーティリティは、次のファイルを出力として生成します。• すべてのヘッダー テーブルのダンプ。• レジスタ init テーブルのダンプ。• 個々のパーティションのダンプ。注記: パーティションが暗号化されている場合、ダンプは暗号化されたパーティションとなり、復号化されたパーティションとはなりません。用途:

bootgen_utility -arch <zynq | zynqmp> -bin <binary input file name> -out <output text file>

例:

bootgen_utility -arch zynqmp -bin boot.bin -out info.txt

サンプルの出力ファイルは、次のようになります。

第 12 章: Bootgen ユーティリティ

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 219

Page 221: Bootgen ユーザー ガイド - Xilinx

付録 A

その他のリソースおよび法的通知

Documentation Navigator およびデザイン ハブザイリンクス Documentation Navigator (DocNav) では、ザイリンクスの資料、ビデオ、サポート リソースにアクセスでき、特定の情報を取得するためにフィルター機能や検索機能を利用できます。DocNav を開くには、次のいずれかを実行します。• Vivado® IDE で [Help] → [Documentation and Tutorials] をクリックします。• Windows で [スタート] → [すべてのプログラム ] → [Xilinx Design Tools] → [DocNav] をクリックします。• Linux コマンド プロンプトに「docnav」と入力します。ザイリンクス デザイン ハブには、資料やビデオへのリンクがデザイン タスクおよびトピックごとにまとめられており、これらを参照することでキー コンセプトを学び、よくある質問 (FAQ) を参考に問題を解決できます。デザイン ハブにアクセスするには、次のいずれかを実行します。• DocNav で [Design Hub View] タブをクリックします。• ザイリンクス ウェブサイトでデザイン ハブ ページを参照します。注記: DocNav の詳細は、ザイリンクス ウェブサイトの Documentation Navigator ページを参照してください。DocNav からは、日本語版は参照できません。ウェブサイトのデザイン ハブ ページをご利用ください。

ザイリンクス リソースアンサー、資料、ダウンロード、フォーラムなどのサポート リソースは、ザイリンクス サポート サイトを参照してください。

その他のリソースBootgen の資料およびリソース次に示すドキュメントは、Bootgen プロセスをサポートするプロセスに関する補足情報を提供します。• Zynq®-7000 SoC:

○ 『Zynq-7000 SoC ソフトウェア開発者向けガイド』 (UG821: 英語版、日本語版)

付録 A: その他のリソースおよび法的通知

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 221

Page 222: Bootgen ユーザー ガイド - Xilinx

○ 『Zynq-7000 SoC テクニカル リファレンス マニュアル』 (UG585: 英語版、日本語版)

• Zynq® UltraScale+™ MPSoC:

○ 『Zynq UltraScale+ MPSoC: ソフトウェア開発者向けガイド』 (UG1137)

○ 『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版、日本語版)

○ 『Versal ACAP テクニカル リファレンス マニュアル』 (AM011)

○ ザイリンクス Zynq UltraScale+ MPSoC ソリューション センター: http://www.wiki.xilinx.com/Solution+ZynqMP+PL+Programming

Bootgen のその他の資料およびリソース• 『Vivado Design Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973)

• 『Zynq-7000 SoC のセキュア ブート スタートアップ ガイド』 (UG1025)

• 『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) のエンベデッド ソフトウェア開発フローのザイリンクス ソフトウェア コマンド ライン ツール

• 『Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル』 (UG1209: 英語版、日本語版)

• 『Zynq-7000 SoC のセキュア ブート』 (XAPP1175)

• 『Zynq-7000 SoC システム メモリのラン タイム インテグリティと認証チェック』 (XAPP1225)

• 『BBRAM および eFUSE のプログラミング』 (XAPP1319)

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には「貴殿」、法人その他の団体の場合には「貴社」。以下同じ) に開示される情報 (以下「本情報」といいます) は、ザイリンクスの製品を選択および使用することのためにのみ提供されます。適用される法律が許容する最大限の範囲で、(1) 本情報は「現状有姿」、およびすべて受領者の責任で (with all faults) という状態で提供され、ザイリンクスは、本通知をもって、明示、黙示、法定を問わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する) ものとします。また、(2) ザイリンクスは、本情報 (貴殿または貴社による本情報の使用を含む) に関係し、起因し、関連する、いかなる種類・性質の損失または損害についても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる責任の法理によるかを問わない) ものとし、当該損失または損害には、直接、間接、特別、付随的、結果的な損失または損害 (第三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる種類の損失や損害を含みます) が含まれるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性について助言を受けていた場合であったとしても同様です。ザイリンクスは、本情報に含まれるいかなる誤りも訂正する義務を負わず、本情報または製品仕様のアップデートを貴殿または貴社に知らせる義務も負いません。事前の書面による同意のない限り、貴殿または貴社は本情報を再生産、変更、頒布、または公に展示してはなりません。一定の製品は、ザイリンクスの限定的保証の諸条件に従うこととなるので、https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。IP コアは、ザイリンクスが貴殿または貴社に付与したライセンスに含まれる保証と補助的条件に従うことになります。ザイリンクスの製品は、フェイルセーフとして、または、フェイルセーフの動作を要求するアプリケーションに使用するために、設計されたり意図されたりしていません。そのような重大なアプリケーションにザイリンクスの製品を使用する場合のリスクと責任は、貴殿または貴社が単独で負うものです。https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。

付録 A: その他のリソースおよび法的通知

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 222

Page 223: Bootgen ユーザー ガイド - Xilinx

自動車用のアプリケーションの免責条項オートモーティブ製品 (製品番号に「XA」が含まれる) は、ISO 26262 自動車用機能安全規格に従った安全コンセプトまたは余剰性の機能 (「セーフティ設計」) がない限り、エアバッグの展開における使用または車両の制御に影響するアプリケーション (「セーフティ アプリケーション」) における使用は保証されていません。顧客は、製品を組み込むすべてのシステムについて、その使用前または提供前に安全を目的として十分なテストを行うものとします。セーフティ設計なしにセーフティ アプリケーションで製品を使用するリスクはすべて顧客が負い、製品の責任の制限を規定する適用法令および規則にのみ従うものとします。

商標© Copyright 2019-2020 Xilinx, Inc. Xilinx、Xilinx のロゴ、Alveo、Artix、Kintex、Spartan、Versal、Virtex、Vivado、Zynq、およびこの文書に含まれるその他の指定されたブランドは、米国およびその他各国のザイリンクス社の商標です。 OpenCL および OpenCL のロゴは Apple Inc. の商標であり、Khronos による許可を受けて使用されています。PCI、PCIe、および PCI Express は PCI-SIG の商標であり、ライセンスに基づいて使用されています。 AMBA、AMBADesigner、Arm、ARM1176JZ-S、CoreSight、Cortex、PrimeCell、Mali、および MPCore は、EU およびその他各国のArm Limited の商標です。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィードバック送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。

付録 A: その他のリソースおよび法的通知

UG1283 (v2020.2) 2020 年 12 月 15 日 japan.xilinx.comBootgen ユーザー ガイド 223