14.1.1.2. Сборка прошивки¶
Когда окружение из Настройка среды разработки готово, сборка образа прошивки сводится к двум командам make плюс выбору TARGET.
14.1.1.2.1. Компиляция¶
Сначала соберите mpy-cross – хост-инструмент, который компилирует замороженные модули .py в байт-код (делается один раз, а затем каждый раз при обновлении MicroPython):
make -j$(nproc) -C lib/micropython/mpy-cross
Затем соберите прошивку для платы, где <TARGET> – одно из имён из таблицы ниже:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) выполняет параллельную сборку на всех ядрах CPU (на macOS используйте -j$(sysctl -n hw.ncpu)). TARGET обязателен – make без цели прерывается с сообщением «Invalid or no TARGET specified».
Полная первая сборка, от начала до конца:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Поддерживаемые платы¶
Значения TARGET – это имена каталогов в boards/. Камеры и их кремний:
Камера |
|
MCU |
Порт |
Ядро |
|---|---|---|---|---|
OpenMV Cam M4 |
|
STM32F427 |
stm32 |
Cortex-M4 |
OpenMV Cam M7 |
|
STM32F765 |
stm32 |
Cortex-M7 |
OpenMV Cam H7 |
|
STM32H743 |
stm32 |
Cortex-M7 |
OpenMV Cam H7 Plus |
|
STM32H743 + SDRAM |
stm32 |
Cortex-M7 |
OpenMV Pure Thermal |
|
STM32H743 + SDRAM |
stm32 |
Cortex-M7 |
OpenMV Cam N6 |
|
STM32N657 |
stm32 |
Cortex-M55 |
OpenMV Cam RT1062 |
|
MIMXRT1062 |
mimxrt |
Cortex-M7 |
OpenMV AE3 |
|
Alif Ensemble (двойной M55) |
alif |
Cortex-M55 |
Arduino Portenta H7 |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Giga |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Nicla Vision |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Nano 33 BLE Sense |
|
nRF52840 |
nrf |
Cortex-M4 |
Arduino Nano RP2040 Connect |
|
RP2040 |
rp2 |
Cortex-M0+ |
Собирайте именно тот TARGET, который соответствует вашему оборудованию – например, OPENMV4 для OpenMV Cam H7, OPENMV4P для H7 Plus, OPENMV_N6 для N6.
14.1.1.2.1.2. Результат сборки¶
Всё для платы попадает в build/<TARGET>/bin/. Для TARGET=OPENMV4 это build/OPENMV4/bin/, содержащий:
Файл |
Что это |
|---|---|
|
Бинарный файл прошивки – прошивается через OpenMV IDE Tools -> Load Custom Firmware и через |
|
Прошивка с отладочными символами – файл, на который вы указываете отладчику |
|
Загрузчик (только на платах с включённым загрузчиком) |
|
Объединённый образ загрузчик + прошивка |
|
Образ файловой системы ROM только для чтения, прошиваемый вместе с прошивкой |
Alif AE3 двухъядерный, поэтому он производит firmware_M55_HP.elf / firmware_M55_HP.bin (высокопроизводительное ядро) и отдельные firmware_M55_HE.elf / firmware_M55_HE.bin (энергоэффективное ядро) плюс образ оглавления (TOC), который сообщает загрузочному ROM, где находится образ каждого ядра.
14.1.1.2.1.3. Очистка и пересборка¶
Сборки изолированы по платам в build/<TARGET>/. Чтобы стереть сборку одной платы:
make TARGET=<TARGET> clean
Команды distclean нет; clean всегда требует TARGET. mpy-cross общий для всех плат – если вы обновляете MicroPython, пересоберите и его:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Чтобы сообщить об использовании флеш-памяти/RAM в сборке:
make TARGET=<TARGET> size
14.1.1.2.1.4. Сборка в Docker (без хост-тулчейна)¶
Если вы предпочитаете ничего не устанавливать на хост (или работаете на платформе без нативной сборки), используйте путь через Docker:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Артефакты появляются в openmv/docker/build/<TARGET>. Для повторных сборок существует инкрементальный путь разработки, который монтирует репозиторий по тому же абсолютному пути внутри контейнера, что и на хосте, так что пути к исходникам для отладчика разрешаются без переотображения:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Запускайте make clean-dev при смене TARGET.
14.1.1.2.2. Параметры сборки¶
Поведение сборки управляется переменными, передаваемыми в командной строке make, например:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
Переменные, которые будет использовать разработчик прошивки:
Переменная |
По умолчанию |
Эффект |
|---|---|---|
|
(обязательно) |
Плата для сборки. Выбирает |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Какой отладчик используют цели |
Примечание
Существует множество других переменных (драйверы камер/датчиков, беспроводные стеки, ML-бэкенды, USB-стек, безопасная загрузка и т. д.), но они задаются для каждой платы в boards/<TARGET>/board_config.mk и обычно не переопределяются в командной строке. Их изменение – это кастомизация платы, а не обычная сборка разработчика – см. docs/boards.md в репозитории прошивки.
Для повседневной работы единственные параметры, которые вам нужны, – это TARGET (всегда), DEBUG=1 (когда вы намерены отлаживать, см. Отладка прошивки) и изредка V=1.