Настройте среду сборки

Посмотреть исходный код на GitHub

В целях содействия свободного и открытого развития, OpenThread использует CMake в сборках набора инструментов. В настоящее время этот набор инструментов требуется для переноса OpenThread на новую аппаратную платформу.

В будущем могут поддерживаться и другие инструменты сборки, но они выходят за рамки данного руководства по портированию.

Создать новый репозиторий

Первым шагом является создание нового дома для вашей аппаратной платформы. В этом руководстве мы будем создавать новое хранилище под названием ot-efr32 , который содержит слой абстракции платформы, SDK аппаратной платформы, и несколько полезных скриптов.

В этом примере мы создали SiliconLabs / 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
.
├── 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 папке. Сюда могут входить сценарии для таких задач, как загрузка, сборка, запуск средства анализа кода и тестовый сценарий для проверок CI GitHub.

Ниже приведены некоторые примеры скриптов, которые являются стандартными для большинства существующих репозиториев платформы.

bootstrap

Этот сценарий должен установить все инструменты и пакеты, необходимые для вашей аппаратной платформы. Он должен также выполнить openthread «s скрипт начальной загрузки , чтобы убедиться , что пользователь имеет все необходимое для построения стека OpenThread.

Смотрите сценарий начальной загрузки в ot-efr32 для примера.

build

CMake сценарий сборки должен позволять пользователям строить OpenThread стека для вашей платформы. Если ваш репозиторий определяет какие-либо примеры приложений, этот сценарий также должен их построить. Этот сценарий должен содержать основные параметры конфигурации системы, включая определения макросов для конкретной платформы.

Смотрите сценарий сборки в ot-efr32 для примера.

test

Сценарий тестирования может быть полезен пользователям для проверки изменений с использованием любых определенных вами тестов. Это может быть что угодно, как простое выполнение сборок для проверки работоспособности, так и сложное, например, запуск набора модульных тестов.

В ot-efr32 , сценарий просто выполняет build сценарий для каждой поддерживаемой платы на каждом из efr32 платформ.

Смотрите тестовый скрипт в ot-efr32 для примера.

make-pretty

Чтобы сохранить согласованный стиль, этот сценарий должен форматировать код, сценарии и файлы уценки.

Вы можете определить этот сценарий самостоятельно, но это может быть простым в использовании make-pretty скрипта, существующие операции РЕПО платформы использует. Призывы скрипта в openthread сценариев в стиле «s и помогают обеспечить единый стиль во всех OpenThread хранилищ.

Конфигурация скрипта компоновщика

GNU Linker скрипт описывает , как отобразить все разделы в исходных файлах ( .o файлы «объект» , порождаемый GNU Compiler Collection (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
)

Код запуска Toolchain

Код запуска Toolchain часто предоставляется вместе с BSP платформы. Этот код обычно:

  1. Реализует функцию ввода ( Reset_Handler ) исполняемой программы
  2. Определяет таблицу векторов прерываний
  3. Инициализирует кучу и стек
  4. Копирование .data секции из энергонезависимой памяти в ОЗУ
  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
    $
)