2353156_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2353156_ja-JP

2353156_ja-JP

SEC/CAAMが初期化されていないため、BL2でセキュアブートが失敗します。

secure_boot_test.png

BL2でセキュアブートが失敗しているのは、SEC/CAAMが初期化されていないためと思われます。コードを詳しく調べてみると、sec_init は直接呼び出されず、その前に config 関数が呼び出されているようで、そのためグローバル変数に SEC ブロックのアドレスに対応する定義済みの定数が代入されないようです。つまり、NXP_CAAM_ADDRの値のことです。その値をハードコーディングすると、処理は少し進むのですが、ジョブリングをフラッシュ/リセットできないというエラーが発生します。

QorIQ LS1デバイスRe: Secure boot fails in BL2 because SEC/CAAM not initialized

電源投入後、SRKHミラーレジスタをロードしてCPUを解放する前に、DCFG_CCSR_DEVDISR1レジスタを確認すると、ビット22(SEC)が1に設定されていることがわかります。リセットに関するドキュメントによると、このレジスタはすべて0になっているはずです。ブートプロセスのこんなに早い段階で、この値がどこで設定されているのでしょうか?pblコマンドで何か操作する必要はありますか?RCW(ワシントン州法)に何か誤りがあるのでしょうか?低電力セキュリティレジスタで電源障害が検出されていることは確認できますが、構成レジスタでは低電力改ざんは無視/対処しないよう指示されていることも確認できます。

Re: Secure boot fails in BL2 because SEC/CAAM not initialized

こんにちは、

BL2におけるこのセキュアブートの失敗は、特にNXP Layerscapeまたはi.MXプラットフォームにおいて、TF-A(Trusted Firmware-A)の初期化フローにおける典型的な「鶏と卵」問題です。
NXP_CAAM_ADDRハードコーディングしてアドレスエラーを回避できたとしても、ジョブリングのフラッシュ/リセットエラーが発生する場合は、通常、CAAMハードウェアブロックにクロック信号が供給されていないか、遷移状態のままになっているか、セキュリティ違反によってブロックされていることを意味します。
 
1.初期化シーケンス
sec_init設定関数より先に呼び出されない理由は、おそらくbl2_main.cの実行順序によるものです。または、お使いのプラットフォーム固有のplat_bl2_el3_setup.c参照してください。
  • 修正: bl2_el3_early_platform_setup 内で plat_ls_sec_init() (またはご使用の SoC の同等の関数) が呼び出されていることを確認してください。
  • グローバル変数に関する問題: NXP_CAAM_ADDRが設定されない場合は、プラットフォームのplat_get_caam_address()関数が 0 を返しているか、データセグメントが BL2 変換テーブルに正しくマッピングされていないかを確認してください。
 
2. ジョブリングフラッシュが失敗する理由
コードがジョブリングのフラッシュを試みているが失敗している場合、次の3つの原因が考えられます。
  • セキュリティ違反(最も可能性の高いもの):SoCが「クローズド」モード(フューズ済み)の場合、CAAMがBootROMからBL2への移行中にセキュリティ違反を引き起こした可能性があります。セキュリティ違反が発生すると、CAAMは「停止」状態になり、違反が解消されるまでジョブリングのリセットや使用ができなくなります。
  • クロック/電源の欠落: BL2 中に DCFG (デバイス構成) または PCC (周辺クロック制御) で SEC ブロッククロックゲートが明示的に有効になっていない場合、レジスタにはアクセスできます (運が良ければ) が、内部ロジック (ジョブリングコントローラなど) はリセットコマンドに応答しません。
  • マスターID(MID)の不一致:ジョブリングは、BL2(EL3で実行)がそれらを「所有」できるようにするために、特定のマスターID構成を必要とします。BootROMがリングを別のMIDに割り当てて解放しなかった場合、BL2はリングをリセットしようとしてタイムアウトします。
 
3. デバッグ手順
  1. SEC_VID(バージョンID)レジスタとSEC_STA(ステータス)レジスタを確認してください。これらのレジスタは、ジョブリングのリセット呼び出しの直前に読み取ります。ステータスレジスタにセキュリティ違反が表示された場合は、その原因(通常は前の段階での認証失敗)を特定する必要があります。
  2. リセットビットの確認:リセットビットを切り替えた後、十分な時間待機していることを確認してください。一部のシリコンリビジョンでは、CAAMのリセットにSDKで提供されている標準の遅延ループよりも長い時間がかかります。
  3. TrustZoneの設定を確認してください。アクセスしているジョブリングが、セントラルセキュリティユニット(CSU)またはリソースドメインコントローラー(RDC)で「セキュア」としてマークされていることを確認してください。

よろしくお願いします。

Re: Secure boot fails in BL2 because SEC/CAAM not initialized

どなたか、私に確認していただけると助かります。
TF-A ドライバ / nxp/dcfg/dcfg.cセキュリティが有効になっているかどうかを確認する計算式を見つけました。これは、SVR_SEC_MASKとレジスタ0x1ee00a4の値(読み取り専用レジスタ)との間でビットごとの&演算を実行します。フィールドを正しく読み取っているとすれば、ビット16~23は、それがls1043かls1023か、そしてSECハードウェアが有効になっているかどうかを示しているはずです。0x00000001 のビットに値があることがわかります。つまり、このチップではSECブロックが無効になっているということですよね?回路図を参照して部品番号を確認したところ、LS1043ASN7MNLBという番号が分かりました。NXPのサイトで調べてみると、SECは無効になっていると表示されました。これがセキュアブートの問題の原因でしょうか?このチップでSECを有効にすることは可能ですか?それともNXPから出荷された時点で設定は変更できないのでしょうか?別のチップを検討する必要があるのでしょうか?それともSECなしでセキュアブートは可能でしょうか?

Re: Secure boot fails in BL2 because SEC/CAAM not initialized

AIによるコピー&ペースト機能?その方法を採用するなら、エージェントをさらに調整する必要がある。SoCは仕様が定められており、コードベースを認識していれば、NXP_CAAM_ADDRがヘッダーファイルで静的に定義されており、初期値として設定されていないことを認識しているはずです。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎04-28-2026 03:44 AM
更新者: