14.1.1.2. De firmware bouwen¶
Met de omgeving uit De ontwikkelomgeving opzetten op zijn plaats is het bouwen van een firmware-image een kwestie van twee make-commando’s plus een TARGET-selectie.
14.1.1.2.1. Compileren¶
Bouw eerst mpy-cross, het host-hulpprogramma dat de bevroren .py-modules compileert tot bytecode (doe dit één keer, en opnieuw telkens wanneer je MicroPython bijwerkt):
make -j$(nproc) -C lib/micropython/mpy-cross
Bouw vervolgens de firmware voor een board, waarbij <TARGET> één van de namen uit de onderstaande tabel is:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) bouwt parallel over alle CPU-cores (gebruik op macOS -j$(sysctl -n hw.ncpu)). TARGET is verplicht – make zonder target breekt af met “Invalid or no TARGET specified”.
Een volledige eerste build, van begin tot eind:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Ondersteunde boards¶
TARGET-waarden zijn de mapnamen onder boards/. De camera’s en hun silicium:
Camera |
|
MCU |
Port |
Core |
|---|---|---|---|---|
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 (dual 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+ |
Bouw exact de TARGET voor jouw hardware – bijv. OPENMV4 voor de OpenMV Cam H7, OPENMV4P voor de H7 Plus, OPENMV_N6 voor de N6.
14.1.1.2.1.2. Build-uitvoer¶
Alles voor een board belandt in build/<TARGET>/bin/. Voor TARGET=OPENMV4 is dat build/OPENMV4/bin/, met daarin:
Bestand |
Wat het is |
|---|---|
|
Firmware-binary – geflasht door OpenMV IDE Tools -> Load Custom Firmware en door |
|
Firmware met debugsymbolen – het bestand waar je de debugger op richt |
|
De bootloader (alleen op boards met een ingeschakelde bootloader) |
|
Gecombineerd bootloader + firmware-image |
|
Alleen-lezen ROM-bestandssysteem-image die naast de firmware wordt geflasht |
De Alif AE3 is dual-core, dus die produceert firmware_M55_HP.elf / firmware_M55_HP.bin (de high-performance core) en een aparte firmware_M55_HE.elf / firmware_M55_HE.bin (de high-efficiency core) plus een inhoudsopgave- (TOC-)image die de boot-ROM vertelt waar de image van elke core zich bevindt.
14.1.1.2.1.3. Opschonen en herbouwen¶
Builds zijn per board geïsoleerd onder build/<TARGET>/. Om de build van één board te wissen:
make TARGET=<TARGET> clean
Er is geen distclean; clean heeft altijd een TARGET nodig. mpy-cross wordt gedeeld over de boards – als je MicroPython bijwerkt, herbouw het dan ook:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Om het flash-/RAM-gebruik van een build te rapporteren:
make TARGET=<TARGET> size
14.1.1.2.1.4. Bouwen in Docker (geen host-toolchain)¶
Als je liever niets op de host installeert (of je zit op een platform zonder native build), gebruik dan het Docker-pad:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Artefacten verschijnen in openmv/docker/build/<TARGET>. Voor herhaalde builds is er een incrementeel ontwikkelpad dat de repo op hetzelfde absolute pad binnen de container mount als op de host, zodat broncodepaden van de debugger zonder hertoewijzing worden opgelost:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Voer make clean-dev uit bij het wisselen van TARGET.
14.1.1.2.2. Build-opties¶
Het build-gedrag wordt geregeld door variabelen die op de make-commandoregel worden meegegeven, bijvoorbeeld:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
De variabelen die een firmware-ontwikkelaar zal gebruiken:
Variabele |
Standaard |
Effect |
|---|---|---|
|
(vereist) |
Het te bouwen board. Selecteert |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Welke debugger de |
Notitie
Er bestaan nog veel meer variabelen (camera-/sensordrivers, draadloze stacks, ML-backends, USB-stack, secure boot, enz.), maar die worden per board ingesteld in boards/<TARGET>/board_config.mk en worden normaal gesproken niet op de commandoregel overschreven. Het wijzigen ervan is boardaanpassing, geen normale ontwikkelaarsbuild – zie docs/boards.md in de firmware-repository.
Voor het dagelijks werk zijn de enige opties die je nodig hebt TARGET (altijd), DEBUG=1 (telkens wanneer je van plan bent te debuggen, zie De firmware debuggen) en af en toe V=1.