フラッシュパーティション
フラッシュメモリパーティション
wolfBootを統合するには、フラッシュメモリのジオメトリを考慮して、フラッシュを別々の領域(パーティション)に分割する必要があります。
イメージの境界は 、新しいファームウェアイメージを保存する前にすべてのフラッシュセクターを消去し、2つのパーティションのコンテンツを一度に1つずつスワップするため、かならず 物理セクターにアラインする必要があります。
このため、ターゲットシステムのパーティションを進める前に、次の側面を考慮する必要があります。
- ブートパーティションと更新パーティションのサイズは同じで、実行システムを保持できること大きさでなければなりません
- スワップパーティションは、ブートパーティションと更新パーティションの両方で最大のセクターと同じ大きさでなければなりません。
ターゲットのフラッシュメモリは、次の領域に分割されます。
- ブートローダパーティション、フラッシュメモリの先頭アドレスに位置し一般的に非常に小(16-32KB)
- アドレス
WOLFBOOT_PARTITION_BOOT_ADDRESS
から始まるプライマリスロット(ブートパーティション) - セカンダリスロット(更新パーティション)アドレス
WOLFBOOT_PARTITION_UPDATE_ADDRESS
- 両方のパーティションは同じサイズを共有します。AS
WOLFBOOT_PARTITION_SIZE
-アドレスWOLFBOOT_PARTITION_SWAP_ADDRESS
から始まるスペース(スワップパーティション) - スワップスペースサイズは
WOLFBOOT_SECTOR_SIZE
として定義され、ブート/更新パーティションで使用される最大のセクターと同じ大きさでなければなりません。
include/target.h
のオフセットとサイズの値を設定することにより、特定の使用のために適切なパーティション構成を設定する必要があります。
ブートローダーパーティション
このパーティションは通常非常に小さく、ブートローダーコードとデータのみが含まれています。工場のイメージの作成中に事前に許可されたパブリック鍵は、ファームウェアイメージの一部として自動的に保存されます。
ブートパーティション
これは、ファームウェアイメージをチェーンロードして実行できる唯一のパーティションです。ファームウェアイメージは、そのエントリポイントがアドレスWOLFBOOT_PARTITION_BOOT_ADDRESS + 256
にあるようにリンクする必要があります。
更新パーティション
実行中のファームウェアは、安全なチャネルを介して新しいファームウェアイメージを転送し、セカンダリスロットに保存する責任があります。更新が開始された場合、ブートローダーは次の再起動時にブートパーティションのファームウェアを交換またはスワップします。
パーティションステータスとセクターフラグ
パーティションは、現在使用されているファームウェアイメージ(ブート)を保存するか、(更新)(更新)の準備ができているために使用されます。各パーティションのファームウェアのステータスを追跡するために、各パーティションスペースの端に1バイト状態フィールドが保存されます。このバイトは、パーティションが初めて消去およびアクセスされるときに初期化されます。
可能な状態は次のとおりです。
STATE_NEW
(0xff):ブートのためにイメージがステージングされることはなく、更新用にトリガーされました。イメージが存在する場合、フラグはアクティブではありません。STATE_UPDATING
(0x70):更新パーティションでのみ有効です。イメージは更新用にマークされており、ブートの現在のイメージを置き換える必要があります。STATE_TESTING
(0x10):ブートパーティションでのみ有効です。イメージは更新されたばかりで、ブートを完成させませんでした。再起動後に存在する場合、正しく検証されているにもかかわらず、更新されたイメージが起動に失敗したことを意味します。この特定の状況は、ロールバックを引き起こします。STATE_SUCCESS
(0x00):ブートパーティションでのみ有効です。ブートに保存されたイメージは、少なくとも一度は正常にステージングされており、更新が完了しました。
州のバイトから始めて後方に成長しているブートローダーは、更新パーティションの最後にセクターごとに4ビットを使用して、各セクターの状態を追跡します。更新が開始されるたびに、ファームウェアはアップデートから一度に1つのセクターを起動するために転送され、元のファームウェアのバックアップをブートから更新まで保存します。各フラッシュアクセス操作は、セクターフラグエリアのセクターのフラグの異なる値に対応するため、操作が中断された場合、再起動時に再開できます。