

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 移植网络传输接口
<a name="afr-porting-network-transport-interface"></a>

## 集成 TLS 库
<a name="afr-porting-tls"></a>

传输层安全性协议 (TLS) 身份验证，请使用首选 TLS 堆栈。我们建议使用 [Mbed TLS](https://tls.mbed.org/)，因为它已通过 FreeRTOS 库进行了测试。你可以在这个[GitHub](https://github.com/FreeRTOS/FreeRTOS)存储库中找到一个这样的例子。

无论您的设备使用哪种 TLS 实现，您都必须为带 TCP/IP 堆栈的 TLS 堆栈实现底层传输挂钩。它们必须支持 [AWS IoT支持的 TLS 密码套件](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`，则使用 `qualification_test.cmake` 和 `src/transport_interface_tests.cmake` 来包含相关文件。
+ 在适当的项目位置实现以下功能：
+ 
  + `network connect function`：签名由 `src/common/network_connection.h` 中的 `NetworkConnectFunc` 定义。此函数接收指向网络上下文的指针、指向主机信息的指针和指向网络凭证的指针。它使用提供的网络凭证与主机信息中指定的服务器建立连接。
  + `network disconnect function`：签名由 `src/common/network_connection.h` 中的 `NetworkDisconnectFunc` 定义。此函数接收指向网络上下文的指针。它断开存储在网络上下文中先前建立的连接。
  + `setupTransportInterfaceTestParam()`：在 `src/transport_interface/transport_interface_tests.h` 中定义。实现的名称和签名必须与 `transport_interface_tests.h` 定义的完全相同。这个函数接受一个指向*TransportInterfaceTestParam*结构的指针。它将填充传输接口测试使用的*TransportInterfaceTestParam*结构中的字段。
+ 实现 **UNITY\$1OUTPUT\$1CHAR**，这样，测试输出日志就不会与设备日志交错。
+ 从应用程序调用 `runQualificationTest()`。在调用之前，必须正确初始化设备硬件并连接网络。

### 凭证管理（设备端生成的密钥）
<a name="cred-management-key"></a>

将 `test_param_config.h` 中的 **FORCE\$1GENERATE\$1NEW\$1KEY\$1PAIR** 设置为 1 时，设备应用程序会生成新的设备端密钥对并输出公有密钥。在与 Echo 服务器建立 TLS 连接时，设备应用程序使用 **ECHO\$1SERVER\$1ROOT\$1CA** 和 **TRANSPORT\$1CLIENT\$1CERTIFICATE** 作为 Echo 服务器根 CA 和客户端证书。IDT 在资格认证运行期间设置这些参数。

### 凭据管理（导入密钥）
<a name="cred-management-importing-key"></a>

在与 Echo 服务器建立 TLS 连接时，设备应用程序使用 `test_param_config.h` 中的 **ECHO\$1SERVER\$1ROOT\$1CA**、**TRANSPORT\$1CLIENT\$1CERTIFICATE** 和 **TRANSPORT\$1CLIENT\$1PRIVATE\$1KEY** 作为 Echo 服务器根 CA、客户端证书和客户端私有密钥。IDT 在资格认证运行期间设置这些参数。

## 测试
<a name="testing-transport-interface"></a>

本节介绍如何通过资格认证测试在本地测试传输接口。更多详细信息可以在上的 transport [\$1inter](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/src/transport_interface) face 部分提供的 README.md 文件中找到。 FreeRTOS-Libraries-Integration-Tests GitHub

或者，您也可以使用 IDT 自动执行。有关详细信息，请参阅《FreeRTOS 用户指南》中 [适用于 FreeRTOS 的AWS IoT Device Tester](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html)。**

### 启用测试
<a name="enabling-test"></a>

打开 `test_execution_config.h` 并将 **TRANSPORT\$1INTERFACE\$1TEST\$1ENABLED** 定义为 1。

### 设置测试的 Echo 服务器
<a name="configuring-echo-server-test"></a>

本地测试需要一台可从运行测试的设备访问的 Echo 服务器。如果传输接口实现支持 TLS，则 Echo 服务器必须支持 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 于](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) *FreeRTOS” 中的说明进行端口验证*设置。 AWS IoT Device Tester 要测试特定库的端口，必须在 AWS IoT Device Tester `configs`文件夹`device.json`的文件中启用正确的测试组。