14.1.1.2. Izgradnja ugrađenog programa (firmware)

Uz okruženje iz Postavljanje razvojnog okruženja postavljeno, izgradnja firmware slike svodi se na dvije make naredbe plus odabir TARGET.

14.1.1.2.1. Prevođenje

Najprije izgradite mpy-cross, host alat koji prevodi zamrznute .py module u bajtkod (učinite to jednom, i ponovno svaki put kada ažurirate MicroPython):

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

Zatim izgradite firmware za pločicu, gdje je <TARGET> jedno od imena iz tablice u nastavku:

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

-j$(nproc) gradi paralelno na svim CPU jezgrama (na macOS-u koristite -j$(sysctl -n hw.ncpu)). TARGET je obavezan – make bez cilja prekida se s „Invalid or no TARGET specified”.

Potpuna prva izgradnja, od početka do kraja:

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

14.1.1.2.1.1. Podržane pločice

Vrijednosti TARGET imena su direktorija pod boards/. Kamere i njihov silicij:

Kamera

TARGET

MCU

Port

Jezgra

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 (dvostruki 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+

Izgradite točan TARGET za svoj hardver – npr. OPENMV4 za OpenMV Cam H7, OPENMV4P za H7 Plus, OPENMV_N6 za N6.

14.1.1.2.1.2. Izlaz izgradnje

Sve za pločicu završava u build/<TARGET>/bin/. Za TARGET=OPENMV4 to je build/OPENMV4/bin/, koji sadrži:

Datoteka

Što je to

firmware.bin

Binarna datoteka firmwarea – zapisuje je OpenMV IDE preko Tools -> Load Custom Firmware i dfu-util

firmware.elf

Firmware s simbolima za otklanjanje pogrešaka – datoteka na koju usmjeravate program za otklanjanje pogrešaka

bootloader.bin / .elf

Pokretač (bootloader) (samo na pločicama s omogućenim pokretačem)

openmv.bin

Kombinirana slika pokretača (bootloader) i firmwarea

romfs<n>.img

Slika ROM datotečnog sustava samo za čitanje koja se zapisuje uz firmware

Alif AE3 je dvojezgreni, pa proizvodi firmware_M55_HP.elf / firmware_M55_HP.bin (jezgra visokih performansi) i zasebni firmware_M55_HE.elf / firmware_M55_HE.bin (jezgra visoke učinkovitosti) plus sliku tablice sadržaja (TOC) koja boot ROM-u govori gdje se nalazi slika svake jezgre.

14.1.1.2.1.3. Čišćenje i ponovna izgradnja

Izgradnje su izolirane po pločici pod build/<TARGET>/. Za brisanje izgradnje jedne pločice:

make TARGET=<TARGET> clean

Ne postoji distclean; clean uvijek treba TARGET. mpy-cross je zajednički svim pločicama – ako ažurirate MicroPython, ponovno ga izgradite:

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

Za izvještaj o iskorištenosti flash memorije/RAM-a izgradnje:

make TARGET=<TARGET> size

14.1.1.2.1.4. Izgradnja u Dockeru (bez host toolchaina)

Ako radije ne biste ništa instalirali na host (ili ste na platformi bez izvorne izgradnje), koristite Docker put:

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

Artefakti se pojavljuju u openmv/docker/build/<TARGET>. Za ponovljene izgradnje postoji inkrementalni razvojni put koji montira repozitorij na istu apsolutnu putanju unutar kontejnera kao i na hostu, pa se izvorne putanje programa za otklanjanje pogrešaka razrješavaju bez premapiranja:

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

Pokrenite make clean-dev pri promjeni TARGET.

14.1.1.2.2. Opcije izgradnje

Ponašanje izgradnje upravlja se varijablama proslijeđenima u make naredbenom retku, primjerice:

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

Varijable koje će firmware razvojni programer koristiti:

Varijabla

Zadano

Učinak

TARGET

(obavezno)

Pločica koja se gradi. Odabire boards/<TARGET>/board_config.mk, koji postavlja MCU, jezgru, memorijsku mapu, USB ID-jeve i omogućene module.

DEBUG

0

DEBUG=1 prevodi s -Og -ggdb3 (optimizirano za otklanjanje pogrešaka, potpune GDB informacije za otklanjanje pogrešaka) i onemogućava kompresiju MicroPython ROM-teksta – to je izgradnja koju otklanjate. DEBUG=0 prevodi s -O2 -DNDEBUG (manje, brže, asserti isključeni) i predstavlja izdanje za objavu.

V

0

V=1 ispisuje svaku naredbu prevoditelja/povezivača umjesto kratkog sažetka CC file.c. Koristite ga za uvid u točne zastavice ili dijagnosticiranje problema u izgradnji.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 definira OMV_DEBUG_PRINTF, omogućujući niskorazinski printf izlaz za otklanjanje pogrešaka u firmwareu (uparite sa SWO/RTT, vidi Otklanjanje pogrešaka u ugrađenom programu (firmware)).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 gradi s instrumentacijom poziva funkcija (-finstrument-functions, -DOMV_PROFILER_ENABLE=1) tako da možete profilirati gdje se troši vrijeme. PROFILE_HASH=<N> postavlja veličinu hash-tablice profilera (potencija broja dva; zadano 256), a PROFILE_IRQ=1 također profilira kod koji se izvodi u kontekstu prekida.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 dodaje -fstack-protector-all – kanarinčiće stoga koji hvataju prelijevanja međuspremnika stoga. Korisno pri traganju za oštećenjem memorije.

DEBUGGER

JLINK

Koji program za otklanjanje pogrešaka koriste ciljevi make debug / make deploy. JLINK je zadani; NONE onemogućava cilj debug.

Napomena

Postoji još mnogo varijabli (upravljački programi kamere/senzora, bežični stogovi, ML pozadinski sustavi, USB stog, sigurno pokretanje itd.), ali one se postavljaju po pločici u boards/<TARGET>/board_config.mk i obično se ne nadjačavaju u naredbenom retku. Njihova promjena je prilagodba pločice, a ne uobičajena razvojna izgradnja – vidi docs/boards.md u repozitoriju firmwarea.

Za svakodnevni rad jedine opcije koje trebate jesu TARGET (uvijek), DEBUG=1 (kad god namjeravate otklanjati pogreške, vidi Otklanjanje pogrešaka u ugrađenom programu (firmware)) i povremeno V=1.