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

빌드 환경 설정

GitHub에서 소스 보기

자유롭고 열린 개발을 촉진하기 위해 OpenThread는 빌드 도구 모음에서 CMake를 사용합니다. 현재 이 도구 모음은 OpenThread를 새 하드웨어 플랫폼으로 포팅하는 데 필요합니다.

향후 다른 빌드 도구 모음이 지원될 수도 있지만 이 포팅 가이드의 범위를 벗어나는 것은 아닙니다.

새 저장소 만들기

첫 번째 단계는 하드웨어 플랫폼을 위한 새로운 홈을 설정하는 것입니다. 이 가이드에서는 플랫폼 추상화 계층, 하드웨어 플랫폼의 SDK, 몇 가지 유용한 스크립트가 포함된 ot-efr32라는 새 저장소를 만듭니다.

이 예에서는 GitHub에 SiliconLabs/ot-efr32 저장소를 만들어 ~/repos/ot-efr32에 클론했습니다.

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning into 'ot-efr32'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234
Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done.
Resolving deltas: 100% (194/194), done.
git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

저장소 구조

OpenThread GitHub 조직의 기존 플랫폼 저장소와 일관성을 유지하려면 다음과 같이 저장소를 구조화해야 할 수 있습니다.

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
폴더 설명
examples 선택사항 애플리케이션 예
openthread 하위 모듈로서의 openthread 저장소
script 빌드, 테스트, 린트 스크립트
src 플랫폼 추상화 계층 구현
third_party 타사 소스 위치

하위 모듈 추가

다음 단계는 openthread 및 기타 필요한 저장소를 하위 모듈로 추가하는 것입니다.

git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.

이 예에서는 Silicon Labs Gecko SDK의 라이트 버전을 third_party에 하위 모듈로 추가하겠습니다.

cd third_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning into '/home/user/repos/ot-efr32/third_party/sdk_support'...
remote: Enumerating objects: 32867, done.
remote: Counting objects: 100% (8181/8181), done.
remote: Compressing objects: 100% (3098/3098), done.
remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686
Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done.
Resolving deltas: 100% (19797/19797), done.

스크립트

일반적인 작업을 더 쉽게 수행하기 위해 script 폴더에 일부 스크립트를 만들 수 있습니다. 여기에는 부트스트랩, 빌드, 코드 린터 실행 등의 작업을 위한 스크립트와 GitHub CI 검사를 위한 테스트 스크립트가 포함될 수 있습니다.

다음은 대부분의 기존 플랫폼 저장소의 표준인 스크립트의 예입니다.

bootstrap

이 스크립트는 하드웨어 플랫폼에 필요한 모든 도구와 패키지를 설치합니다. 또한 openthread의 부트스트랩 스크립트를 실행하여 사용자가 OpenThread 스택을 빌드하는 데 필요한 모든 것을 갖도록 해야 합니다.

ot-efr32부트스트랩 스크립트에서 예를 확인하세요.

build

CMake 빌드 스크립트를 통해 사용자가 플랫폼에 맞는 OpenThread 스택을 빌드할 수 있어야 합니다. 저장소에 예시 애플리케이션이 정의되어 있으면 이 스크립트도 빌드되어야 합니다. 이 스크립트에는 플랫폼별 매크로 정의를 비롯한 기본 시스템 구성 옵션이 포함되어 있어야 합니다.

ot-efr32빌드 스크립트에서 예를 확인하세요.

test

테스트 스크립트는 사용자가 정의한 테스트를 사용하여 변경사항을 테스트하는 데 유용합니다. 이는 상태 확인 빌드를 실행하는 것만큼 간단하거나 단위 테스트 모음을 실행하는 것만큼 복잡할 수 있습니다.

ot-efr32에서 이 스크립트는 각 efr32 플랫폼에서 지원되는 모든 보드의 build 스크립트를 실행하기만 합니다.

ot-efr32테스트 스크립트에서 예를 참고하세요.

make-pretty

스타일을 일관되게 유지하려면 이 스크립트에서 코드, 스크립트, 마크다운 파일의 형식을 지정해야 합니다.

이 스크립트를 직접 정의할 수도 있지만, 기존 플랫폼 저장소에서 사용 중인 make-pretty 스크립트를 사용하는 것이 가장 쉬운 방법일 수 있습니다. 이 스크립트는 openthread의 스타일 스크립트를 호출하고 모든 OpenThread 저장소에서 일관된 스타일을 보장합니다.

링커 스크립트 구성

GNU Linker 스크립트는 입력 파일 (GCC (GNU Compiler Collection)에 의해 생성된 .o '객체' 파일)의 모든 섹션을 최종 출력에 매핑하는 방법을 설명합니다. 파일 (예: .elf) 또한 실행 가능한 프로그램의 각 세그먼트의 스토리지 위치와 항목 주소를 결정합니다. 플랫폼별 링커 스크립트는 종종 플랫폼의 BSP와 함께 제공됩니다.

src/CMakeLists.txt의 플랫폼 CMake 대상에서 target_link_libraries를 사용하여 플랫폼별 링커 스크립트를 가리키도록 ld 도구를 구성합니다.

set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")

target_link_libraries(openthread-efr32mg12
    PRIVATE
        ot-config
    PUBLIC
        -T${LD_FILE}
        -Wl,--gc-sections -Wl,-Map=$.map
)

도구 모음 시작 코드

도구 모음 시작 코드는 플랫폼의 BSP와 함께 제공되는 경우가 많습니다. 이 코드는 일반적으로 다음과 같습니다.

  1. 실행 가능 프로그램의 입력 함수 (Reset_Handler)를 구현합니다.
  2. 인터럽트 벡터 테이블 정의
  3. 힙 및 스택 초기화
  4. .data 섹션을 비휘발성 메모리에서 RAM으로 복사합니다.
  5. 애플리케이션 기본 함수로 이동하여 애플리케이션 로직을 실행합니다.

시작 코드 (C 또는 어셈블리 소스 코드)는 플랫폼의 openthread-platform-name 라이브러리에 포함되어야 합니다. 그렇지 않으면 링커 스크립트에 사용되는 일부 키 변수를 올바르게 따옴표를 사용할 수 없습니다.

  • src/CMakeLists.txt

: ot-cc2538startup-gcc.c - src/CMakeLists.txt

add_library(openthread-cc2538
    alarm.c
...
    startup-gcc.c
...
    system.c
    logging.c
    uart.c
    $
)