

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

# Microchip Curiosity PIC32MZEF 用のデモブートローダー
<a name="microchip-bootloader"></a>

**重要**  <a name="deprecation-message-demo"></a>
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

**注記**  
Microchip との合意に基づき、Curiosity PIC32MZEF (DM320104) は FreeRTOS Reference Integration リポジトリのメインブランチから削除されるため、新しいリリースには搭載されません。Microchip は PIC32MZEF (DM320104) が新しい設計に推奨されなくなったことを[公式に発表](https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/DM320104)しました。PIC32MZEF プロジェクトとソースコードには、以前のリリースタグから引き続きアクセスできます。Microchip では、新しい設計に Curiosity [ PIC32MZ-EF-2.0 Development board (DM320209)](https://devices.amazonaws.com/detail/a3G0h0000077I69EAE/Curiosity-PIC32MZ-EF-2-0-Development-Board) を使用するよう推奨しています。Pic32mzv1 プラットフォームは、FreeRTOS リファレンス統合リポジトリの [v202012.00](https://github.com/aws/amazon-freertos/tree/202012.00) に引き続き用意されています。ただし、プラットフォームは FreeRTOS リファレンスの [v202107.00](https://github.com/aws/amazon-freertos/tree/202107.00) によってサポートされなくなりました。

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

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

ブートローダーは、OTA に必要な次の機能をサポートしています。
+ デバイス上でアプリケーションイメージを維持し、それらを切り替えます。
+ 受信した OTA イメージの自己テスト実行を許可し、失敗時にロールバックします。
+ OTA 更新イメージの署名とバージョンをチェックします。

**注記**  
FreeRTOS デモをセットアップして実行するには、[FreeRTOS の開始方法](freertos-getting-started.md) の手順に従います。

## ブートローダーのステート
<a name="bootloader-states"></a>

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

![ブートローダーステートマシンを起動し、初期化、検証、実行、およびエラーステートの通知エラーオプションを表示します。](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/bootloader-states.png)


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


| ブートローダーのステート | 説明 | 
| --- | --- | 
| 初期化 | ブートローダーが初期化状態になっています。 | 
| 検証 | ブートローダーはデバイスに存在するイメージを検証しています。 | 
| イメージ実行 | ブートローダーが選択したイメージを起動しています。 | 
| デフォルト実行 | ブートローダーがデフォルトイメージを起動しています。 | 
| エラー | ブートローダーがエラー状態になっています。 | 

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

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

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

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

## フラッシュデバイス
<a name="flash-device"></a>

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

![メモリレイアウト図で、ブートローダー、アプリケーションバンク 0、アプリケーションバンク 1 にそれぞれマッピングされた下部ブートフラッシュ、1 MB の下部プログラムフラッシュ、2 MB の上部プログラムフラッシュを示します。](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/flash-device.png)


## アプリケーションイメージ構造
<a name="application-image-structure"></a>

![OTA イメージ構造で、ヘッダー、記述子、アプリケーションバイナリ (署名者サービスによって署名済み)、トレーラーセクションと、マジックコード、シーケンス番号、開始アドレスと終了アドレス、実行アドレス、ハードウェア ID などのフィールドを示します。](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/application-image-structure.png)


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


| コンポーネント | サイズ (バイト単位) | 
| --- | --- | 
| イメージヘッダー | 8 バイト | 
| イメージ記述子 | 24 バイト | 
| アプリケーションバイナリ |  < 1 MB - (324) | 
| Trailer | 292 バイト | 

## イメージヘッダー
<a name="image-header"></a>

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


| ヘッダーフィールド | サイズ (バイト単位) | 
| --- | --- | 
| マジックコード | 7 バイト | 
| イメージフラグ | 1 バイト | 

### マジックコード
<a name="magic-code"></a>

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

### イメージフラグ
<a name="image-flags"></a>

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

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


| ステータス | 値 | 説明 | 
| --- | --- | --- | 
| 新しいイメージ | 0xFF | アプリケーションイメージは新しく、決して実行されません。 | 
| コミット保留中 | 0xFE | アプリケーションイメージにテスト実行のためのマークが付けられます。 | 
| 有効です | 0xFC | アプリケーションイメージが有効とマークされ、コミットされます。 | 
| 無効 | 0xF8 | アプリケーションイメージは無効とマークされています。 | 

## イメージ記述子
<a name="image-descriptor"></a>

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


| 記述子フィールド | サイズ (バイト単位) | 
| --- | --- | 
| シーケンス番号 | 4 バイト | 
| 開始アドレス | 4 バイト | 
| 終了アドレス | 4 バイト | 
| 実行アドレス | 4 バイト | 
| ハードウェア ID | 4 バイト | 
| リザーブド | 4 バイト | 

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

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

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

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

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

**リザーブド**  
これは、将来の利用のために予約されています。

## イメージトレーラー
<a name="image-trailer"></a>

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


| トレーラーフィールド | サイズ (バイト単位) | 
| --- | --- | 
| 署名タイプ | 32 バイト | 
| 署名サイズ | 4 バイト | 
| 署名 | 256 バイト | 

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

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

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

## ブートローダーの設定
<a name="bootloader-configuration"></a>

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

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

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

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

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

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

## ブートローダーのビルド
<a name="building-bootloader"></a>

デモブートローダーは、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/` にあります。

### ブートローダーのビルド前のステップ
<a name="bootloader-pre-build"></a>

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