2380426_ja-JP

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

2380426_ja-JP

2380426_ja-JP

Zephyr 3.5.0環境下で、i.MX RT1020のMCUbootイメージのスワップが再起動時にサイレントエラーで失敗する。(FlexSPI/RAMFUNCの問題)
私は、 Zephyr RTOSバージョン3.5.0 が動作する MIMXRT1020-EVK ボード上で、 MCUboot MCUmgr/SMP UDPトランスポートスタック を使用して、マルチイメージOTAファームウェアアップデートパイプラインを実装しています。Sysbuild経由。
ネットワーク接続、アップロード、状態書き込みの各セグメントは問題なく動作しているにもかかわらず、 MCUbootは再起動時にイメージスワップ操作を完全にスキップ/拒否し、目に見えるエラーログを表示することなく、古いスロット0のイメージにそのまま戻ってしまう。
私はIntercreateのsmpmgrスクリプトを使用して、UDP経由で署名付きアプリケーションアップデートを送信しています。OSリセットをトリガーする直前のフラッシュテーブルのスナップショットクエリは、セカンダリスロットが適切に有効化され、フラグが付けられていることを示しています。

ImageState( slot=0, version='1.0.0', hash=HashBytes('00ECFDFD...'), bootable=True, pending=False, confirmed=True, active=True, permanent=False )

ImageState( slot=1, version='1.0.0', hash=HashBytes('2FD1F2FC...'), bootable=True, pending=True, confirmed=False, active=False, permanent=True )

リモートリセットコマンドを実行すると、ボードは正常にシステム再起動をトリガーしますが、MCUbootはセクターシャッフリングや遅延処理を実行しません。スロット 0 のまったく同じ HashBytes 00ECFDFD... に即座に起動します。

Flashレイアウト設定(.overlay)

&flexspi {
ステータス = "正常";
reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(8)>;

is25wp064: is25wp064@0 {
compatible = "nxp,imx-flexspi-nor";
サイズ = <67108864>;
reg = <0>;
spi-max-frequency = <133000000>;
ステータス = "正常";
jedec-id = [9d 70 17];
消去ブロックサイズ = <4096>;
書き込みブロックサイズ = <1>;

パーティション {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

/* ステップ 1: ベースボード dts から競合するすべてのストックパーティションを削除します */
/delete-node/ partition@0;
/delete-node/ partition@10000;
/delete-node/ partition@310000;
/delete-node/ partition@610000;
/delete-node/ partition@630000;

ブートパーティション: パーティション@0 {
ラベル = "mcuboot";
reg = <0x00000000 DT_SIZE_K(64)>;
};
/* slot0 のサイズを 3.5MB から 3.4MB (0x366000) に縮小しました */
slot0_partition: partition@10000 {
ラベル = "image-0";
reg = <0x00010000 0x366000>; /* 3.5MB */
};
slot1_partition: partition@390000 {
ラベル = "画像-1";
reg = <0x00376000 0x366000>; /* 3.5MB */
};
スクラッチパーティション: パーティション@710000 {
ラベル = "image-scratch";
reg = <0x00710000 DT_SIZE_K(128)>;
};
ストレージパーティション: パーティション@730000 {
ラベル = "ストレージ";
reg = <0x00730000 DT_SIZE_K(832)>;
};
};
};
};

app/prj.conf
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_XIP=y
CONFIG_MCUBOOT_BOOTLOADER_MODE_SWAP_WITHOUT_SCRATCH=y
CONFIG_USE_DT_CODE_PARTITION=y

app/sysbuild/mcuboot.conf

CONFIG_XIP=y
CONFIG_BOOT_SWAP_USING_MOVE=y
CONFIG_BOOT_SIGNATURE_TYPE_RSA=y
CONFIG_BOOT_SIGNATURE_KEY_FILE="bootloader/mcuboot/root-rsa-2048.pem"
CONFIG_BOOT_VALIDATE_SLOT0=y

# Zephyr 3.5.0 用の RAM 機能分離フラグの試行
CONFIG_FLEXSPI_CONFIG_IN_RAM=y

NXP FlexSPIドライバがフラッシュチャネルからコマンドを実行する際に、フラッシュブロックへの書き込みや消去を安全に行えないという実行インプレース(XIP)制約に引っかかっている可能性があり、その結果、MCUbootがシステムを保護するために起動時にトランザクションを安全に破棄していると考えられます。
しかし、最新のNXP RAM機能フラグ(CONFIG_CODE_FLEXSPI_RAMFUNCやCONFIG_MCUX_CODE_QUICK_ACCESS_RAMFUNCなど)のいくつかは、「未定義シンボル」コンパイラ例外または依存関係警告をスローします。



  • Zephyr 3.5.0では、MCUboot子イメージコンテキストにおいて、すべてのフラッシュドライバ操作フックを内部SRAM(ITCM/SRAM)に安全に強制的に移行させるために必要なKconfig変数は具体的に何ですか?
  • RT1020固有の隠れたハードウェアアライメント制限、FlexSPIルックアップテーブル(LUT)構成、または書き込みブロックサイズによって、MCUbootがパーマネント=Trueとマークされたセカンダリイメージスロットをサイレントにスキップしてしまうことはありますか?
Re: i.MX RT1020 MCUboot image swap failing silently on reboot under Zephyr 3.5.0 (FlexSPI/RAMFUNC is

こんにちは、 @Deepa-khatri2588 さん

NXP MIMXRTシリーズにご関心をお寄せいただきありがとうございます!

KConfigファイルとDTSファイルを確認しましたが、いくつか問題があるようです。例えば、`CONFIG_FLEXSPI_CONFIG_IN_RAM` と `CONFIG_CODE_FLEXSPI_RAMFUNC` は Zephyr 3.5.0 には存在しません。

KConfigの設定については、こちらの公式ドキュメントをご確認ください。

https://docs.zephyrproject.org/3.5.0/kconfig.html

以下のKConfig設定に注意することをお勧めします。

CONFIG_CODE_FLEXSPI=y
CONFIG_XIP=y

CONFIG_FLASH_MCUX_FLEXSPI_XIP=y

CONFIG_FLASH_MCUX_FLEXSPI_XIP_MEM_ITCM=y

CONFIG_FLASH_MCUX_FLEXSPI_NOR_WRITE_BUFFER=y

CONFIG_FLASH_LOG_LEVEL_OFF=y
CONFIG_MEMC_LOG_LEVEL_OFF=y

CONFIG_MEMC=y

DTSでは、ノードIDとオフセットアドレスが一致しないという問題があり、これも確認する必要があるかもしれません。

slot1_partition: partition@390000 {

 ラベル = "画像-1";

reg = < 0x00376000 0x366000>;

 };


よろしくお願いします、
ギャビン


タグ(1)
評価なし
バージョン履歴
最終更新日:
金曜日
更新者: