14.1.1.2. Compilar el firmware¶
Con el entorno de Configurar el entorno de desarrollo ya preparado, compilar una imagen de firmware son dos comandos make más una selección de TARGET.
14.1.1.2.1. Compilación¶
Primero compile mpy-cross, la herramienta de host que compila los módulos .py congelados a bytecode (hágalo una vez, y de nuevo cada vez que actualice MicroPython):
make -j$(nproc) -C lib/micropython/mpy-cross
Después compile el firmware para una placa, donde <TARGET> es uno de los nombres de la tabla siguiente:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) compila en paralelo en todos los núcleos de la CPU (en macOS use -j$(sysctl -n hw.ncpu)). TARGET es obligatorio – ejecutar make sin objetivo aborta con «Invalid or no TARGET specified».
Una primera compilación completa, de principio a fin:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Placas compatibles¶
Los valores de TARGET son los nombres de directorio dentro de boards/. Las cámaras y su silicio:
Cámara |
|
MCU |
Puerto |
Núcleo |
|---|---|---|---|---|
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 dual) |
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+ |
Compile el TARGET exacto para su hardware – p. ej. OPENMV4 para la OpenMV Cam H7, OPENMV4P para la H7 Plus, OPENMV_N6 para la N6.
14.1.1.2.1.2. Salida de la compilación¶
Todo lo de una placa acaba en build/<TARGET>/bin/. Para TARGET=OPENMV4 eso es build/OPENMV4/bin/, que contiene:
Archivo |
Qué es |
|---|---|
|
Binario del firmware – grabado por OpenMV IDE en Tools -> Load Custom Firmware y por |
|
Firmware con símbolos de depuración – el archivo al que apunta el depurador |
|
El bootloader (solo en placas con un bootloader habilitado) |
|
Imagen combinada de bootloader + firmware |
|
Imagen del sistema de archivos ROM de solo lectura grabada junto al firmware |
La Alif AE3 es de doble núcleo, por lo que produce firmware_M55_HP.elf / firmware_M55_HP.bin (el núcleo de alto rendimiento) y un firmware_M55_HE.elf / firmware_M55_HE.bin aparte (el núcleo de alta eficiencia), más una imagen de tabla de contenidos (TOC) que le indica a la ROM de arranque dónde reside la imagen de cada núcleo.
14.1.1.2.1.3. Limpiar y recompilar¶
Las compilaciones están aisladas por placa bajo build/<TARGET>/. Para borrar la compilación de una placa:
make TARGET=<TARGET> clean
No existe distclean; clean siempre necesita un TARGET. mpy-cross es compartido entre placas – si actualiza MicroPython, recompílelo también:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Para informar del uso de flash/RAM de una compilación:
make TARGET=<TARGET> size
14.1.1.2.1.4. Compilar en Docker (sin cadena de herramientas en el host)¶
Si prefiere no instalar nada en el host (o está en una plataforma sin compilación nativa), use la vía de Docker:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Los artefactos aparecen en openmv/docker/build/<TARGET>. Para compilaciones repetidas hay una vía de desarrollo incremental que monta el repositorio en la misma ruta absoluta dentro del contenedor que en el host, de modo que las rutas de fuentes del depurador se resuelven sin reasignación:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Ejecute make clean-dev al cambiar de TARGET.
14.1.1.2.2. Opciones de compilación¶
El comportamiento de la compilación se controla mediante variables pasadas en la línea de comandos de make, por ejemplo:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
Las variables que usará un desarrollador de firmware:
Variable |
Por defecto |
Efecto |
|---|---|---|
|
(requerido) |
La placa que compilar. Selecciona |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Qué depurador usan los objetivos |
Nota
Existen muchas más variables (controladores de cámara/sensor, pilas inalámbricas, backends de ML, pila USB, arranque seguro, etc.), pero esas se establecen por placa en boards/<TARGET>/board_config.mk y normalmente no se sobrescriben en la línea de comandos. Cambiarlas es personalización de placa, no una compilación normal de desarrollador – véase docs/boards.md en el repositorio del firmware.
Para el trabajo cotidiano las únicas opciones que necesita son TARGET (siempre), DEBUG=1 (siempre que vaya a depurar, véase Depuración del firmware) y, ocasionalmente, V=1.