2291158_ja-JP

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

2291158_ja-JP

2291158_ja-JP

RW612 MCUBoot + TF-M が起動しない
こんにちは、
TF-M + MCUBoot の例を使用して、FRDM-RW612 に非常によく似たカスタム ボード セットアップをフラッシュする際に問題が発生しています。
nxp-zephyr リポジトリの最新バージョン (v4.3.0) では、チュートリアルの一部のファイルが変更されているようです。できる限り従おうとしましたが、ボードがまだ正しく起動しません。
MCUBoot ブートローダーだけをフラッシュすると、予想どおりの出力エラー「起動可能なイメージが見つかりません」が表示されます。ガイドの指示に従って PSA 暗号サンプルをフラッシュすると、ターミナルに何も出力されず、MCUBoot テキストも表示されなくなります。端末の問題だけの場合に備えて、点滅サンプルでもテストしましたが、そのCASEはボードの LED も点滅しません。

これらのサンプルは両方とも、MCUBoot なしで TF-M だけをフラッシュすると起動して実行されます ( west build -b frdm_rw612//ns samples/basic/blinky --pristine && west flash )。
このCASE、私は奇妙な癖にも気づきました。ペリフェラルとしてflexcomm3を使用する必要があるため、Zephyrコンソールを別の出力に切り替えたいと考えました。デバイス ツリーを編集すると、さまざまな問題が発生します。
 
1. zephyrコンソールをFlexcomm3からFlexcomm2に切り替える
boards/nxp/frdm_rw612/frdm_rw612_common.dtsi に次の編集を加えました。
  • i2c-0エイリアスを削除しました
  • ambient-temp0 エイリアスを削除しました
  • chose/zephyr,console を &flexcomm2 に置き換えました
  • flexcomm2 ノードを追加しました:
&flexcomm2 {
	compatible = "nxp,lpc-usart";
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_flexcomm2_usart>;
	pinctrl-names = "default";
	wakeup-source;
};
  • nxp_pmod_touch_panel_i2c、arduino_i2c、mikrobus_i2cノードを削除しました

そして、 boards/nxp/frdm_rw612/frdm_rw612-pinctrl.dtsi に flexcomm2 pinctrl を追加しました:

&pinctrl {
	pinmux_flexcomm2_usart: pinmux_flexcomm2_usart {
		group0 {
			pinmux = ;
			slew-rate = "normal";
			bias-pull-up;
		};
	};
};

そしてその後、FC3 をコンソールとして使用したときに動作したのとまったく同じ点滅コードをフラッシュすると、FC3 でブートローダーの出力が表示されます (下記)。ただし、FC2 では何も出力されず、LED も点滅しません。

[INF] Starting bootloader
[WRN] This device was provisioned with dummy keys. This device is NOT SECURE
[INF] PSA Crypto init done, sig_type: EC-P256, using builtin keys
[INF] Image index: 1, Swap type: none
[INF] Image index: 0, Swap type: none
[INF] Bootloader chainload address offset: 0x20000
[INF] Image version: v0.0.0
[INF] Jumping to the first image slot
Booting TF-M v2.2.0+g3b3595f16
[WRN] This device was provisioned with dummy keys. This device is NOT SECURE
[Sec Thread] Secure image initializing!
[INF][PS] Encryption alg: 0x5500100
[INF][Crypto] Provision entropy seed...
[INF][Crypto] Provision entropy seed... complete.

2. ZephyrコンソールをFlexcomm3からFlexcomm14に切り替える

  • chose/zephyr,console を &flexcomm14 に置き換えました
  • flexcomm14 ノードを追加しました:
  •  
&flexcomm14 {
	compatible = "nxp,lpc-usart";
	status = "disabled";
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_flexcomm14_usart>;
	pinctrl-names = "default";
	wakeup-source;
};

そして、 boards/nxp/frdm_rw612/frdm_rw612-pinctrl.dtsiにflexcomm14 pinctrlを追加しました:

&pinctrl {
	pinmux_flexcomm14_usart: pinmux_flexcomm14_usart {
		group0 {
			pinmux = ;
			slew-rate = "normal";
		};
	};
};

これらの編集により、FC3 または FC14 に出力が表示されなくなり、LED もまったく点滅しなくなりました。


TF-M + MCUBoot で発生している問題が TF-M のみのコンソール出力の問題に関連しているかどうかはわかりませんが、念のためそれを含めておこうと思いました。私の最終目標は、起動後にファームウェアのアップデートを実行できるように MCUBoot と TF-M を用意することです。また、ペリフェラルとして Flexcomm3 を使用する必要があるため、FRDM-RW612 が使用するものとは異なるコンソール出力が必要です。

また、TF-M も MCUBoot も使用していない場合でも、ボードをフラッシュして FC14 でコンソールに印刷できることにも注意してください。これらのサブシステムを有効にした後でのみ、フラッシュ/ブートに関する問題が発生しました。


どのようなご助力も大歓迎です、ありがとうございます!

Re: RW612 MCUBoot + TF-M Not Booting
proj.conf をいろいろ試してみたところ、問題はフラッシュ サブシステムに関連するものであることがわかりました。
現在、TF-M なしで MCUBoot をテストしていますが、実行されるアプリと行Iで停止するアプリの違いは、最初のイメージ スロットにジャンプすることが、次の KConfig オプションの 1 つ以上であることです
 
CONFIG_FLASH_FILL_BUFFER_SIZE=32
CONFIG_FLASH=y
CONFIG_FLASH_MCUX_FLEXSPI_XIP_MEM="RAM"
CONFIG_FLASH_INIT_PRIORITY=50
CONFIG_FLASH_HAS_DRIVER_ENABLED=y
CONFIG_FLASH_HAS_EXPLICIT_ERASE=y
CONFIG_FLASH_HAS_PAGE_LAYOUT=y
CONFIG_FLASH_JESD216=y
CONFIG_FLASH_MCUX_FLEXSPI_NOR=y
CONFIG_MEMC_MCUX_FLEXSPI=y

MCUBoot と NXP のフラッシュ ファイルを調べてきましたが、正しい方向に進んでいるかどうかわかりません。次の行のようになります:

(( void ( * )( void )) vt ->リセット)();

MCUBoot の Zephyr main.c の do_boot() 関数は、GDB でデバッグできる最後の場所です。そのリセット「関数」が呼び出された後、PC は 0x20005840 にあり、続行/ステップ実行では何も行われず、プログラムはハングするだけです。
 

繰り返しになりますが、この問題をデバッグするにはどこを参照すればよいかという助言やヒントがあれば、ぜひ教えてください。ありがとうございます!

Re: RW612 MCUBoot + TF-M Not Booting

こんにちは、リカルドさん。元の投稿が散漫になっていたらごめんなさい。

TF-M + MCUBoot ガイドを最初から完全に開始して、問題点をリストアップすることができました。通常の開発では VSCode 用の MCUXpresso を使用しますが、ガイドでは west コマンドライン ツールを使用しているため、ここでもそれを使用しました。

TF-M + MCUBoot ガイドの問題 (nxp_zephyr タグ nxp-v4.3.0)

- 「セキュア イメージの変更」の手順 6 の「ダウンストリームから TF-M をビルドしてフラッシュする」では、M_BOOT_FLASH_CONF_START は BOOT_FLASH_ACT_APP と同じである必要があると記載されています。リポジトリ内のどこにも BOOT_FLASH_ACT_APP が見つかりませんでした。何に設定されているか確認する方法がわかりません。#define M_BOOT_FLASH_CONF_START (0x18020000)を使用しました

- 「セキュア イメージの変更」の手順 8 では、ガイドでは hardware_init.c の SystemInitHook に VTOR 構成を追加するように指示されていますが、そのコードはすでに存在しているようです。そのままにしておいた。

- 「非セキュア イメージの変更」セクションでは、 nxp_zephyr\Zephyr\build\tfm\api_ns\platform\partitionフォルダー内のファイルを編集するようにガイドで指示されていますが、 nxp_zephyr\Zephyr\build はデフォルトでは存在しません。この時点では、ガイドでは何も構築するように指示されていません。後でアプリをビルドした後、手順 2 ~ 6 のファイルはすでに正しい値に変更されていました。

- 「非セキュア イメージの変更」の手順 7 に、 nxp_zephyr/zsdk/boardsディレクトリがありません。これはnxp_zephyr/Zephyr/boardsであると想定しているので、そのパスで手順 8 に従いました。

- ガイドに従ってnxp_zephyr/zephyr/boards/nxp/frdm_rw612/frdm_rw612_rw612_ns.dtsを編集した後、次のビルド エラーが発生します:必要なノードラベルが見つかりません: slot0_partition 。その編集を行う代わりに、デフォルトのデバイス ツリー ファイルを使用してビルドすると、サンプルはほぼ完全にビルドされますが、最後のステップでエラーが発生します。
トレースバック(最新の呼び出しが最後):
...
intelhex.AddressOverlapError: アドレス 0x18020000 でデータが重複しています
上記の例外の処理中に、別の例外が発生しました:
...
intelhex.AddressOverlapError: /nxp_zephyr/zephyr/build/zephyr/tfm_s_signed.hex にマージの問題があります
私はこのエラーを無視してガイドを続行しました。

- 最後に発生した問題は、手順 3 の「バイナリのマージ」セクションで、 「エラー: このようなコマンド 'merge' はありません」というエラーが発生したことです。私にとっては同様の機能があるように見えたので、merge の代わりに「export」コマンドを使用しました。


これらの調整を行い、ガイドの指示に従ってフラッシュした後でも、次のターミナル出力が得られます。

*** Booting MCUboot v2.2.0-192-g96576b341ee1 ***
*** Using Zephyr OS build nxp-v4.3.0 ***
I: Starting bootloader
I: Image index: 0, Swap type: perm
I: Image index: 0, Swap type: perm
I: Primary image: magic=bad, swap_type=0x0, copy_done=0x2, image_ok=0x2
I: Secondary image: magic=good, swap_type=0x1, copy_done=0x3, image_ok=0x1
I: Boot source: none
I: Image index: 0, Swap type: perm
I: Image index: 0, Swap type: perm
I: Image index: 0, Swap type: perm
I: Image index: 0, Swap type: perm
E: Image in the primary slot is not valid!
E: Unable to find bootable image

ガイドの指示に対して行った調整のいずれかが問題の原因なのか、更新された Zephyr リポジトリのその他の違いなのかはわかりません。ご返信ありがとうございます。

Re: RW612 MCUBoot + TF-M Not Booting

こんにちは、


あなたの調子が良いといいのですが。セットアップの詳細を教えていただけますか?

VSCode で MCUXpresso を使用していますか?

flexcomms に関連するすべての変更を実装する前に、投稿をフォローできるかどうかを明確にしていただけますか?(それぞれのバージョンの変更あり)


よろしくお願いいたします。

リカルド

Re: RW612 MCUBoot + TF-M Not Booting

こんにちは@jm-streametric さん、お元気ですか。

あなたが参照しているガイド ( RW612 を使用した Zephyr MCUboot + TFM デモ) は、4.2.0 より前のバージョンの Zephyr にのみ適用されます。この場合、Zephyr v4.3.0 (NXP のダウンストリーム リポジトリ) の例をビルドしてフラッシュする手順は、FRDM-RW612 の方が簡単です。psa_crypto の例をビルドしてフラッシュするには、以下の手順を参照してください。

  1. リポジトリから例をインポートをクリックします。
  2. NXP のダウンストリーム リポジトリ V4.3.0 を選択します。FRDM-RW612 の TF-M サポートがメインの Zephyr リポジトリに完全には追加されていないため、これは重要です。次に、FRDM-RW612 の非セキュア バージョンを選択します。

RomanVR_0-1770328270240.png

  1. psa_crypto の例を選択し、[インポート] ボタンをクリックします。

RomanVR_1-1770328301685.png

  1. 最後に、サンプルをビルドしてボードにフラッシュします (必要に応じてデバッグ セッションを開くこともできます)。すべてが正しく実行された場合、シリアル端末のログは次の画像のようになります。

RomanVR_2-1770328336393.png

現時点では、この手順はFRDM-RW612 ボードにのみ適用されます。RW612をカスタム ボードで使用しているため、ボードに TF-M サポートを追加するには、必要な変更を確認して行う必要があります。考慮すべき主なポイントは、使用しているフラッシュ デバイスです。したがって、この点に違いがある場合は、より大きなポートを動作させる必要がある場合があります。

Zephyr コンソールに使用される Flexcomm インスタンスの変更で発生した問題に関しては、 boards/nxp/frdm_rw612/frdm_rw612_common.dtsiファイルで直接変更しないでください。この変更はビルド時にデフォルトに書き換えられるため、代わりにfrdm_rw612.overlayファイルを使用して変更を追加してみてください。このオーバーレイは Zephyr のデフォルトのデバイス ツリー ファイルに優先され、変更が維持されます。

情報が役に立つかどうかお知らせください。

Re: RW612 MCUBoot + TF-M Not Bootingこんにちは、ローマン。
ご返信ありがとうございます!あなたの指示に従って、ボード上で作業を行うことができました :)。私のカスタム ボード上のフラッシュ レイアウトは FRDM-RW612 と同じなので、幸いなことにそこで変更する必要はありません。
オーバーレイを追加するのは良い点ですが、以前はそれを試してみようとは思いませんでした。

