14.1.1.2. Laiteohjelmiston kääntäminen

Kehitysympäristön pystyttäminen-ohjeen mukaisen ympäristön ollessa paikallaan laiteohjelmistovedoksen kääntäminen on kaksi make-komentoa plus TARGET-valinta.

14.1.1.2.1. Kääntäminen

Käännä ensin mpy-cross, isäntätyökalu joka kääntää jäädytetyt .py-moduulit tavukoodiksi (tee tämä kerran, ja uudelleen aina kun päivität MicroPythonin):

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

Käännä sitten laiteohjelmisto kortille, missä <TARGET> on yksi alla olevan taulukon nimistä:

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

-j$(nproc) kääntää rinnakkain kaikilla CPU-ytimillä (macOS:ssä käytä -j$(sysctl -n hw.ncpu)). TARGET on pakollinen – make ilman kohdetta keskeytyy virheeseen ”Invalid or no TARGET specified”.

Täydellinen ensimmäinen käännös alusta loppuun:

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

14.1.1.2.1.1. Tuetut kortit

TARGET-arvot ovat hakemistonimet boards/-kansion alla. Kamerat ja niiden piit:

Kamera

TARGET

MCU

Portti

Ydin

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

Käännä laitteistollesi tarkka TARGET – esim. OPENMV4 OpenMV Cam H7:lle, OPENMV4P H7 Plus:lle, OPENMV_N6 N6:lle.

14.1.1.2.1.2. Käännöksen tuloste

Kaikki kortin tiedostot päätyvät hakemistoon build/<TARGET>/bin/. Arvolla TARGET=OPENMV4 se on build/OPENMV4/bin/, joka sisältää:

Tiedosto

Mikä se on

firmware.bin

Laiteohjelmiston binääri – flashataan OpenMV IDE:n Tools -> Load Custom Firmware -toiminnolla ja dfu-util-työkalulla

firmware.elf

Laiteohjelmisto virheenkorjaussymboleilla – tiedosto johon osoitat virheenkorjaajan

bootloader.bin / .elf

Käynnistyslatain (vain korteilla joilla käynnistyslatain on käytössä)

openmv.bin

Yhdistetty käynnistyslatain + laiteohjelmistovedos

romfs<n>.img

Vain luku -ROM-tiedostojärjestelmävedos, joka flashataan laiteohjelmiston rinnalle

Alif AE3 on kaksiytiminen, joten se tuottaa firmware_M55_HP.elf / firmware_M55_HP.bin (korkean suorituskyvyn ydin) ja erillisen firmware_M55_HE.elf / firmware_M55_HE.bin (korkean tehokkuuden ydin) sekä sisällysluettelo- (TOC) vedoksen, joka kertoo käynnistys-ROM:lle, missä kunkin ytimen vedos sijaitsee.

14.1.1.2.1.3. Puhdistus ja uudelleenkääntäminen

Käännökset on eristetty korttikohtaisesti hakemistoon build/<TARGET>/. Yhden kortin käännöksen pyyhkimiseen:

make TARGET=<TARGET> clean

distclean-komentoa ei ole; clean tarvitsee aina TARGET-arvon. mpy-cross on jaettu korttien kesken – jos päivität MicroPythonin, käännä myös se uudelleen:

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

Käännöksen flash-/RAM-käytön raportoimiseen:

make TARGET=<TARGET> size

14.1.1.2.1.4. Kääntäminen Dockerissa (ei isännän työkaluketjua)

Jos et halua asentaa mitään isäntään (tai olet alustalla ilman natiivia käännöstä), käytä Docker-polkua:

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

Tuotokset ilmestyvät hakemistoon openmv/docker/build/<TARGET>. Toistuviin käännöksiin on inkrementaalinen kehityspolku, joka liittää repositorion samaan absoluuttiseen polkuun kontin sisällä kuin isännässä, jolloin virheenkorjaajan lähdepolut ratkeavat ilman uudelleenkartoitusta:

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

Suorita make clean-dev vaihtaessasi TARGET-arvoa.

14.1.1.2.2. Käännösvalinnat

Käännöksen käyttäytymistä ohjataan make-komentoriville annettavilla muuttujilla, esimerkiksi:

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

Muuttujat joita laiteohjelmistokehittäjä käyttää:

Muuttuja

Oletus

Vaikutus

TARGET

(pakollinen)

Käännettävä kortti. Valitsee tiedoston boards/<TARGET>/board_config.mk, joka asettaa MCU:n, ytimen, muistikartan, USB-tunnukset ja käytössä olevat moduulit.

DEBUG

0

DEBUG=1 kääntää lipuilla -Og -ggdb3 (virheenkorjaukseen optimoitu, täysi GDB-virheenkorjaustieto) ja poistaa käytöstä MicroPythonin ROM-tekstin pakkauksen – tämä on käännös jota korjaat. DEBUG=0 kääntää lipuilla -O2 -DNDEBUG (pienempi, nopeampi, assertit pois) ja on julkaisukäännös.

V

0

V=1 tulostaa jokaisen kääntäjä-/linkkerikomennon lyhyen CC file.c -yhteenvedon sijaan. Käytä sitä tarkkojen lippujen näkemiseen tai käännösongelmien selvittämiseen.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 määrittelee OMV_DEBUG_PRINTF-makron ottaen käyttöön matalan tason virheenkorjauksen printf-tulosteen laiteohjelmistossa (yhdistä SWO/RTT:hen, katso Laiteohjelmiston virheenjäljitys).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 kääntää funktiokutsujen instrumentoinnin kanssa (-finstrument-functions, -DOMV_PROFILER_ENABLE=1), jotta voit profiloida missä aikaa kuluu. PROFILE_HASH=<N> asettaa profiloijan hajautustaulukon koon (kahden potenssi; oletus 256) ja PROFILE_IRQ=1 profiloi myös keskeytyskontekstissa suoritettavan koodin.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 lisää -fstack-protector-all – pinokanariat jotka pyydystävät pinopuskurin ylivuodot. Hyödyllinen muistinkorruptiota jäljitettäessä.

DEBUGGER

JLINK

Mitä virheenkorjaajaa make debug / make deploy -kohteet käyttävät. JLINK on oletus; NONE poistaa debug-kohteen käytöstä.

Muista

Muuttujia on paljon muitakin (kamera-/sensoriajurit, langattomat pinot, ML-taustajärjestelmät, USB-pino, suojattu käynnistys jne.), mutta ne asetetaan korttikohtaisesti tiedostossa boards/<TARGET>/board_config.mk eikä niitä yleensä ohiteta komentoriviltä. Niiden muuttaminen on kortin mukauttamista, ei normaali kehittäjän käännös – katso docs/boards.md laiteohjelmiston repositoriossa.

Arkityöhön ainoat tarvitsemasi valinnat ovat TARGET (aina), DEBUG=1 (aina kun aiot korjata virheitä, katso Laiteohjelmiston virheenjäljitys) ja toisinaan V=1.