

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 移植網路傳輸界面
<a name="afr-porting-network-transport-interface"></a>

## 整合 TLS 程式庫
<a name="afr-porting-tls"></a>

針對 Transport Layer Security (TLS) 身分驗證，請使用您偏好的 TLS 堆疊。建議使用 [Mbed TLS](https://tls.mbed.org/)，因為它已使用 FreeRTOS 程式庫進行測試。您可以在此 [GitHub](https://github.com/FreeRTOS/FreeRTOS) 儲存庫中找到此範例。

無論您的裝置使用何種 TLS 實作，您都必須使用 TCP/IP 堆疊實作 TLS 堆疊的基礎傳輸掛鉤。它們必須支援 [支援的 TLS 密碼套件 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html#tls-cipher-suite-support)。

## 移植網路傳輸介面程式庫
<a name="network-intro"></a>

您必須實作網路傳輸界面，才能使用 [coreMQTT](https://www.freertos.org/mqtt/index.html) 和 [coreHTTP](https://www.freertos.org/http/index.html)。網路傳輸界面包含在單一網路連線上傳送和接收資料所需的函數指標和內容資料。如需詳細資訊，請參閱[傳輸界面](https://www.freertos.org/network-interface.html)。FreeRTOS 提供一組內建的網路傳輸介面測試，以驗證這些實作。下一節說明如何設定專案來執行這些測試。

## 先決條件
<a name="prereqs"></a>

若要移植此測試，您需要下列項目：
+ 具有建置系統的專案，可使用經過驗證的 FreeRTOS 核心連接埠建置 FreeRTOS。
+ 網路驅動程式的工作實作。

## 移植
<a name="porting-network-transport-interface"></a>
+ 將 [ FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests) 作為子模組新增至您的專案。子模組放置在專案中的位置並不重要，只要可以建置即可。
+ 將 `config_template/test_execution_config_template.h`和 `config_template/test_param_config_template.h` 複製到建置路徑中的專案位置，並將其重新命名為 `test_execution_config.h`和 `test_param_config.h`。
+ 在建置系統中包含相關檔案。如果使用 `CMake`，`src/transport_interface_tests.cmake`則使用 `qualification_test.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\$1OUTPUT\$1CHAR**，讓測試輸出日誌不會與裝置日誌交錯。
+ `runQualificationTest()`從應用程式呼叫 。裝置硬體必須正確初始化，且必須在呼叫之前連接網路。

### 登入資料管理 （裝置內產生的金鑰）
<a name="cred-management-key"></a>

當 中的 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** 設定為 1 `test_param_config.h`時，裝置應用程式會產生新的裝置內金鑰對，並輸出公有金鑰。裝置應用程式在與 echo 伺服器建立 TLS 連線時，會使用 ** echo\$1SERVER\$1ROOT\$1CA** 和 **TRANSPORT\$1CLIENT\$1CERTIFICATE** 做為 echo 伺服器根 CA 和用戶端憑證。IDT 會在資格執行期間設定這些參數。

### 登入資料管理 （匯入金鑰）
<a name="cred-management-importing-key"></a>

裝置應用程式在與回應伺服器建立 TLS 連線時，使用 中的 ** echo\$1SERVER\$1ROOT\$1CA**、**TRANSPORT\$1CLIENT\$1CERTIFICATE** 和 **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY** `test_param_config.h`做為回應伺服器根 CA、用戶端憑證和用戶端私有金鑰。IDT 會在資格執行期間設定這些參數。

## 測試
<a name="testing-transport-interface"></a>

本節說明如何使用資格測試在本機測試傳輸界面。如需其他詳細資訊，請參閱 GitHub 上 FreeRTOS-Libraries-Integration-Tests 的 [ transport\$1interface](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/src/transport_interface) 一節所提供的 README.md 檔案。

或者，您也可以使用 IDT 自動化執行。如需詳細資訊[AWS IoT Device Tester ，請參閱FreeRTOS](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) *使用者指南》中的 FreeRTOS*。

### 啟用測試
<a name="enabling-test"></a>

開啟 **TRANSPORT\$1INTERFACE\$1TEST\$1ENABLED** `test_execution_config.h`並將其定義為 1。

### 設定用於測試的 echo 伺服器
<a name="configuring-echo-server-test"></a>

本機測試需要可從執行測試的裝置存取的 echo 伺服器。如果傳輸介面實作支援 TLS，回應伺服器必須支援 TLS。如果您還沒有，[FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/tools/echo_server) GitHub 儲存庫具有回應伺服器實作。

### 設定專案進行測試
<a name="configure-project"></a>

在 中`test_param_config.h`，將 ** echo\$1SERVER\$1ENDPOINT** 和 ** echo\$1SERVER\$1PORT** 更新為上一個步驟中的端點和伺服器設定。

### 設定登入資料 （裝置上產生的金鑰）
<a name="setup-credentials-device-key"></a>
+ 將 ** echo\$1SERVER\$1ROOT\$1CA** 設定為 echo 伺服器的伺服器憑證。
+ 將 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** 設定為 1，以產生金鑰對並取得公有金鑰。
+ 產生金鑰後，將 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** 設回 0。
+ 使用公有金鑰和伺服器金鑰和憑證來產生用戶端憑證。
+ 將 **TRANSPORT\$1CLIENT\$1CERTIFICATE** 設定為產生的用戶端憑證。

### 設定登入資料 （匯入金鑰）
<a name="setup-credentials-import-key"></a>
+ 將 ** echo\$1SERVER\$1ROOT\$1CA** 設定為 echo 伺服器的伺服器憑證。
+ 將 **TRANSPORT\$1CLIENT\$1CERTIFICATE** 設定為預先產生的用戶端憑證。
+ 將 **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY** 設定為預先產生的用戶端私有金鑰。

### 建置和刷新應用程式
<a name="build-flash"></a>

使用您選擇的工具鏈建置和刷新應用程式。調用 `runQualificationTest()` 時，將執行傳輸界面測試。測試結果會輸出到序列連接埠。

**注意**  
若要正式讓裝置符合 FreeRTOS 的資格，您必須使用 OTA PAL 和 OTA E2E 測試群組來驗證裝置的移植原始碼 AWS IoT Device Tester。請遵循 [ FreeRTOS 使用者指南中的使用 AWS IoT Device Tester for](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) FreeRTOS 中的指示來設定 AWS IoT Device Tester 連接埠驗證。 *FreeRTOS * 若要測試特定程式庫的連接埠，必須在 資料夾中的 `device.json` 檔案中 AWS IoT Device Tester `configs`啟用正確的測試群組。