

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

# AWS IoT 無線通信経由 (OTA) ライブラリ
<a name="ota-update-library"></a>

**注記**  <a name="out-of-date-message"></a>
このページのコンテンツは最新ではない可能性があります。最新の更新については、[FreeRTOS.org ライブラリのページ](https://www.freertos.org/Documentation/03-Libraries/01-Library-overview/01-All-libraries)を参照してください。

## 序章
<a name="ota-update-library-intro"></a>

[AWS IoT 無線通信 (OTA) 更新ライブラリ](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/index.html)を使用すると、プロトコルとして HTTP または MQTT を使用する FreeRTOS デバイスのファームウェア更新の通知、ダウンロード、検証を管理できます。OTA エージェントライブラリを使用すると、ファームウェア更新とデバイス上で実行されているアプリケーションを論理的に分離することができます。OTA エージェントは、アプリケーションとネットワーク接続を共有できます。ネットワーク接続を共有することで、大量の RAM を節約できます。さらに、OTA エージェントライブラリを使用すると、ファームウェア更新をテスト、コミット、ロールバックするためのアプリケーション固有のロジックを定義できます。

IoT によって、従来は接続されていなかった組み込みデバイスにインターネット接続機能が導入されました。これらのデバイスは、インターネットで使用可能なデータを通信するようにプログラムでき、リモートでモニタリングや制御ができます。テクノロジーの進歩により、コンシューマー、産業、およびエンタープライズ分野でこれら従来の組み込みデバイスにインターネット機能が急速に普及しています。

IoT デバイスは、通常、大量にデプロイされ、多くの場合人間のオペレータがアクセスすることが困難または実用的でない場所に配置されます。データを漏洩する可能性のあるセキュリティ脆弱性が発見されるシナリオを想像してみてください。このようなシナリオでは、影響を受けるデバイスをセキュリティ修正で迅速かつ確実に更新することが重要です。OTA 更新を実行できないと、地理的に分散しているデバイスの更新も困難になる可能性があります。技術者にこれらのデバイスを更新してもらうことは、コストがかかり、時間がかかり、しばしば実用的ではありません。これらのデバイスの更新に時間がかかるため、セキュリティ脆弱性に長期間さらされます。更新のためにこれらのデバイスをリコールすることもコストがかかり、ダウンタイムによってコンシューマーに重大なサービスの中断が発生する可能性があります。

無線通信経由 (OTA) 更新を使用すると、費用のかかるリコールや技術者の派遣なしに、デバイスのファームウェアを更新できます。この方法には次の利点があります。
+ **セキュリティ**: デバイスが現場にデプロイされた後に検出されたセキュリティ脆弱性やソフトウェアバグに迅速に対応できます。
+ **イノベーション**: 新機能が開発されるたびに頻繁に製品を更新できるため、イノベーションサイクルを促進できます。更新は、従来の更新方法と比較して、最小限のダウンタイムで迅速に有効になります。
+ **コスト**: OTA 更新によって、デバイスの更新に従来使用されていた方法と比較して、メンテナンスコストを大幅に削減できます。

OTA 機能を提供するには、次の設計上の考慮事項が必要です。
+ **安全な通信**: 更新では、転送中にダウンロードが改ざんされないように、暗号化された通信チャネルを使用する必要があります。
+ **復旧**: 断続的なネットワーク接続や無効な更新の受信などにより、更新が失敗することがあります。これらのシナリオでは、デバイスが安定した状態に復旧し、使用不能な状態にならないようにする必要があります。
+ **作成者検証**: バージョンや互換性の確認など、その他の検証とともに、信頼できるソースからの更新かどうかを検証する必要があります。

FreeRTOS での OTA 更新の設定の詳細については、「[FreeRTOS 無線通信経由更新](freertos-ota-dev.md)」を参照してください。

### AWS IoT 無線通信経由 (OTA) ライブラリ
<a name="ota-update-library-intro-detail"></a>

AWS IoT OTA ライブラリを使用すると、新しく利用可能な更新に関する通知の管理、その更新のダウンロード、ファームウェアアップデートの暗号化検証ができます。無線通信経由 (OTA) クライアントライブラリを使用して、デバイスで実行されているアプリケーションからファームウェア更新メカニズムを論理的に分離できます。無線通信経由 (OTA) クライアントライブラリは、アプリケーションとネットワーク接続を共有できるため、リソースに制約のあるデバイスのメモリを節約できます。また、無線通信経由 (OTA) クライアントライブラリを使用すると、ファームウェア更新をテスト、コミット、ロールバックするためのアプリケーション固有のロジックを定義できます。このライブラリは、Message Queuing Telemetry Transport (MQTT) や Hypertext Transfer Protocol (HTTP) などのさまざまなアプリケーションプロトコルをサポートし、ネットワークの種類と条件に合わせて微調整できる各種設定オプションを提供します。

このライブラリの API は、次の主要な機能を提供します。
+ 通知を登録するか、利用可能な新しい更新リクエストをポーリングします。
+ 更新リクエストを受け取り、解析し、検証します。
+ 更新リクエストの情報に従って、ファイルをダウンロードして検証します。
+ 受信した更新をアクティブ化する前にセルフテストを実行して、更新の機能的妥当性を確認します。
+ デバイスのステータスを更新します。

このライブラリでは、ファームウェア更新の送信、複数のリージョンにまたがる多数のデバイスのモニタリング、失敗したデプロイの影響範囲の縮小、更新のセキュリティの検証など、さまざまなクラウド関連の機能を管理する AWS サービスを使用します。このライブラリは、任意の MQTT または HTTP ライブラリで使用できます。

このライブラリのデモでは、FreeRTOS デバイスで coreMQTT ライブラリと AWS サービスを使用して無線通信経由更新を完了します。

## 機能
<a name="freertos-ota-features"></a>

OTA エージェントの各インターフェイスは次のとおりです。

**`[ OTA\$1Init](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ae5cc1dcc13fbcb32230f552f48b24f03)`**  
システムで OTA エージェント (「OTA タスク」) を起動して OTA エンジンを初期化します。OTA エージェントは 1 つしか存在しません。

**`[ OTA\$1Shutdown](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ac779291eb93f4e0e6459816e60e13b09)`**  
OTA エージェントをシャットダウンする通知。OTA エージェントは、必要に応じてすべての MQTT ジョブ通知トピックのサブスクライブを解除し、進行中の OTA ジョブがあれば停止し、すべてのリソースをクリアします。

**`[ OTA\$1GetState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a6db3f9cb417cb135cb0e68f5b5f2b11f)`**  
OTA エージェントの現在の状態を取得します。

**`[ OTA\$1ActivateNewImage](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a5169ba09148e7f5668a90e776e712f8b)`**  
OTA を介して受信した最新のマイクロコントローラーファームウェアイメージを有効にします。(詳細なジョブのステータスはセルフテストになっているはずです)

**`[ OTA\$1SetImageState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ab68cdf65934474e1f3d2cd1046314bea)`**  
現在実行中のマイクロコントローラーファームウェアイメージの検証状態 (テスト中、受け入れ済または拒否済) を設定します 。

**`[ OTA\$1GetImageState](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a9c5b25f9a7eff3ded8cdf088c2011742)`**  
現在実行中のマイクロコントローラーファームウェアイメージの状態 (テスト中、受け入れ済または拒否済) を取得します 。

**`[ OTA\$1CheckForUpdate](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a1178e8009eb05e6f55f6506b625c9fc2)`**  
OTA 更新サービスから利用可能な次の OTA 更新を要求します。

**`[ OTA\$1Suspend](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a65b61ae5dd477e8b2e6c88ea0473c62b)`**  
OTA エージェントのすべてのオペレーションを一時停止します。

**`[ OTA\$1Resume](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ae9d40388ac87e4ac93288de37c98a138)`**  
OTA エージェントのオペレーションを再開します。

**`[ OTA\$1SignalEvent](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a2564144f284db077b8947ba58a6a72bb)`**  
OTA エージェントタスクにイベントを通知します。

**`[ OTA\$1EventProcessingTask](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#ab3a0cfdc8694a606a1d736b2f54fb113)`**  
OTA エージェントイベント処理ループ。

**`[ OTA\$1GetStatistics](https://docs.aws.amazon.com/freertos/latest/lib-ref/embedded-csdk/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a63182243ef3c18d5f36cd427b83a1a22)`**  
受信、キューイング、処理、ドロップされたパケットの数を含む OTA メッセージパケットの統計情報を取得します。

**`[ OTA\$1Err\$1strerror](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a6f72911b8fe80f27bce42c3a36dca4b3)`**  
OTA エラーのエラーコードから文字列への変換。

**`[ OTA\$1JobParse\$1strerror ](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/libraries/aws/ota-for-aws-iot-embedded-sdk/docs/doxygen/output/html/ota_8c.html#a1d42efa1af7fa0ed92060a3b7e869648)`**  
OTA ジョブ解析エラーコードを文字列に変換します。

**`[ OTA\$1PalStatus\$1strerror](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_8c.html#a5a58be1ac41b7d619eeeb4861be37c89)`**  
OTA PAL ステータスのステータスコードから文字列への変換。

**`[ OTA\$1OsStatus\$1strerror](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_8c.html#a4951f4bb1bfbb7312850454ca2b282a4)`**  
OTA OS ステータスのステータスコードから文字列への変換。

## API リファレンス
<a name="freertos-ota-api"></a>

詳細については、「[AWS IoT Over-the-air Update: Functions](https://aws.github.io/ota-for-aws-iot-embedded-sdk/v3.4.0/ota_functions.html)」を参照してください。

## 使用例
<a name="freertos-ota-example"></a>

MQTT プロトコルを使用する一般的な OTA 対応デバイスアプリケーションは、次の一連の API コールを使用して OTA エージェントを起動します。

1. AWS IoT coreMQTT エージェントに接続します。詳細については、[coreMQTT エージェントライブラリ](coremqtt-agent.md) を参照してください。

1. `OTA_Init` を呼び出すことによって、OTA エージェントを初期化します。バッファ、必要な ota インターフェイス、モノの名前、およびアプリケーションコールバックが含まれます。コールバックは、OTA 更新ジョブの完了後に実行されるアプリケーション固有のロジックを実装します。

1. OTA 更新が完了すると、FreeRTOS は、ジョブ完了コールバックを `accepted`、`rejected`、または `self test` のいずれかのイベントで呼び出します。

1. 新しいファームウェアイメージが拒否された場合 (たとえば検証エラーのため)、アプリケーションは通常、通知を無視して次の更新を待機します。

1. アップデートが有効で、承諾済みとマークされている場合は、`OTA_ActivateNewImage` を呼び出してデバイスをリセットし、新しいファームウェアイメージを起動します。

## 移植
<a name="freertos-ota-porting"></a>

プラットフォームに OTA 機能を移植する方法については、FreeRTOS 移植ガイドの [OTA ライブラリの移植](https://docs.aws.amazon.com/freertos/latest/portingguide/afr-porting-ota.html)を参照してください。

## メモリ使用量
<a name="ota-update-library-memory"></a>


****  

| AWS IoT OTA のコードサイズ (ARM Cortex-M 向けの GCC で生成された例) | ファイル | -O1 最適化を使用 | -Os 最適化を使用 | 
| --- | --- | --- | --- | 
| ota.c | 8.3K | 7.5 K | 
| ota\$1interface.c | 0.1 K | 0.1 K | 
| ota\$1base64.c | 0.6 K | 0.6 K | 
| ota\$1mqtt.c | 2.4 K | 2.2 K | 
| ota\$1cbor.c | 0.8 K | 0.6 K | 
| ota\$1http.c | 0.3 K | 0.3 K | 
| 合計 (概算 | 12.5K | 11.3K | 