플랫폼 추상화 계층 API 구현

GitHub에서 소스 보기

OpenThread는 좁은 플랫폼 추상화 레이어(PAL)를 사용하여 OS 및 플랫폼에 종속되지 않습니다. 이 PAL은 다음을 정의합니다.

포팅 아키텍처
  • 알람이 있는 자유 실행 타이머용 알람 인터페이스
  • CLI 및 Spinel 메시지를 통신하기 위한 버스 인터페이스 (UART, SPI)
  • IEEE 802.15.4-2006 통신을 위한 무선 인터페이스
  • GCC 관련 초기화 루틴
  • 순수 난수 생성을 위한 엔트로피
  • 비휘발성 구성 저장소용 설정 서비스
  • OpenThread 로그 메시지 전송을 위한 로깅 인터페이스
  • 시스템별 초기화 루틴

모든 API는 기본 하드웨어 추상화 레이어 (HAL) 빌드 지원 패키지 (BSP)를 기반으로 구현되어야 합니다.

API 파일은 다음 디렉터리에 배치해야 합니다.

유형 디렉터리
플랫폼별 PAL 구현 /openthread/examples/platforms/platform-name
헤더 파일 - 비휘발성 저장소 API /openthread/examples/platforms/utils
기타 모든 헤더 파일 /openthread/include/openthread/platform
HAL BSP /openthread/third_party/platform-name

알람

API 선언:

/openthread/include/openthread/platform/alarm-milli.h

Alarm API는 상위 레이어 타이머 구현을 위한 기본 타이밍 및 알람 서비스를 제공합니다.

알람 서비스 유형에는 밀리초마이크로초의 두 가지가 있습니다. 밀리초는 새 하드웨어 플랫폼에 필요합니다. 마이크로초는 선택사항입니다.

UART

API 선언:

/openthread/examples/platforms/utils/uart.h

UART API는 UART 인터페이스를 통해 기본 직렬 포트 통신을 구현합니다.

OpenThread CLINCP 부가기능은 호스트 측과 상호작용하기 위해 UART 인터페이스에 종속되지만 UART API 지원은 선택사항입니다. 하지만 새 하드웨어 플랫폼 예시에서 이러한 부가기능을 사용할 계획이 없더라도 다음과 같은 이유로 지원을 추가하는 것이 좋습니다.

  • CLI는 포트가 올바르게 작동하는지 확인하는 데 유용합니다.
  • 하네스 자동화 도구는 테스트 및 인증 목적으로 UART 인터페이스를 사용하여 OpenThread를 제어합니다.

타겟 하드웨어 플랫폼이 UART가 아닌 USB CDC 모듈을 지원하는 경우 다음을 실행해야 합니다.

  • 호스트 측에 올바른 USB CDC 드라이버 설치
  • 동일한 함수 프로토타입을 사용하여 OpenThread 측에서 UART API 구현을 USB CDC 드라이버 (BSP 포함)로 교체합니다.

라디오

API 선언:

/openthread/include/openthread/platform/radio.h

Radio API는 상위 IEEE 802.15.4 MAC 레이어에서 호출하는 모든 필수 함수를 정의합니다. 무선 칩은 2.4GHz IEEE 802.15.4-2006 사양을 완전히 준수해야 합니다.

향상된 저전력 기능으로 인해 OpenThread에서는 모든 플랫폼이 기본적으로 자동 프레임 대기 (간접 전송)를 구현해야 하며 소스 주소 일치 테이블도 radio.h 소스 파일에 구현되어야 합니다.

하지만 새 하드웨어 플랫폼 예시가 리소스 제한이 있는 경우 소스 주소 테이블을 길이 0으로 정의할 수 있습니다. 자세한 내용은 자동 프레임 대기 중을 참고하세요.

기타/재설정

API 선언:

/openthread/include/openthread/platform/misc.h

Misc/Reset API는 칩의 소프트웨어를 재설정하고 마지막 재설정 이유를 쿼리하는 메서드를 제공합니다.

엔트로피

API 선언:

/openthread/include/openthread/platform/entropy.h

