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

빌드 환경 설정

GitHub에서 소스 보기

무료 및 오픈 개발을 촉진하기 위해, OpenThread는 사용 CMake를 빌드 툴 체인에. 현재 이 툴체인은 OpenThread를 새로운 하드웨어 플랫폼으로 이식하는 데 필요합니다.

다른 빌드 도구 모음이 향후 지원될 수 있지만 이 포팅 가이드의 범위에 포함되지 않습니다.

새 저장소 만들기

첫 번째 단계는 하드웨어 플랫폼을 위한 새 홈을 설정하는 것입니다. 이 가이드에서는, 우리라는 이름의 새 저장소 생성됩니다 ot-efr32 플랫폼 추상화 계층, 하드웨어 플랫폼의 SDK, 그리고 몇 가지 유용한 스크립트가 포함되어 있습니다.

이 예에서는 생성 된 실리콘 래 버러 토리스 / OT-efr32의 GitHub의에 저장소를하고 그것에 복제 ~/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
.
\u251c\u2500\u2500 examples/
\u251c\u2500\u2500 openthread/
\u251c\u2500\u2500 script/
\u251c\u2500\u2500 src/
\u251c\u2500\u2500 third_party/
\u251c\u2500\u2500 CMakeLists.txt
\u251c\u2500\u2500 LICENSE
\u2514\u2500\u2500 README.md
폴더 기술
examples 옵션 예제 응용 프로그램
openthread openthread 서브 모듈로 저장소
script 빌드, 테스트, 린팅을 위한 스크립트
src 플랫폼 추상화 계층 구현
third_party 제3자 소스의 위치

하위 모듈 추가

다음 단계는 추가하는 것입니다 openthread 서브 모듈로 및 기타 필요한 REPOS를

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.

이 예를 들어, 우리는의 서브 모듈로 실리콘 랩 게코 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 , 스크립트는 단순히 실행 build efr32 각 플랫폼에서 지원되는 모든 보드 스크립트를.

참고 항목 테스트 스크립트 에서 ot-efr32 예제.

make-pretty

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

이 스크립트를 직접 정의 할 수 있지만 사용하는 것이 가장 쉬운 방법 일 수도 make-pretty 기존 플랫폼의 repos 사용하는 스크립트를. 스크립트에 전화 openthread 의 스타일 스크립트와 모든 OpenThread 저장소 일관된 스타일을 보장하는 데 도움이됩니다.

링커 스크립트 구성

GNU 링커 스크립트는 입력 파일의 모든 섹션 (매핑하는 방법에 대해 설명합니다 .o (예를 들어, 최종 출력 파일에 GNU 컴파일러 컬렉션 (GCC)에 의해 생성 된 "개체"파일) .elf ). 또한 실행 프로그램의 각 세그먼트의 저장 위치와 항목 주소도 결정합니다. 플랫폼별 링커 스크립트는 종종 플랫폼의 BSP와 함께 제공됩니다.

구성 ld 사용하여 플랫폼 별 링커 스크립트를 차례로 도구 target_link_libraries 에서 플랫폼에 CMake 목표를 src/CMakeLists.txt :

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

: startup-gcc.c 에서 ot-cc2538 - src/CMakeLists.txt

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