빌드 환경 설정

<ph type="x-smartling-placeholder"></ph> GitHub에서 소스 보기

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

다른 빌드 도구 모음도 향후 지원될 수 있지만 이 도구 모음 내에 포함되어 있지는 않습니다. 확인하시기 바랍니다.

새 저장소 만들기

첫 번째 단계는 하드웨어 플랫폼을 위한 새로운 홈을 설정하는 것입니다. 이 가이드에서는 플랫폼 추상화 레이어, 하드웨어 플랫폼의 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 링커 스크립트 입력 파일 (.o '객체' 파일)의 모든 섹션을 매핑하는 방법을 설명합니다. 출력 파일 (GCC)을 최종 출력 파일( 예: .elf). 또한 각 세그먼트의 스토리지 위치를 결정합니다. 항목 주소와 같은 정보를 포함할 수 있습니다. 플랫폼별 링커 스크립트는 종종 플랫폼의 BSP와 함께 제공됩니다.

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

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
    $
)