続いて、TF-M secure + BL2 システムの FlexComm 出力を変更することは可能ですか?ペリフェラルが搭載されているため、デフォルトの Flexcomm3 インターフェイスを使用できません。現在、デバッグ出力を無音にしていますが、BL2 + S ビルドを変更して、たとえば FC3 ではなく FC14 USART に出力できる場所はありますか?

ありがとう!
Re: RW612 MCUBoot + TF-M Not Booting

こんにちは@jm-streametric

Flexcomm に関するご質問について: 現在の実装では、TF-M はUSART3 を使用するように「ハードコード」されています。別の USART インスタンスに切り替える必要がある場合は、次の場所にある TF-M プラットフォーム ファイルを確認して変更します。

/modules/tee/tf-m/trusted-firmware-m/platform/ext/target/nxp/frdmrw612

まず、 platform_base_address.hを確認することをお勧めします。ファイルの場所:

frdmrw612/Device/Include

このファイルは、TF-M で使用される USART インスタンスを含む、プラットフォーム レベルのベース アドレスを定義します。

さらに、同じ TF-M ターゲット ディレクトリ内の project_template フォルダーには、USART の初期構成コードがあります。これらの初期化により、USART3が現在どのように設定されているか、また、別のUSARTインスタンスに切り替えるためにどこに変更を適用するかが明確になります。

