Microchip Curiosity PIC32MZEF 用のデモブートローダー - FreeRTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Microchip Curiosity PIC32MZEF 用のデモブートローダー

重要

これは、FreeRTOS リリース 202210.00 で使用する「FreeRTOS ユーザーガイド」のアーカイブ版です。このドキュメントの最新バージョンについては、FreeRTOS ユーザーガイドを参照してください。

注記

Microchip との合意に基づき、Curiosity PIC32MZEF (DM320104) は FreeRTOS Reference Integration リポジトリのメインブランチから削除されるため、新しいリリースには搭載されません。Microchip は PIC32MZEF (DM320104) が新しい設計に推奨されなくなったことを公式に発表しました。PIC32MZEF プロジェクトとソースコードには、以前のリリースタグから引き続きアクセスできます。Microchip では、新しい設計に Curiosity PIC32MZ-EF-2.0 Development board (DM320209) を使用するよう推奨しています。Pic32mzv1 プラットフォームは、FreeRTOS リファレンス統合リポジトリの v202012.00 に引き続き用意されています。ただし、プラットフォームは FreeRTOS リファレンスの v202107.00 によってサポートされなくなりました。

このデモブートローダーは、ファームウェアバージョンチェック、暗号署名の検証、およびアプリケーションの自己テストを実装します。これらの機能は、FreeRTOS の無線通信経由 (OTA) によるファームウェアの更新をサポートします。

ファームウェア検証は、無線で受信した新しいファームウェアの信頼性と誠実性を検証することが含まれます。ブートローダーは、起動する前にアプリケーションの暗号署名を検証します。このデモでは、SHA-256 と楕円曲線デジタル署名アルゴリズム (ECDSA) を使用しています。提供されているユーティリティを使用して、デバイス上でフラッシュできる署名付きアプリケーションを生成することができます。

ブートローダーは、OTA に必要な次の機能をサポートしています。

  • デバイス上でアプリケーションイメージを維持し、それらを切り替えます。

  • 受信した OTA イメージの自己テスト実行を許可し、失敗時にロールバックします。

  • OTA 更新イメージの署名とバージョンをチェックします。

注記

FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。

ブートローダーのステート

ブートローダーのプロセスは以下のステートマシンで示されます。

State machine diagram showing bootloader process: Initialization, Verification, Execution, with Error state.

次の表はブートローダーのステートを説明しています。

ブートローダーのステート 説明

初期化

ブートローダーが初期化状態になっています。

検証

ブートローダーはデバイスに存在するイメージを検証しています。

イメージ実行

ブートローダーが選択したイメージを起動しています。

デフォルト実行

ブートローダーがデフォルトイメージを起動しています。

エラー

ブートローダーがエラー状態になっています。

上の図では、Execute Image および Execute Default の両方が Execution ステートとして表示されています。

ブートローダーの実行ステート

ブートローダーは、Execution 状態にあり、選択した検証済みイメージを起動する準備ができました。起動されるイメージが上位バンクにある場合、アプリケーションは常に下位バンク用に構築されているため、イメージを実行する前にバンクがスワップされます。

ブートローダーのデフォルト実行ステート

デフォルトイメージを起動する設定オプションが有効になっている場合、ブートローダーはデフォルトの実行アドレスからアプリケーションを起動します。デバッグ中を除いて、このオプションを無効にする必要があります。

ブートローダーのエラー状態

ブートローダーがエラー状態で、デバイスに有効なイメージがありません。ブートローダーはユーザーに通知する必要があります。デフォルトの実装では、ログメッセージがコンソールに送信され、ボード上の LED が永続的にすばやく点滅します。

フラッシュデバイス

Microchip Curiosity PIC32MZEF プラットフォームでは、2 メガバイト (MB) の内部プログラムフラッシュが 2 つのバンクに分割されています。これらの 2 つのバンクとライブアップデート間のメモリマップスワッピングをサポートしています。デモブートローダーは、別個の下部ブートフラッシュ領域にプログラムされています。

Memory layout diagram showing Lower Boot Flash, Lower Program Flash, and Upper Program Flash regions.

アプリケーションイメージ構造

OTA image structure showing header, descriptor, application binary, and trailer sections.

この図は、デバイスの各バンクに保存されているアプリケーションイメージのプライマリコンポーネントを示しています。

コンポーネント サイズ (バイト単位)

イメージヘッダー

8 バイト

イメージ記述子

24 バイト

アプリケーションバイナリ

< 1 MB - (324)

Trailer

292 バイト

イメージヘッダー

デバイス上のアプリケーションイメージは、マジックコードとイメージフラグで構成されるヘッダーで始まる必要があります。

ヘッダーフィールド サイズ (バイト単位)

マジックコード

7 バイト

イメージフラグ

1 バイト

マジックコード

フラッシュデバイスのイメージはマジックコードで始まる必要があります。デフォルトのマジックコードは @AFRTOS です。ブートローダーは、イメージを起動する前に有効なマジックコードが存在するかどうかを確認します。これが検証の最初のステップです。

イメージフラグ

イメージフラグは、アプリケーションイメージのステータスを保存するために使用されます。フラグは OTA プロセスで使用されます。両方のバンクのイメージフラグがデバイスの状態を決定します。実行イメージがコミット保留中としてマークされている場合、デバイスが OTA 自己テストフェーズにあることを意味します。デバイス上のイメージが有効とマークされていても、起動ごとに同じ検証ステップが実行されます。イメージが新しいものとしてマークされている場合、ブートローダーはそれをコミット保留としてマークし、検証後にセルフテストのために起動します。ブートローダーはまた、ウォッチドッグタイマーを初期化して開始するため、新しい OTA イメージがセルフテストに失敗した場合、デバイスはリブートし、ブートローダーはイメージを消去して拒否し、以前の有効なイメージを実行します。

