<ph type="x-smartling-placeholder"></ph>
GitHub에서 소스 보기
자유롭고 개방된 개발을 촉진하기 위해 OpenThread는 CMake를 사용하여 빌드 도구 모음에 적용됩니다 현재 이 도구 모음은 포팅에 필요합니다. 새로운 하드웨어 플랫폼으로 이전합니다.
다른 빌드 도구 모음도 향후 지원될 수 있지만 이 도구 모음 내에 포함되어 있지는 않습니다. 확인하시기 바랍니다.
새 저장소 만들기
첫 번째 단계는 하드웨어 플랫폼을 위한 새로운 홈을 설정하는 것입니다. 이 가이드에서는 플랫폼 추상화 레이어, 하드웨어 플랫폼의 SDK, 몇 가지 유용한 스크립트가 포함된 ot-efr32라는 새 저장소를 만듭니다.
이 예에서는 GitHub에 SiliconLabs/ot-efr32 저장소를 만들고 ~/repos/ot-efr32에 클론했습니다.
mkdir -p ~/reposcd ~/reposgit clone git@github.com:SiliconLabs/ot-efr32.gitCloning 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 statusOn 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_partygit submodule add git@github.com:SiliconLabs/sdk_support.gitCloning 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 스택을 빌드할 수 있도록 허용해야 합니다. 저장소에서 예시 애플리케이션을 정의하면 이 스크립트도 이를 빌드합니다. 이 스크립트에는 플랫폼별 매크로 정의를 비롯한 기본 시스템 설정 옵션이 포함되어야 합니다.
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와 함께 제공되는 경우가 많습니다. 이 코드는 일반적으로 다음과 같습니다.
- 실행 프로그램의 엔트리 함수 (
Reset_Handler)를 구현합니다. - 인터럽트 벡터 테이블 정의
- 힙 및 스택 초기화
.data섹션을 비휘발성 메모리에서 RAM으로 복사합니다.- 애플리케이션 기본 함수로 이동하여 애플리케이션 로직 실행
시작 코드 (C 또는 어셈블리 소스 코드)는 플랫폼의
openthread-platform-name 라이브러리, 그렇지 않은 경우 링커에 사용되는 일부 키 변수
스크립트를 올바르게 인용할 수 없음:
src/CMakeLists.txt
예: ot-cc2538의 startup-gcc.c - src/CMakeLists.txt
add_library(openthread-cc2538
alarm.c
...
startup-gcc.c
...
system.c
logging.c
uart.c
$
)