14.1.1.2. Construirea firmware-ului¶
Cu mediul din Configurarea mediului de dezvoltare pregătit, construirea unei imagini de firmware înseamnă două comenzi make plus o selecție TARGET.
14.1.1.2.1. Compilare¶
Mai întâi construiește mpy-cross, instrumentul gazdă care compilează modulele .py înghețate în bytecode (fă acest lucru o dată și din nou ori de câte ori actualizezi MicroPython):
make -j$(nproc) -C lib/micropython/mpy-cross
Apoi construiește firmware-ul pentru o placă, unde <TARGET> este unul dintre numele din tabelul de mai jos:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) construiește în paralel pe toate nucleele CPU (pe macOS folosește -j$(sysctl -n hw.ncpu)). TARGET este obligatoriu – make fără țintă se oprește cu „Invalid or no TARGET specified”.
O primă construire completă, de la cap la coadă:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Plăci suportate¶
Valorile TARGET sunt numele directoarelor de sub boards/. Camerele și siliciul lor:
Cameră |
|
MCU |
Port |
Nucleu |
|---|---|---|---|---|
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+ |
Construiește exact TARGET-ul potrivit hardware-ului tău – de ex. OPENMV4 pentru OpenMV Cam H7, OPENMV4P pentru H7 Plus, OPENMV_N6 pentru N6.
14.1.1.2.1.2. Ieșirea construirii¶
Tot ce ține de o placă ajunge în build/<TARGET>/bin/. Pentru TARGET=OPENMV4 acela este build/OPENMV4/bin/, conținând:
Fișier |
Ce este |
|---|---|
|
Binarul de firmware – flash-uit de OpenMV IDE prin Tools -> Load Custom Firmware și de |
|
Firmware cu simboluri de depanare – fișierul pe care îl indici depanatorului |
|
Bootloader-ul (doar pe plăcile cu un bootloader activat) |
|
Imagine combinată bootloader + firmware |
|
Imaginea sistemului de fișiere ROM doar-citire, flash-uită alături de firmware |
Alif AE3 este cu nucleu dublu, așa că produce firmware_M55_HP.elf / firmware_M55_HP.bin (nucleul de înaltă performanță) și un firmware_M55_HE.elf / firmware_M55_HE.bin separat (nucleul de înaltă eficiență), plus o imagine de tabel de cuprins (TOC) care îi spune boot ROM-ului unde se află imaginea fiecărui nucleu.
14.1.1.2.1.3. Curățare și reconstruire¶
Construirile sunt izolate per placă sub build/<TARGET>/. Pentru a șterge construirea unei singure plăci:
make TARGET=<TARGET> clean
Nu există distclean; clean are întotdeauna nevoie de un TARGET. mpy-cross este partajat între plăci – dacă actualizezi MicroPython, reconstruiește-l și pe el:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Pentru a raporta utilizarea flash/RAM a unei construiri:
make TARGET=<TARGET> size
14.1.1.2.1.4. Construire în Docker (fără lanț de instrumente pe gazdă)¶
Dacă preferi să nu instalezi nimic pe gazdă (sau ești pe o platformă fără o construire nativă), folosește calea Docker:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Artefactele apar în openmv/docker/build/<TARGET>. Pentru construiri repetate există o cale de dezvoltare incrementală care montează depozitul la aceeași cale absolută în interiorul containerului ca pe gazdă, astfel încât căile sursă ale depanatorului se rezolvă fără remapare:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Rulează make clean-dev când schimbi TARGET.
14.1.1.2.2. Opțiuni de construire¶
Comportamentul construirii este controlat de variabile transmise în linia de comandă make, de exemplu:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
Variabilele pe care le va folosi un dezvoltator de firmware:
Variabilă |
Implicit |
Efect |
|---|---|---|
|
(obligatoriu) |
Placa de construit. Selectează |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Care depanator folosesc țintele |
Notă
Există multe alte variabile (drivere de cameră/senzor, stive wireless, backend-uri ML, stiva USB, boot securizat etc.), dar acestea sunt setate per placă în boards/<TARGET>/board_config.mk și în mod normal nu sunt suprascrise în linia de comandă. Modificarea lor este personalizare a plăcii, nu o construire normală de dezvoltator – vezi docs/boards.md în depozitul firmware-ului.
Pentru munca de zi cu zi, singurele opțiuni de care ai nevoie sunt TARGET (întotdeauna), DEBUG=1 (ori de câte ori intenționezi să depanezi, vezi Depanarea firmware-ului) și ocazional V=1.