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] に出力パスを指定します。
成します。
デフォルトでは、出力ファイルのパスは選択したアプリケーション プロジェクトの /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
arch <type> ザイリンクス デバイス アーキテクチャ: オプションは 次のとおりです。
zynq (デフォルト) zynqmp
fpga versal
すべて
bif_help BIF ヘルプ サマリをプリントアウトします。
すべて dual_qspi_mode <configuration> Dual QSPI コンフィギュレーションの場合は 2 つの出
力ファイルを生成します。
parallel stacked <size>
zynq zynqmp versal
dual_ospi_mode stacked <size> スタックド コンフィギュレーションの場合は 2 つの出
力ファイルを生成します。 versal
dump <options> オプションを指定するたびにパーティションまたはブ
ート ヘッダーをダンプします。
empty: パーティションをバイナリ ファイルとして ダンプします。
bh: ブート ヘッダーをバイナリ ファイルとしてダ ンプします。
plm: PLM をバイナリ ファイルとしてダンプしま す。
pmc_cdo: PMC CDO をバイナリ ファイルとしてダ ンプします。
boot_files: ブート ヘッダー、PLM、および PMC CDO を 3 つのバイナリ ファイルとしてダンプしま す。
versal
dump_dir 指定したディレクトリのコンポーネントをダンプしま
す。 versal
efuseppkbits <PPK_filename> eFUSE 用の PPK ハッシュを生成します。
zynq zynqmp versal
encrypt <options> デバイス内での AES キーの格納場所。オプションは次
のとおりです。
bbram (デフォルト) eFuse
zynq fpga
encryption_dump 暗号ログ ファイル aes_log.txt を生成します。
zynqmp versal
fill <hex_byte> パディング用に使用するバイトを指定します。
zynq zynqmp versal
generate_hashes パディングされたハッシュを含むファイルを生成しま
す。
Zynq デバイス: PKCS#1v1.5 パディング スキームを 使用した SHA-2
Zynq UltraScale+ MPSoC: PKCS#1v1.5 パディング スキームを使用した SHA-3
Versal ACAP: PSS パディング スキームを使用した SHA-3
zynq zynqmp versal
generate_keys <key_type> 認証キーを生成します。オプションは次のとおりです。
pem rsa
obfuscatedkey
zynq zynqmp
h、help ヘルプ サマリをプリントアウトします。
すべて image <filename(.bif)> ブート イメージ フォーマット (.bif) ファイルを指定
します。 すべて
log<level_type> 現在の作業ディレクトリに次のメッセージ タイプのロ
グ ファイルを生成します。
error
warning (デフォルト) info
debug trace
すべて
nonbooting 中間のブート イメージを作成します。
zynq zynqmp
o <filename> 出力ファイルを指定します。ファイル フォーマットは、
ファイル名の拡張子によって決まります。有効な拡張 子は次のとおりです。
.bin (デフォルト) .mcs
.pdi
すべて
p <partname> 暗号化キーの生成に使用するパーツ名を指定します。
すべて
padimageheader <option> イメージ ヘッダーをパディングして、続くパーティショ ンを強制的に揃えます。オプションは次のとおりです。
0
1 (デフォルト)
zynq zynqmp
process_bitstream <option> ビットストリームを .bin または .mcs ファイルのいず れで処理および出力するかを指定します。
たとえば BIF ファイルのビットストリームに暗号化 を選択した場合、出力は暗号化されたビットストリ ームとなります。
zynq zynqmp
read <options> オプションに基づいて、ブート ヘッダー、イメージ ヘ
ッダー、およびパーティション ヘッダーを読み出すのに 使用されます。
bh: bootimage からブート ヘッダーを人間が読め る形式で読み出します。
iht: bootimage からイメージ ヘッダー テーブルを 読み出します。
ih: bootimage からイメージ ヘッダーを読み出しま す。
pht: bootimage からパーティション ヘッダーを読 み出します。
ac: bootimage から認証証明を読み出します。
zynq zynqmp versal
authenticatedjtag <options> セキュア ブート中に JTAG をイネーブルにします。引数 は次のとおりです。
rsa ecdsa
versal
split <options> ブート イメージをパーティションに分割し、ファイル
を .bin または .mcs として出力します。
• ブート ヘッダー + イメージ ヘッダー + パーティシ ョン ヘッダー + Fsbl.elf
• Partition1.bit
• Partition2.elf
zynq zynqmp versal
spksignature <filename> SPK 署名ファイルを生成します。
zynq zynqmp
verify このオプションは、ブート イメージの認証を検証するた
めに使用します。ブート イメージ内の認証証明がすべ
て使用可能なパーティションに対して検証されます。 zynq zynqmp
verify_kdf このオプションは、AES キーを生成するために Bootgen
で使用される Counter Mode KDF を検証するために使
用します。 zynqmp
versal
w <option> 出力ファイルを上書きするかどうかを指定します。
on (デフォルト) off
注記: -w にオプションを指定しない場合は、–w on とし て解釈されます。
すべて
zynqmpes1 ES1 (1.0) 用のブート イメージを生成します。デフォル
トのパディング方式は ES2 (2.0) です。 zynqmp
BIF 属性の詳細は、ヘルプを参照してください。
ブート時のセキュリティ
ザイリンクスでは、最新の認証方法を使用して、すべてのデバイスのセキュアなブートをサポートし 、ザイリンクス デバイス上で認証されていないコードまたは変更されたコードが実行されないようにしています。ザイリンクスで は、認証されたプログラムのみがイメージにアクセスするよう、さまざまな暗号化技術をサポートしています。デバ イスごとのハードウェア セキュリティ機能の詳細は、次の各セクションを参照してください。
Zynq-7000 SoC デバイスのセキュア モードおよび非セキュア モード
セキュリティ上の理由により、PS の全マスターモジュールの中で CPU 0 が最初にリセット状態を終了します。CPU 1 は 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 デバイスでは、ハードウェア ルート オブ トラストのブート メカニズムを使用してセキ
ュア ブートが実行されます。これにより、すべてのブート ファイルまたはコンフィギュレーション ファイルも暗号 化されます。このアーキテクチャは、アプリケーションの安全性を最大限に確保するために必要な機密性、完全性、
および認証を提供します。