네트워크 전송 인터페이스 이식 - 무료 RTOS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

네트워크 전송 인터페이스 이식

TLS 라이브러리 통합

전송 계층 보안(TLS) 인증의 경우 선호하는 TLS 스택을 사용합니다. FreeRTOS 라이브러리로 테스트되었으므로 Mbed TLS를 사용하는 것이 좋습니다. 이 GitHub 리포지토리에서 예제를 찾을 수 있습니다.

디바이스에서 사용하는 TLS 구현에 관계없이 TCP/IP 스택을 사용하여 TLS 스택의 기본 전송 후크를 구현해야 합니다. AWS 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를 사용하는 경우 src/transport_interface_tests.cmakequalification_test.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로 설정한 경우 디바이스 애플리케이션은 새 디바이스 내 키 페어를 생성하고 퍼블릭 키를 출력합니다. 디바이스 애플리케이션은 에코 서버와 TLS 연결을 설정할 때 ECHO_SERVER_ROOT_CATRANSPORT_CLIENT_CERTIFICATE를 에코 서버 루트 CA 및 클라이언트 인증서로 사용합니다. IDT는 검증 실행 중에 이러한 파라미터를 설정합니다.

보안 인증 정보 관리(키 가져오기)

디바이스 애플리케이션은 에코 서버와 TLS 연결을 설정할 때 test_param_config.hECHO_SERVER_ROOT_CA, TRANSPORT_CLIENT_CERTIFICATETRANSPORT_CLIENT_PRIVATE_KEY를 에코 서버 루트 CA, 클라이언트 인증서 및 클라이언트 프라이빗 키로 사용합니다. IDT는 검증 실행 중에 이러한 파라미터를 설정합니다.

테스트

이 섹션에서는 검증 테스트를 사용하여 로컬에서 전송 인터페이스를 테스트하는 방법을 설명합니다. 추가 세부 정보는 GitHub에서 FreeRTOS-Libraries-Integration-Tests의 transport_interface 섹션에 제공된 README.md 파일을 통해 확인할 수 있습니다.

또는 IDT를 사용하여 실행을 자동화할 수도 있습니다. 자세한 내용은 FreeRTOS 사용 설명서FreeRTOS용 AWS IoT Device Tester를 참조하세요.

테스트 활성화

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 사용 설명서FreeRTOS용 AWS IoT Device Tester 사용에 나와 있는 지침에 따라 포트 검증을 위해 AWS IoT Device Tester를 설정합니다. 특정 라이브러리의 포트를 테스트하려면 AWS IoT Device Tester configs 폴더의 device.json 파일에서 올바른 테스트 그룹을 활성화해야 합니다.