こんにちは、NXP チームの皆様、
私はKW47のデュアルイメージブート/OTAアップデートのコンセプトに取り組んでおり、 ROMブートローダーがブート時に最新のイメージを選択する仕組みを明確にしたいと考えています。
私の理解では、デュアルイメージ構成では、内部フラッシュに2つの有効なアプリケーションイメージが存在する可能性があります。例えば、次のようになります。
プライマリイメージ-> ROMCFG / IFR0 のブートイメージベースアドレスによって構成されたアドレス
セカンダリイメージ-> ROMCFG / IFR0 の FLW 領域 / ABASE で設定されたアドレス
リセット時、ROMブートローダーは両方のイメージをチェックし、どちらを起動するかを決定します。
私の疑問は主にこの点についてです。
KW47 ROMブートローダーは、どちらのイメージが新しいかをどのように判断するのですか?
こんにちは、お元気でお過ごしでしょうか!
デュアルイメージ構成では、イメージはプライマリ(実験用または最新のファームウェアイメージ)とセカンダリ(バックアップ用フォールバックイメージ)として扱われます。
KW47 ROMブートローダーは、各イメージのメタデータにあるfirmwareVersionフィールドを使用してより新しいイメージを判断し、より新しいバージョンのイメージを起動します。両方のバージョンが同じ場合、ブートイメージのベースアドレスがブートの判断基準として考慮され、新しいバージョンのイメージが検証/認証またはロールバック保護に失敗した場合、ブートROMは古いイメージにフォールバックします。
ファームウェアバージョンの強制に関して言えば、ブートROMは、アップデートイメージのバージョンがシステムで許可されているバージョンよりも古い場合はファームウェアのアップデートを防止し、ファームウェアのバージョンが実行に許可されている最小バージョンよりも古い場合はブートを防止(セキュアブートの失敗)することで、ロールバック保護を提供します。
詳細については、KW47セキュリティリファレンスマニュアルを参照してください。
よろしくお願いします、
ソフィア。
こんにちは、ソフィアさん。
ご回答ありがとうございます。
「KW47 ROMブートローダーは、各イメージのメタデータにあるfirmwareVersionフィールドを使用して新しいイメージを判断し、より新しいバージョンを起動します。」両方のバージョンが同じ場合、ブートイメージのベースアドレスがブートの判断基準として考慮され(タイブレーカーとして)、新しいバージョンのイメージが検証/認証またはロールバック保護に失敗した場合は、ブートROMは古いイメージにフォールバックします。
アプリケーション開発者側の視点から、実装に関する詳細を一つ明確にしておきたいと思います。
KW47 ROMブートローダーが読み取れるように、各ファームウェアイメージ内にこのイメージメタデータ、特にfirmwareVersionフィールドをどのように設定または配置すればよいでしょうか?
具体的には:
ROMブートローダーがファームウェアバージョンを見つけることを期待する、各ブート可能イメージ内の固定メタデータ/ヘッダーアドレスはありますか?
このメタデータは、画像の開始アドレスを基準とした相対的な位置にありますか?例えば、画像ベクターテーブルや画像ヘッダーの近くなどでしょうか?