Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

플랫폼 추상화 계층 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 측의 UCD API 구현을 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는 전체 OpenThread 네트워크에 대한 보안 애셋을 유지하는 데 사용되는 상위 레이어에 순수 난수 생성기 (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, 라디오, 임의, 기타/재설정)의 초기화를 구현할 수도 있습니다.

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