Как скомпилировать пример приложения Zephyr как отдельное приложение?

Документация Zephyr рекомендует использовать пример-приложение в качестве отправной точки. Однако данный подход с использованием git неверен. Согласно файлу readme примера, его необходимо инициализировать с помощью запада:

west init -m https://github.com/zephyrproject-rtos/example-application --mr main my-workspace

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

Поэтому я хотел бы реализовать это приложение как отдельное приложение, т. е. исходный код Zephyr должен находиться в совершенно другом каталоге.

Просто бег

west build -b nucleo_wl55jc . --pristine

внутри клонированных результатов example-application

usage: west [-h] [-z ZEPHYR_BASE] [-v] [-V] <command> ...
west: unknown command "build"; do you need to run this inside a workspace?
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам следует активировать зефирный венв,

source ~/zephyrproject/.venv/bin/activate

А также переменные среды zephyr необходимо определить, это можно сделать с помощью

source ~/zephyrproject/zephyr-env.sh

Я уже это сделал, иначе команда west вообще не распознавалась бы.

Erlkoenig 21.08.2024 08:36
Ответ принят как подходящий

После долгих проб и ошибок я понял это сам.

Основная проблема заключается в создании приложения без топологии T2, т. е. с приложением, не являющимся корневым каталогом. Приложение по-прежнему будет «корнем» процесса сборки, но оно должно зависеть от других компонентов в репозитории примера приложения (в частности, от драйверов, файлов dts и привязок, определений платы), которые также должны быть собраны.

Для этого все, кроме приложения, должно находиться в собственном каталоге, который не является родительским для каталога приложения. Поэтому создайте каталог (например, с именем common, но имя не имеет значения) внутри example-application и переместите в него все, кроме каталога app:

mkdir common
shopt -s extglob 
mv ./!(.git|app|common) common

Поскольку папка common уже содержит файл zephyr/module.yml, это уже полноценный модуль Zephyr.

Отредактируйте app/CMakeLists.txt и добавьте зависимость к этому модулю, используя EXTRA_ZEPHYR_MODULES:

cmake_minimum_required(VERSION 3.13.1)

# This has to go before find_package!
list(APPEND EXTRA_ZEPHYR_MODULES 
  ${CMAKE_CURRENT_SOURCE_DIR}/../common
)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

Если example-application находится где-то в дереве исходного кода Zephyr, его можно построить напрямую с помощью west. Если нет, то перед этим необходимо установить переменную среды ZEPHYR_BASE:

ZEPHYR_BASE = "/home/me/zephyrproject/zephyr"
west build -b custom_plank app --pristine

Другие вопросы по теме