移植网络传输接口 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

移植网络传输接口

集成 TLS 库

传输层安全性协议 (TLS) 身份验证,请使用首选 TLS 堆栈。我们建议使用 Mbed TLS,因为它已通过 FreeRTOS 库进行了测试。您可以在此 GitHub 存储库中找到此类示例。

无论您的设备使用哪种 TLS 实现,都必须为 TCP/IP 堆栈的 TLS 堆栈实现底层传输钩子。它们必须支持 Amazon IoT 支持的 TLS 密码套件

移植网络传输接口库

您必须实现一个网络传输接口才能使用 coreMQTTcoreHTTP。网络传输接口包含在单个网络连接上发送和接收数据所需的函数指针和上下文数据。有关更多详细信息,请参阅传输接口。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:签名由 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_OUTPUT_CHAR,这样,测试输出日志就不会与设备日志交错。

  • 从应用程序调用 runQualificationTest()。在调用之前,必须正确初始化设备硬件并连接网络。

凭证管理(设备端生成的密钥)

test_param_config.h 中的 FORCE_GENERATE_NEW_KEY_PAIR 设置为 1 时,设备应用程序会生成新的设备端密钥对并输出公有密钥。在与 Echo 服务器建立 TLS 连接时,设备应用程序使用 ECHO_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATE 作为 Echo 服务器根 CA 和客户端证书。IDT 在资格认证运行期间设置这些参数。

凭据管理(导入密钥)

在与 Echo 服务器建立 TLS 连接时,设备应用程序使用 test_param_config.h 中的 ECHO_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATETRANSPORT_CLIENT_PRIVATE_KEY 作为 Echo 服务器根 CA、客户端证书和客户端私有密钥。IDT 在资格认证运行期间设置这些参数。

测试

本节介绍如何通过资格认证测试在本地测试传输接口。有关更多详细信息,可在 GitHub 上的 FreerTOS-Libraries-Integration-Tests 的 transport_interface 部分提供的 README.md 文件中找到。

或者,您也可以使用 IDT 自动执行。有关详细信息,请参阅《FreeRTOS 用户指南》中 适用于 FreeRTOS 的 Amazon IoT Device Tester

启用测试

打开 test_execution_config.h 并将 TRANSPORT_INTERFACE_TEST_ENABLED 定义为 1。

设置测试的 Echo 服务器

本地测试需要一台可从运行测试的设备访问的 Echo 服务器。如果传输接口实现支持 TLS,则 Echo 服务器必须支持 TLS。如果您还没有,FreeRTOS-Libraries-Integration-Tests GitHub 存储库提供了 Echo 服务器实现。

配置测试的项目

test_param_config.h 中,将 ECHO_SERVER_ENDPOINTECHO_SERVER_PORT 更新为上一步中的端点和服务器设置。

设置凭证(设备端生成的密钥)

  • ECHO_SERVER_ROOT_CA 设置为 Echo 服务器的服务器证书。

  • FORCE_GENERATE_NEW_KEY_PAIR 设置为 1 以生成密钥对并获取公有密钥。

  • 生成密钥后,将 FORCE_GENERATE_NEW_KEY_PAIR 设置回 0。

  • 使用公有密钥和服务器密钥以及证书生成客户端证书。

  • TRANSPORT_CLIENT_CERTIFICATE 设置为生成的客户端证书。

安装凭证(导入密钥)

  • ECHO_SERVER_ROOT_CA 设置为 Echo 服务器的服务器证书。

  • TRANSPORT_CLIENT_CERTIFICATE 设置为预先生成的客户端证书。

  • TRANSPORT_CLIENT_PRIVATE_KEY 设置为预先生成的客户端私有密钥。

构建并刷写应用程序

使用您选择的工具链构建和刷写应用程序。调用 runQualificationTest() 时,将运行传输接口测试。测试结果会输出到串行端口。

注意

要使设备正式获得 FreeRTOS 的资格,您必须使用 Amazon IoT Device Tester 为 OTA PAL 和 OTA E2E 测试组验证设备的移植源代码。按照《FreeRTOS 用户指南》中使用适用于 FreeRTOS 的 Amazon IoT Device Tester中的说明为移植验证设置 Amazon IoT Device Tester。要测试特定库的移植,必须在 Amazon IoT Device Tester configs 文件夹下面的 device.json 文件中启用正确的测试组。