플랫폼 추상화 계층 API 구현

GitHub에서 소스 보기

OpenThread는 플랫폼과 플랫폼 제약이 없으며 좁은 범위의 플랫폼 추상화 계층(PAL)을 사용합니다. 이 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 드라이버를 설치합니다.
  • 동일한 함수 프로토타입을 사용하여 UART API 구현을 OpenThread 측에서 BSP와 함께 USB CDC 드라이버로 대체

라디오

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는 전체 레이어의 보안 애셋을 유지하는 데 사용되는 상위 레이어에 실제 순수 난수 생성기 (TRNG)를 제공합니다. API는 각 함수 호출마다 새로운 랜덤 숫자가 생성되도록 보장해야 합니다. TRNG의 영향을 받는 보안 애셋은 다음과 같습니다.

  • AES CCM nonce
  • 랜덤 지연 지터
  • 기기의 확장 주소
  • Trickle 타이머의 초기 무작위 기간
  • CoAP 토큰/메시지 ID

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

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

비휘발성 저장소

API 선언:

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

또는

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

위에 나열된 두 API 중 하나를 구현하면 비휘발성 저장소 요구사항을 충족할 수 있습니다. Flash API는 플래시 저장소 드라이버를 구현하는 반면, 설정 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, Radio, Random, Missc/Reset)을 초기화할 수도 있습니다.

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