14.1.1.2. Bygga den fasta programvaran

Med miljön från Konfigurera utvecklingsmiljön på plats är det två make-kommandon plus ett TARGET-val att bygga en avbildning av den fasta programvaran.

14.1.1.2.1. Kompilering

Bygg först mpy-cross, värdverktyget som kompilerar de infrysta .py-modulerna till bytekod (gör detta en gång, och igen varje gång du uppdaterar MicroPython):

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

Bygg sedan den fasta programvaran för ett kort, där <TARGET> är ett av namnen från tabellen nedan:

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

-j$(nproc) bygger parallellt över alla CPU-kärnor (på macOS, använd -j$(sysctl -n hw.ncpu)). TARGET är obligatoriskt – make utan mål avbryts med ”Invalid or no TARGET specified”.

Ett komplett första bygge, från början till slut:

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

14.1.1.2.1.1. Stödda kort

TARGET-värdena är katalognamnen under boards/. Kamerorna och deras kisel:

Kamera

TARGET

MCU

Port

Kärna

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+

Bygg exakt det TARGET som passar din hårdvara – t.ex. OPENMV4 för OpenMV Cam H7, OPENMV4P för H7 Plus, OPENMV_N6 för N6.

14.1.1.2.1.2. Byggutdata

Allt för ett kort hamnar i build/<TARGET>/bin/. För TARGET=OPENMV4 är det build/OPENMV4/bin/, som innehåller:

Fil

Vad det är

firmware.bin

Binär fast programvara – flashas av OpenMV IDE Tools -> Load Custom Firmware och av dfu-util

firmware.elf

Fast programvara med felsökningssymboler – filen du riktar felsökaren mot

bootloader.bin / .elf

Startladdaren (endast på kort med en startladdare aktiverad)

openmv.bin

Kombinerad avbildning av startladdare + fast programvara

romfs<n>.img

Skrivskyddad ROM-filsystemsavbildning som flashas tillsammans med den fasta programvaran

Alif AE3 är tvåkärnig, så den producerar firmware_M55_HP.elf / firmware_M55_HP.bin (högprestandakärnan) och en separat firmware_M55_HE.elf / firmware_M55_HE.bin (högeffektivitetskärnan) plus en innehållsförteckningsavbildning (TOC) som talar om för boot-ROM:et var varje kärnas avbildning ligger.

14.1.1.2.1.3. Rensa och bygga om

Byggen är isolerade per kort under build/<TARGET>/. För att radera ett korts bygge:

make TARGET=<TARGET> clean

Det finns ingen distclean; clean behöver alltid ett TARGET. mpy-cross delas mellan kort – om du uppdaterar MicroPython, bygg om det också:

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

För att rapportera ett bygges flash-/RAM-användning:

make TARGET=<TARGET> size

14.1.1.2.1.4. Bygga i Docker (ingen värdverktygskedja)

Om du hellre inte vill installera något på värden (eller om du är på en plattform utan ett inbyggt bygge), använd Docker-vägen:

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

Artefakterna dyker upp i openmv/docker/build/<TARGET>. För upprepade byggen finns en inkrementell utvecklingsväg som monterar repot på samma absoluta sökväg inuti containern som på värden, så att felsökarens källsökvägar löses upp utan ommappning:

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

Kör make clean-dev när du byter TARGET.

14.1.1.2.2. Byggalternativ

Byggbeteendet styrs av variabler som skickas på make-kommandoraden, till exempel:

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

Variablerna en utvecklare av fast programvara kommer att använda:

Variabel

Standard

Effekt

TARGET

(obligatorisk)

Kortet som ska byggas. Väljer boards/<TARGET>/board_config.mk, som ställer in MCU, kärna, minneskarta, USB-ID:n och aktiverade moduler.

DEBUG

0

DEBUG=1 kompilerar med -Og -ggdb3 (felsökningsoptimerad, full GDB-felsökningsinfo) och inaktiverar MicroPythons ROM-textkomprimering – detta är bygget du felsöker. DEBUG=0 kompilerar med -O2 -DNDEBUG (mindre, snabbare, asserts av) och är releasebygget.

V

0

V=1 skriver ut varje kompilator-/länkkommando istället för den korta sammanfattningen CC file.c. Använd det för att se exakta flaggor eller diagnostisera byggproblem.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 definierar OMV_DEBUG_PRINTF och aktiverar lågnivå-printf-felsökningsutdata i den fasta programvaran (kombinera med SWO/RTT, se Felsöka den fasta programvaran).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 bygger med instrumentering av funktionsanrop (-finstrument-functions, -DOMV_PROFILER_ENABLE=1) så att du kan profilera var tiden går. PROFILE_HASH=<N> ställer in profileringens hashtabellstorlek (tvåpotens; standard 256) och PROFILE_IRQ=1 profilerar även kod som körs i avbrottskontext.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 lägger till -fstack-protector-all – stack-kanariefåglar som fångar buffertöverskridningar på stacken. Användbart vid jakt på minneskorruption.

DEBUGGER

JLINK

Vilken felsökare målen make debug / make deploy använder. JLINK är standard; NONE inaktiverar målet debug.

Anteckning

Många fler variabler finns (drivrutiner för kamera/sensor, trådlösa stackar, ML-backender, USB-stack, säker uppstart, etc.), men dessa ställs in per kort i boards/<TARGET>/board_config.mk och överskrids normalt inte på kommandoraden. Att ändra dem är kortanpassning, inte ett normalt utvecklarbygge – se docs/boards.md i repot för den fasta programvaran.

För det dagliga arbetet är de enda alternativ du behöver TARGET (alltid), DEBUG=1 (närhelst du tänker felsöka, se Felsöka den fasta programvaran), och då och då V=1.