14.1.1.2. Sestavení firmwaru

S prostředím z Nastavení vývojového prostředí na místě je sestavení obrazu firmwaru otázkou dvou příkazů make plus volby TARGET.

14.1.1.2.1. Kompilace

Nejprve sestavte mpy-cross, hostitelský nástroj, který kompiluje zamražené .py moduly do bytecode (udělejte to jednou a znovu vždy, když aktualizujete MicroPython):

make -j$(nproc) -C lib/micropython/mpy-cross

Poté sestavte firmware pro desku, kde <TARGET> je jedno ze jmen z tabulky níže:

make -j$(nproc) TARGET=<TARGET>

-j$(nproc) sestavuje paralelně napříč všemi jádry CPU (na macOS použijte -j$(sysctl -n hw.ncpu)). TARGET je povinný – make bez cíle se přeruší s hláškou „Invalid or no TARGET specified“.

Kompletní první sestavení od začátku do konce:

make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4

14.1.1.2.1.1. Podporované desky

Hodnoty TARGET jsou názvy adresářů pod boards/. Kamery a jejich čipy:

Kamera

TARGET

MCU

Port

Jádro

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+

Sestavte přesně ten TARGET, který odpovídá vašemu hardwaru – např. OPENMV4 pro OpenMV Cam H7, OPENMV4P pro H7 Plus, OPENMV_N6 pro N6.

14.1.1.2.1.2. Výstup sestavení

Vše pro danou desku skončí v build/<TARGET>/bin/. Pro TARGET=OPENMV4 je to build/OPENMV4/bin/ a obsahuje:

Soubor

Co to je

firmware.bin

Binární soubor firmwaru – nahrávaný OpenMV IDE přes Tools -> Load Custom Firmware a pomocí dfu-util

firmware.elf

Firmware s ladicími symboly – soubor, na který nasměrujete debugger

bootloader.bin / .elf

Bootloader (pouze na deskách s povoleným bootloaderem)

openmv.bin

Kombinovaný obraz bootloader + firmware

romfs<n>.img

Obraz souborového systému ROM určeného pouze ke čtení, nahrávaný spolu s firmwarem

Alif AE3 je dvoujádrový, takže produkuje firmware_M55_HP.elf / firmware_M55_HP.bin (vysoce výkonné jádro) a samostatný firmware_M55_HE.elf / firmware_M55_HE.bin (energeticky úsporné jádro) plus obraz s obsahem (TOC), který sdělí boot ROM, kde se nachází obraz každého jádra.

14.1.1.2.1.3. Čištění a opětovné sestavení

Sestavení jsou izolována pro každou desku pod build/<TARGET>/. Pro vymazání sestavení jedné desky:

make TARGET=<TARGET> clean

Neexistuje distclean; clean vždy potřebuje TARGET. mpy-cross je sdílen mezi deskami – pokud aktualizujete MicroPython, sestavte jej znovu také:

make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross

Pro vypsání využití flash/RAM daného sestavení:

make TARGET=<TARGET> size

14.1.1.2.1.4. Sestavení v Dockeru (bez hostitelského toolchainu)

Pokud byste raději na hostiteli nic neinstalovali (nebo jste na platformě bez nativního sestavení), použijte cestu přes Docker:

git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>

Artefakty se objeví v openmv/docker/build/<TARGET>. Pro opakovaná sestavení existuje inkrementální vývojová cesta, která připojí repozitář na stejnou absolutní cestu uvnitř kontejneru jako na hostiteli, takže se zdrojové cesty pro debugger vyřeší bez přemapování:

make install-sdk
make build-firmware-dev TARGET=<TARGET>

Při přepínání TARGET spusťte make clean-dev.

14.1.1.2.2. Volby sestavení

Chování sestavení je řízeno proměnnými předanými na příkazové řádce make, například:

make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1

Proměnné, které vývojář firmwaru použije:

Proměnná

Výchozí

Účinek

TARGET

(povinné)

Deska, kterou sestavit. Vybírá boards/<TARGET>/board_config.mk, který nastavuje MCU, jádro, mapu paměti, USB ID a povolené moduly.

DEBUG

0

DEBUG=1 kompiluje s -Og -ggdb3 (optimalizováno pro ladění, plné ladicí informace GDB) a vypíná kompresi ROM-textu MicroPythonu – toto je sestavení, které ladíte. DEBUG=0 kompiluje s -O2 -DNDEBUG (menší, rychlejší, asserty vypnuté) a je to vydávané sestavení.

V

0

V=1 vypíše každý příkaz kompilátoru/linkeru místo krátkého souhrnu CC file.c. Použijte jej k zobrazení přesných příznaků nebo k diagnostice problémů se sestavením.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 definuje OMV_DEBUG_PRINTF, čímž povolí nízkoúrovňový ladicí printf výstup ve firmwaru (kombinujte s SWO/RTT, viz Ladění firmwaru).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 sestavuje s instrumentací volání funkcí (-finstrument-functions, -DOMV_PROFILER_ENABLE=1), takže můžete profilovat, kde se tráví čas. PROFILE_HASH=<N> nastaví velikost hashovací tabulky profileru (mocnina dvou; výchozí 256) a PROFILE_IRQ=1 profiluje také kód běžící v kontextu přerušení.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 přidává -fstack-protector-all – zásobníkové kanárky, které zachytí přetečení zásobníkového bufferu. Užitečné při pronásledování poškození paměti.

DEBUGGER

JLINK

Který debugger používají cíle make debug / make deploy. JLINK je výchozí; NONE zakáže cíl debug.

Poznámka

Existuje mnohem více proměnných (ovladače kamer/senzorů, bezdrátové stacky, ML backendy, USB stack, secure boot atd.), ale ty se nastavují pro každou desku v boards/<TARGET>/board_config.mk a obvykle se na příkazové řádce nepřepisují. Jejich změna je přizpůsobení desky, nikoli běžné vývojářské sestavení – viz docs/boards.md v repozitáři firmwaru.

Pro každodenní práci jsou jediné volby, které potřebujete, TARGET (vždy), DEBUG=1 (kdykoli hodláte ladit, viz Ladění firmwaru) a občas V=1.