Entropy API는 전체 OpenThread 네트워크의 보안 애셋을 유지하는 데 사용되는 상위 레이어의 진짜 난수 생성기 (TRNG)를 제공합니다. API는 각 함수 호출마다 새 랜덤 숫자가 생성되도록 보장해야 합니다. TRNG의 영향을 받는 보안 애셋에는 다음이 포함됩니다.

  • AES CCM nonce
  • 무작위 지연 잡음
  • 기기의 확장 주소
  • 전송 타이머의 초기 무작위 기간
  • CoAP 토큰/메시지 ID

많은 플랫폼에서 이미 BSP 패키지에 API를 노출하는 랜덤 숫자 생성기를 통합했습니다. 타겟 하드웨어 플랫폼이 TRNG를 지원하지 않는 경우 ADC 모듈 샘플링을 활용하여 고정 길이의 랜덤 숫자를 생성하는 것이 좋습니다. 필요한 경우 TRNG 요구사항 (uint32_t)을 충족하기 위해 여러 반복을 통해 샘플링합니다.

매크로 MBEDTLS_ENTROPY_HARDWARE_ALT1로 설정된 경우 이 API는 mbedTLS 라이브러리에 사용되는 하드웨어 엔트로피를 생성하는 메서드도 제공해야 합니다.

비휘발성 저장소

API 선언:

/openthread/include/openthread/platform/flash.h

또는

/openthread/include/openthread/platform/settings.h

비휘발성 저장소 요구사항은 위에 나열된 두 API 중 하나를 구현하여 충족할 수 있습니다. Flash API는 플래시 저장소 드라이버를 구현하는 반면, Settings API는 상위 레이어에 기본 플래시 작업 구현을 위한 함수를 제공합니다.

이러한 API는 상위 레이어에 다음을 노출합니다.

  • 애플리케이션 데이터를 저장하는 데 사용되는 사용 가능한 비휘발성 스토리지 크기입니다 (예: 활성/대기 중인 운영 데이터 세트, 현재 네트워크 매개변수, 재설정 후 다시 연결하기 위한 스레드 기기 사용자 인증 정보).
  • 플래시 상태 읽기, 쓰기, 지우기, 쿼리 작업

플랫폼 예시의 핵심 구성 파일에서 OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE를 사용하여 플랫폼에서 사용해야 하는 API를 나타냅니다. 1로 설정된 경우 Flash API를 구현해야 합니다. 그렇지 않으면 Settings API를 구현해야 합니다.

이 플래그는 /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h 파일에 설정해야 합니다.

로깅

API 선언:

/openthread/include/openthread/platform/logging.h

Logging API는 여러 수준의 디버그 출력을 사용할 수 있는 OpenThread의 로깅 및 디버그 기능을 구현합니다. 새 하드웨어 플랫폼 예시에서 OpenThread의 로깅을 활용할 계획이 없는 경우 이 API는 선택사항입니다.

가장 높고 가장 상세한 수준은 OPENTHREAD_LOG_LEVEL_DEBG로, 모든 원시 패킷 정보를 출력하고 직렬 포트 또는 터미널을 통해 로그 줄을 기록합니다. 필요에 가장 적합한 디버그 수준을 선택합니다.

시스템별

API 선언:

/openthread/examples/platforms/openthread-system.h

시스템별 API는 주로 선택한 하드웨어 플랫폼의 초기화 및 역초기화 작업을 제공합니다. 이 API는 OpenThread 라이브러리 자체에서 호출되지 않지만 시스템/RTOS에 유용할 수 있습니다. 이 소스 파일에서 다른 모듈 (예: UART, 라디오, 랜덤, 기타/재설정)의 초기화를 구현할 수도 있습니다.

이 API의 구현은 사용 사례에 따라 다릅니다. 생성된 CLI 및 NCP 애플리케이션예시 플랫폼에 사용하려면 이 API를 구현해야 합니다. 그렇지 않으면 예시 플랫폼 드라이버를 시스템/RTOS에 통합하도록 모든 API를 구현할 수 있습니다.