ネットワークトランスポートインターフェイスの移植 - FreeRTOS

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

ネットワークトランスポートインターフェイスの移植

TLS ライブラリの統合

Transport Layer Security (TLS) 認証には、お好みの TLS スタックを使用してください。Mbed TLS は FreeRTOS ライブラリでテストされているため、使用することをお勧めします。この例は、この GitHub リポジトリにあります。

デバイスで使用されている TLS 実装にかかわらず、TLS スタックの基礎となるトランスポートフックを TCP/IP スタックで実装する必要があります。AWS IoTでサポートされている TLS 暗号スイートをサポートする必要があります。

ネットワークトランスポートインターフェイスライブラリの移植

coreMQTTcoreHTTP を使用するには、ネットワークトランスポートインターフェイスを実装する必要があります。ネットワークトランスポートインターフェイスには、1 つのネットワーク接続でデータを送受信するのに必要な関数ポインタとコンテキストデータが含まれています。詳細については、「Transport Interface」を参照してください。FreeRTOS には、これらの実装を検証するための一連の組み込みネットワークトランスポートインターフェイステストが用意されています。以下のセクションでは、これらのテストを実行するためのプロジェクトを設定する方法について説明します。

前提条件

このテストを移植するには、以下のことが必要です。

  • 検証済みの FreeRTOS カーネルポートで FreeRTOS をビルドできるビルドシステムを備えたプロジェクト。

  • ネットワークドライバーの実用的な実装。

移植

  • FreeRTOS-Libraries-Integration-Tests をサブモジュールとしてプロジェクトに追加します。サブモジュールは、ビルド可能な限り、プロジェクトのどこに配置しても構いません。

  • config_template/test_execution_config_template.hconfig_template/test_param_config_template.h をビルドパス内のプロジェクトの場所にコピーし、名前を test_execution_config.htest_param_config.h に変更します。

  • 関連ファイルをビルドシステムに含めます。CMake を使用している場合は、qualification_test.cmakesrc/transport_interface_tests.cmake を使用して関連ファイルを含めます。

  • 以下の関数を適切なプロジェクトの場所に実装してください。

    • network connect function: 署名は、NetworkConnectFunc によって src/common/network_connection.h で定義されています。この関数は、ネットワークコンテキストへのポインタ、ホスト情報へのポインタ、およびネットワーク認証情報へのポインタを受け取ります。提供されたネットワーク認証情報を使用して、ホスト情報で指定されたサーバーとの接続を確立します。

    • network disconnect function: 署名は、NetworkDisconnectFunc によって src/common/network_connection.h で定義されています。この関数は、ネットワークコンテキストへのポインタを受け取ります。ネットワークコンテキストに保存されている以前に確立された接続を切断します。

    • setupTransportInterfaceTestParam(): これは src/transport_interface/transport_interface_tests.h で定義されています。実装には、transport_interface_tests.h で定義されているものとまったく同じ名前と署名が必要です。この関数は、TransportInterfaceTestParam 構造体へのポインタを受け取ります。この関数は、トランスポートインターフェイステストで使用される TransportInterfaceTestParam 構造体のフィールドに入力します。

  • テスト出力ログがデバイスログとインターリーブしないように、UNITY_OUTPUT_CHAR を実装します。

  • アプリケーションから runQualificationTest() を呼び出します。呼び出す前に、デバイスのハードウェアが正しく初期化され、ネットワークが接続されている必要があります。

認証情報管理 (デバイス上で生成されたキー)

test_param_config.hFORCE_GENERATE_NEW_KEY_PAIR が 1 に設定されている場合、デバイスアプリケーションは新しいデバイス上のキーペアを生成し、パブリックキーを出力します。デバイスアプリケーションは、エコーサーバーとの TLS 接続を確立する際、エコーサーバーのルート CA およびクライアント証明書として、ECHO_SERVER_ROOT_CA および TRANSPORT_CLIENT_CERTIFICATE を使用します。IDT は、これらのパラメータを認定実行中に設定します。

認証情報管理 (キーのインポート)

デバイスアプリケーションは、エコーサーバーとの TLS 接続を確立する際、エコーサーバーのルート CA、クライアント証明書、およびクライアントプライベートキーとして、test_param_config.hECHO_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATE、および TRANSPORT_CLIENT_PRIVATE_KEY を使用します。IDT は、これらのパラメータを認定実行中に設定します。

テスト

このセクションでは、認定テストを使用してトランスポートインターフェイスをローカルでテストする方法について説明します。その他の詳細については、GitHub の FreeRTOS-Libraries-Integration-Tests の transport_interface セクションにある README.md ファイルを参照してください。

または、IDT を使用して実行を自動化することもできます。詳細については、「FreeRTOS ユーザーガイド」の「AWS IoT Device Tester for FreeRTOS」を参照してください。

テストの有効化

test_execution_config.h を開いて、TRANSPORT_INTERFACE_TEST_ENABLED を 1 に定義します。

テスト用エコーサーバーのセットアップ

ローカルテストには、テストを実行するデバイスからアクセスできるエコーサーバーが必要です。トランスポートインターフェイスの実装が TLS をサポートしている場合、エコーサーバーは TLS をサポートしている必要があります。まだ所有していない場合は、FreeRTOS-Libraries-Integration-Tests GitHub リポジトリにエコーサーバーの実装があります。

テスト用プロジェクトの設定

test_param_config.h で、ECHO_SERVER_ENDPOINTECHO_SERVER_PORT を前のステップのエンドポイントとサーバーのセットアップに更新します。

認証情報のセットアップ (デバイス上で生成されたキー)

  • ECHO_SERVER_ROOT_CA をエコーサーバーのサーバー証明書に設定します。

  • FORCE_GENERATE_NEW_KEY_PAIR を 1 に設定すると、キーペアが生成され、パブリックキーが取得されます。

  • キー生成後に、FORCE_GENERATE_NEW_KEY_PAIR を 0 に戻します。

  • パブリックキー、サーバーキー、および証明書を使用して、クライアント証明書を生成します。

  • TRANSPORT_CLIENT_CERTIFICATE を生成されたクライアント証明書に設定します。

認証情報のセットアップ (キーのインポート)

  • ECHO_SERVER_ROOT_CA をエコーサーバーのサーバー証明書に設定します。

  • TRANSPORT_CLIENT_CERTIFICATE を事前に生成されたクライアント証明書に設定します。

  • TRANSPORT_CLIENT_PRIVATE_KEY を事前に生成されたクライアントプライベートキーに設定します。

アプリケーションのビルドとフラッシュ

任意のツールチェーンを使用して、アプリケーションのビルドとフラッシュを行います。runQualificationTest() が呼び出されると、トランスポートインターフェイスのテストが実行されます。テスト結果はシリアルポートに出力されます。

注記

FreeRTOS 用にデバイスを正式に認定するには、AWS IoT Device Tester を使用して、デバイスの移植されたソースコードと OTA PAL および OTA E2E のテストグループを照合しながら検証する必要があります。詳細については、「FreeRTOS ユーザーガイド」の「AWS IoT Device Tester for FreeRTOS」を参照してください。特定のライブラリのポートをテストするには、AWS IoT Device Tester configs フォルダの device.json ファイルで正しいテストグループを有効にする必要があります。