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) виконує паралельну збірку на всіх ядрах процесора (на 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/. Камери та їх кремнієва база:

Камера

TARGET

MCU

Порт

Ядро

OpenMV Cam M4

OPENMV2

STM32F427

stm32

Cortex-M4

OpenMV Cam M7

OPENMV3

STM32F765

stm32

Cortex-M7

OpenMV Cam H7

OPENMV4

STM32H743

stm32

Cortex-M7

OpenMV Cam H7 Plus

OPENMV4P

STM32H743 + SDRAM

stm32

Cortex-M7

OpenMV Pure Thermal

OPENMVPT

STM32H743 + SDRAM

stm32

Cortex-M7

OpenMV Cam N6

OPENMV_N6

STM32N657

stm32

Cortex-M55

OpenMV Cam RT1062

OPENMV_RT1060

MIMXRT1062

mimxrt

Cortex-M7

OpenMV AE3

OPENMV_AE3

Alif Ensemble (dual M55)

alif

Cortex-M55

Arduino Portenta H7

ARDUINO_PORTENTA_H7

STM32H747

stm32

Cortex-M7

Arduino Giga

ARDUINO_GIGA

STM32H747

stm32

Cortex-M7

Arduino Nicla Vision

ARDUINO_NICLA_VISION

STM32H747

stm32

Cortex-M7

Arduino Nano 33 BLE Sense

ARDUINO_NANO_33_BLE_SENSE

nRF52840

nrf

Cortex-M4

Arduino Nano RP2040 Connect

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/, що містить:

Файл

Опис

firmware.bin

Бінарний файл мікропрограми – прошивається через OpenMV IDE Tools -> Load Custom Firmware та за допомогою dfu-util

firmware.elf

Мікропрограма з символами налагодження – файл, на який вказує налагоджувач

bootloader.bin / .elf

Завантажувач (лише на платах з увімкненим завантажувачем)

openmv.bin

Комбінований образ завантажувача + мікропрограми

romfs<n>.img

Образ файлової системи ROM тільки для читання, що прошивається разом з мікропрограмою

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

Змінні, які використовує розробник мікропрограми:

Змінна

За замовчуванням

Ефект

TARGET

(обов’язкова)

Плата для збірки. Вибирає boards/<TARGET>/board_config.mk, що встановлює MCU, ядро, карту пам’яті, USB ID та ввімкнені модулі.

DEBUG

0

DEBUG=1 компілює з -Og -ggdb3 (оптимізовано для налагодження, повна інформація для GDB) та вимикає стиснення ROM-тексту MicroPython – це збірка для налагодження. DEBUG=0 компілює з -O2 -DNDEBUG (менший, швидший, ствердження вимкнено) і є збіркою для випуску.

V

0

V=1 виводить кожну команду компілятора/компоновщика замість короткого підсумку CC file.c. Використовуйте для перегляду точних прапорів або діагностики проблем збірки.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 визначає OMV_DEBUG_PRINTF, вмикаючи низькорівневий відлагоджувальний вивід printf у мікропрограмі (в парі з SWO/RTT, дивіться Налагодження мікропрограми).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 збирає з інструментуванням викликів функцій (-finstrument-functions, -DOMV_PROFILER_ENABLE=1), щоб можна було профілювати, де витрачається час. PROFILE_HASH=<N> встановлює розмір хеш-таблиці профілювальника (степінь двійки; за замовчуванням 256), а PROFILE_IRQ=1 також профілює код, що виконується в контексті переривань.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 додає -fstack-protector-all – canary-маркери стека, що виявляють переповнення буфера стека. Корисно при пошуку пошкодження пам’яті.

DEBUGGER

JLINK

Який налагоджувач використовують цілі make debug / make deploy. JLINK є стандартним; NONE вимикає ціль debug.

Примітка

Існує багато інших змінних (драйвери камери/датчика, бездротові стеки, ML-бекенди, USB-стек, безпечне завантаження тощо), але вони встановлюються для кожної плати в boards/<TARGET>/board_config.mk і зазвичай не перевизначаються в командному рядку. Їх зміна є налаштуванням плати, а не звичайною збіркою для розробника – дивіться docs/boards.md у репозиторії мікропрограми.

Для повсякденної роботи вам потрібні лише TARGET (завжди), DEBUG=1 (завжди, коли ви збираєтесь налагоджувати, дивіться Налагодження мікропрограми), та іноді V=1.