この情報がお役に立てれば幸いです!

Re: RW612 MCUBoot + TF-M Not Booting

こんにちは@jm-streametric さん、お元気ですか。

デバイス ツリーで、Flexcomm14 を参照するノードが正しく構成され、アクティブ化されているかどうかを確認してください。次の例のように、ステータス プロパティが「okay」に設定されていることを確認します。

flexcomm14: flexcomm@126000 {
    status = "okay";
};

これが役に立つことを願います!

Re: RW612 MCUBoot + TF-M Not Bootingこんにちは、ローマン。
TF-M システムで使用される USART を切り替えようとしました。すべての定義をtarget/nxp/frdmrw612/project_template/* board.hに切り替えるとおよび pin_mux.cFC3/USART3 -> FC2/USART2 への変更は機能します。

ただし、同じ手順を実行しても、FC14/USART14 に変更すると、BL2 プログラムがハングします。bl2.elf を使って addr2line でハングしているアドレスを実行したところ、プログラムは target/nxp/frdmrw612/Native_Driver/drivers/fsl_reset.c でループしたままになっているようです。51行目。FC14 ペリフェラルのリセットは 67 行目のスイッチ CASE を使用する必要があると思うので、これは正しくないように思えますが、addr2line に問題がある可能性があります。

いずれにしても、TF-M システムを USART14 に印刷するように切り替えた場合、BL2 プログラムがハングし、Zephyr アプリが起動しなくなります。これまでにこの問題を見たことがありますか? また、なぜこの問題が発生するのかの手がかりはありますか?
Re: RW612 MCUBoot + TF-M Not Bootingこんにちは、ローマン。
はい、flexcomm14 ノードを「正常」ステータスに設定しました。私の質問は BL2/Secure Environment のログ記録に関するものです。これら 2 つのバイナリは別々にビルドされるため、zephyr デバイスツリーは適用されないと思いますか?
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎02-27-2026 04:26 AM
更新者: