移植網路傳輸界面 - FreeRTOS

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

移植網路傳輸界面

整合 TLS 程式庫

針對 Transport Layer Security (TLS) 身分驗證,請使用您偏好的 TLS 堆疊。建議使用 Mbed TLS,因為它已使用 FreeRTOS 程式庫進行測試。您可以在此 GitHub 儲存庫中找到此範例。

無論您的裝置使用何種 TLS 實作,您都必須使用 TCP/IP 堆疊實作 TLS 堆疊的基礎傳輸掛鉤。它們必須支援 支援的 TLS 密碼套件 AWS IoT

移植網路傳輸介面程式庫

您必須實作網路傳輸界面,才能使用 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

  • 在建置系統中包含相關檔案。如果使用 CMakesrc/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_OUTPUT_CHAR,讓測試輸出日誌不會與裝置日誌交錯。

  • runQualificationTest()從應用程式呼叫 。裝置硬體必須正確初始化,且必須在呼叫之前連接網路。

登入資料管理 (裝置內產生的金鑰)

當 中的 FORCE_GENERATE_NEW_KEY_PAIR 設定為 1 test_param_config.h時,裝置應用程式會產生新的裝置內金鑰對,並輸出公有金鑰。裝置應用程式在與 echo 伺服器建立 TLS 連線時,會使用 echo_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATE 做為 echo 伺服器根 CA 和用戶端憑證。IDT 會在資格執行期間設定這些參數。

登入資料管理 (匯入金鑰)

裝置應用程式在與回應伺服器建立 TLS 連線時,使用 中的 echo_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATETRANSPORT_CLIENT_PRIVATE_KEY test_param_config.h做為回應伺服器根 CA、用戶端憑證和用戶端私有金鑰。IDT 會在資格執行期間設定這些參數。

測試

本節說明如何使用資格測試在本機測試傳輸界面。如需其他詳細資訊,請參閱 GitHub 上 FreeRTOS-Libraries-Integration-Tests 的 transport_interface 一節所提供的 README.md 檔案。

或者,您也可以使用 IDT 自動化執行。如需詳細資訊AWS IoT Device Tester ,請參閱FreeRTOS 使用者指南》中的 FreeRTOS

啟用測試

開啟 TRANSPORT_INTERFACE_TEST_ENABLED test_execution_config.h並將其定義為 1。

設定用於測試的 echo 伺服器

本機測試需要可從執行測試的裝置存取的 echo 伺服器。如果傳輸介面實作支援 TLS,回應伺服器必須支援 TLS。如果您還沒有,FreeRTOS-Libraries-Integration-Tests GitHub 儲存庫具有回應伺服器實作。

設定專案進行測試

在 中test_param_config.h,將 echo_SERVER_ENDPOINT echo_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 的資格,您必須使用 OTA PAL 和 OTA E2E 測試群組來驗證裝置的移植原始碼 AWS IoT Device Tester。請遵循 FreeRTOS 使用者指南中的使用 AWS IoT Device Tester for FreeRTOS 中的指示來設定 AWS IoT Device Tester 連接埠驗證。 FreeRTOS 若要測試特定程式庫的連接埠,必須在 資料夾中的 device.json 檔案中 AWS IoT Device Tester configs啟用正確的測試群組。