デバイスは有効なイメージを 1 つのみ持つことができます。もう 1 つのイメージは、新しい OTA イメージか、コミット保留中 (セルフテスト) です。OTA 更新が正常に完了すると、古いイメージがデバイスから消去されます。

ステータス 説明

新しいイメージ

0xFF

アプリケーションイメージは新しく、決して実行されません。

コミット保留中

0xFE

アプリケーションイメージにテスト実行のためのマークが付けられます。

有効です

0xFC

アプリケーションイメージが有効とマークされ、コミットされます。

無効

0xF8

アプリケーションイメージは無効とマークされています。

イメージ記述子

フラッシュデバイス上のアプリケーションイメージには、イメージヘッダーの後にイメージ記述子が含まれている必要があります。イメージ記述子は、ポストビルドユーティリティによって生成されます。ポストビルドユーティリティは、設定ファイル (ota-descriptor.config) を使用して適切な記述子を生成し、それをアプリケーションバイナリに付加します。このビルド後のステップの出力は、OTA に使用できるバイナリイメージです。

記述子フィールド サイズ (バイト単位)

シーケンス番号

4 バイト

開始アドレス

4 バイト

終了アドレス

4 バイト

実行アドレス

4 バイト

ハードウェア ID

4 バイト

リザーブド

4 バイト

シーケンス番号

シーケンス番号は、新しい OTA イメージを構築する前に増加させる必要があります。ota-descriptor.config ファイルを参照してください。ブートローダーは、この番号を使用してブートするイメージを決定します。有効な値の範囲は 1~4294967295‬ です。

開始アドレス

デバイス上のアプリケーションイメージの開始アドレスです。イメージ記述子がアプリケーションバイナリの先頭に付いているため、このアドレスはイメージ記述子の先頭です。

終了アドレス

イメージトレーラーを除く、デバイス上のアプリケーションイメージの終了アドレスです。

実行アドレス

イメージの実行アドレスです。

ハードウェア ID

OTA イメージが正しいプラットフォーム用に構築されているかどうかを検証するためにブートローダーによって使用される一意のハードウェア ID です。

リザーブド

これは、将来の利用のために予約されています。

イメージトレーラー

イメージトレーラーはアプリケーションバイナリに付加されます。これには、署名タイプ文字列、署名サイズ、およびイメージの署名が含まれます。

トレーラーフィールド サイズ (バイト単位)

署名タイプ

32 バイト

署名サイズ

4 バイト

署名

256 バイト

署名タイプ

署名タイプは、使用されている暗号アルゴリズムを表す文字列で、トレーラーのマーカーとして機能します。ブートローダーは、楕円曲線デジタル署名アルゴリズム (ECDSA) をサポートしています。デフォルトは sig-sha256-ecdsa です。

署名サイズ

暗号署名のサイズで、バイト単位です。

署名

イメージ記述子が付加されたアプリケーションバイナリの暗号化署名です。

ブートローダーの設定

基本的なブートローダー設定オプションは、freertos/vendors/microchip/boards/curiosity_pic32mzef/bootloader/config_files/aws_boot_config.h で提供されています。一部のオプションは、デバッグの目的でのみ提供されています。

デフォルトスタートを有効にする

デフォルトアドレスからアプリケーションを実行できるようにします。デバッグのためにのみ有効にする必要があります。イメージは、検証なしでデフォルトのアドレスから実行されます。

暗号署名検証を有効にする

起動時に暗号化署名検証を有効にします。失敗したイメージはデバイスから消去されます。このオプションはデバッグ目的でのみ提供されており、本番環境では有効にする必要があります。

無効なイメージを消去する

そのバンクのイメージ検証が失敗した場合に、完全なバンク消去を有効にします。このオプションはデバッグ用に提供されており、本番環境では有効にする必要があります。

ハードウェア ID 検証を有効にする

OTA イメージの記述子内のハードウェア ID と、ブートローダーにプログラムされたハードウェア ID の検証を有効にします。これはオプションで、ハードウェア ID の検証が不要な場合は無効にすることができます。

アドレス検証を有効にする

OTA イメージ記述子の開始アドレス、終了アドレス、実行アドレスの検証を有効にします。このオプションを有効にしておくことをお勧めします。

ブートローダーのビルド

デモブートローダーは、FreeRTOS ソースコードリポジトリの aws_demos にある freertos/vendors/microchip/boards/curiosity_pic32mzef/aws_demos/mplab/ プロジェクトに、ロード可能なプロジェクトとして含まれています。aws_demos プロジェクトがビルドされる場合、ブートローダーが最初にビルドされ、続いてアプリケーションがビルドされます。最終的な出力は、ブートローダーとアプリケーションを含む統合された 16 進数イメージです。factory_image_generator.py ユーティリティは、暗号化署名付きの統合された 16 進数イメージを生成するために提供されています。ブートローダーユーティリティのスクリプトは、freertos/demos/ota/bootloader/utility/ にあります。

ブートローダーのビルド前のステップ

このビルド前のステップでは、codesigner_cert_utility.py というユーティリティスクリプトが実行され、コード署名証明書からパブリックキーが抽出され、Abstract Syntax Notation One (ASN.1) エンコード形式のパブリックキーを含む C ヘッダーファイルが生成されます。このヘッダーは、ブートローダープロジェクトにコンパイルされます。生成されたヘッダーには、パブリックキーの配列とキーの長さという 2 つの定数が含まれています。ブートローダープロジェクトを aws_demos なしでビルドし、通常のアプリケーションとしてデバッグすることもできます。