インテルのみ表示可能 — GUID: sfo1410070158979
Ixiasoft
1.2.2.1. ブートROMフロー
コールド・リセットでは、HPSブート・プロセスはCPU0がリセット(たとえば起動時)からリリースされると開始し、リセット例外アドレス0x00000000で内部ブートROMのコードを実行します。 ブートROMコードによってSoCはリセットから脱け出し、既知の状態となります。ブートROMコード完了後、コントロールは第2ステージ・ブートローダと呼ばれるブート・ソフトウェアの次のステージへと移ります。第2ステージ・ブートローダはカスタム化が可能で、通常はHPS外部の不揮発性フラッシュ・ベースのメモリかFPGA内のオンチップRAMに保存されます。第2ステージ・ブートローダは、OS、ベアメタル・アプリケーションにロードすることが可能です。またはサード・パーティ製のブートローダにロードすることも可能です。
この項では、ブートROMコードがソフトウェア・コントロールを第2ステージ・ブートローダに渡すまでのリセットからのソフトウェア・フローについて説明します。
コードが開始するとシステムが初期化されますが、要求されるブートの種類によってはオンチップRAMにコードのロードを試みることも可能です。ロードが成功すれば、第2ステージ・ブートローダ・コードが実行されます。ブートROMがコードの検索できない場合、あるいは3度連続してロードに失敗した場合、スピンしウォッチドッグ・リセットを待ちます。
ブートROMは常にCPU0で実行します。CPU1はメイン・ブートROMコードの実行中は常にリセットで保持され、システム・ソフトウェアによってのみリリースされます。
ブートの種類を判断する一環として、ブートROMは下位レベルのブート・フローを実行します。ブートROMコードは第2ステージ・ブートのソースが強制的にFPGAとなるかどうかを判断するためにセキュリティ・ヒューズを読み込みます。非認証のFPGAブートあるいは非CRCオンチップRAMブートが要求される場合やブートが無効の場合、ブートは下位レベルのブート・フロー内で処理されます。その他の種類のブートはすべて上位レベルのブート・フロー内で処理されます。
下位レベル部分のブートROMフローの間、FPGAのみのブートが必要であるかを判断するためにブートROMはセキュリティ・ヒューズを読み込みます。この場合、ブートROMはPOFの認証を示すヒューズが必要であるかも決定する必要があります。認証が必要でなければ、標準のFPGAコンフィギュレーションが実行されます。
FPGAのみのブートが必要とされない場合、ブートROMはオンチップRAMブートが可能であるかをチェックします。可能である場合、ブートROMはコードが有効であるかを確認します。コードが有効でなければ、ブートROMはFPGAブートを示しているかを決定するためにBSELピンをリードします。
ブート・イメージに対し認証が必要であることをセキュア・ヒューズが示すのであれば、(Cコードで実行される)上位レベルのブートを実行する必要があります。
ブート・プロセス中、ブート・イメージで認証と復号を実行することが可能です。認証は復号から独立していますが、認証と復号の両方が必要とされるのであれば、必ず認証が先に実行されます。認証ブートが必要な場合、ブートROMには認証プロセスを開始するにあたってルート・キーが必要です。このキーはユーザ・ヒューズやFPGAロジック・エレメントに実装したり、あるいは第2ステージ・ブート・イメージ・ヘッダの一部として実装したりすることが可能です。デバイス・コンフィギュレーション・ヒューズはキーのソースを決定します。
ウォームRAMブートが成功しない、あるいはコールド・リセットが発生する場合は、ブートROMはシステム・マネージャのbootinfoレジスタ内のBSEL値を読み込みます。FPGAがブート・ソースとして選択されているのであれば、ブートROMコードはHPS-FPGA間のブリッジのアドレス0xC0000000でコードの実行を試みます。FPGAが正しく初期化されず、ウォッチドッグがタイムアウトに向けてイネーブルされない場合、エラー条件は生成されません。代わりに、ブートROMはFPGAが利用可能となるまで継続して待機します。
BSELビットが外部フラッシュからのブートを示すのであれば、ブートROMコードはフラッシュ・デバイスからオンチップRAMへのイメージのロード、検証と実行を試みます。BSELが無効であったり、ブートROMコードが有効なイメージをフラッシュ内に見つけられない場合は、ブートROMコードはFPGA内にフォールバックが存在するかどうかをチェックします。存在する場合はブートROMはそのフォールバック・イメージを実行し、存在しない場合はブートROMはオンチップRAMへ情報の事後分析ダンプを実行し、リセットを待ちます。
ブートROMコードは破損したイメージが実行されることがないよう、いくつかの方法で第2ステージ・ブートローダを検証します。最初はイメージ・ヘッダを検証しますが、これはブロックを保護するイメージのCRC、マジック・ナンバー、バージョン、ブロック長を特定します。いずれかが無効であれば、エラーが発生します。