14.1.1.2. Membangun firmware

Dengan lingkungan dari Menyiapkan lingkungan pengembangan yang sudah tersedia, membangun image firmware hanya membutuhkan dua perintah make ditambah pemilihan TARGET.

14.1.1.2.1. Kompilasi

Pertama bangun mpy-cross, alat host yang mengkompilasi modul .py beku menjadi bytecode (lakukan ini sekali, dan lagi setiap kali Anda memperbarui MicroPython):

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

Kemudian bangun firmware untuk sebuah board, di mana <TARGET> adalah salah satu nama dari tabel di bawah:

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

-j$(nproc) membangun secara paralel di semua core CPU (di macOS gunakan -j$(sysctl -n hw.ncpu)). TARGET wajib -- make tanpa target akan dibatalkan dengan "Invalid or no TARGET specified".

Build pertama yang lengkap, dari awal hingga akhir:

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

14.1.1.2.1.1. Board yang didukung

Nilai TARGET adalah nama direktori di bawah boards/. Kamera dan silikon mereka:

Kamera

TARGET

MCU

Port

Core

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+

Bangun TARGET yang tepat untuk perangkat keras Anda -- misalnya OPENMV4 untuk OpenMV Cam H7, OPENMV4P untuk H7 Plus, OPENMV_N6 untuk N6.

14.1.1.2.1.2. Keluaran build

Semua hasil untuk sebuah board disimpan di build/<TARGET>/bin/. Untuk TARGET=OPENMV4 yaitu build/OPENMV4/bin/, berisi:

File

Keterangan

firmware.bin

Binary firmware -- di-flash oleh OpenMV IDE Tools -> Load Custom Firmware dan oleh dfu-util

firmware.elf

Firmware dengan simbol debug -- file yang ditunjuk oleh debugger

bootloader.bin / .elf

Bootloader (hanya pada board dengan bootloader yang diaktifkan)

openmv.bin

Image gabungan bootloader + firmware

romfs<n>.img

Image filesystem ROM hanya-baca yang di-flash bersama firmware

Alif AE3 adalah dual-core, sehingga menghasilkan firmware_M55_HP.elf / firmware_M55_HP.bin (core berkinerja tinggi) dan firmware_M55_HE.elf / firmware_M55_HE.bin terpisah (core hemat energi) ditambah image table-of-contents (TOC) yang memberi tahu boot ROM di mana image setiap core berada.

14.1.1.2.1.3. Membersihkan dan membangun ulang

Build diisolasi per board di bawah build/<TARGET>/. Untuk menghapus build satu board:

make TARGET=<TARGET> clean

Tidak ada distclean; clean selalu memerlukan TARGET. mpy-cross dibagi di seluruh board -- jika Anda memperbarui MicroPython, bangun ulang juga:

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

Untuk melaporkan penggunaan flash/RAM dari sebuah build:

make TARGET=<TARGET> size

14.1.1.2.1.4. Membangun di Docker (tanpa toolchain host)

Jika Anda tidak ingin menginstal apa pun di host (atau Anda berada di platform tanpa build native), gunakan jalur Docker:

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

Artefak muncul di openmv/docker/build/<TARGET>. Untuk build berulang ada jalur dev inkremental yang me-mount repo di path absolut yang sama di dalam container seperti di host, sehingga path sumber debugger dapat di-resolve tanpa remapping:

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

Jalankan make clean-dev saat mengganti TARGET.

14.1.1.2.2. Opsi build

Perilaku build dikontrol oleh variabel yang diteruskan pada baris perintah make, misalnya:

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

Variabel yang akan digunakan oleh pengembang firmware:

Variabel

Default

Efek

TARGET

(diperlukan)

Board yang akan dibangun. Memilih boards/<TARGET>/board_config.mk, yang mengatur MCU, core, peta memori, USB ID, dan modul yang diaktifkan.

DEBUG

0

DEBUG=1 mengkompilasi dengan -Og -ggdb3 (dioptimalkan untuk debug, info debug GDB lengkap) dan menonaktifkan kompresi ROM-text MicroPython -- ini adalah build yang Anda debug. DEBUG=0 mengkompilasi dengan -O2 -DNDEBUG (lebih kecil, lebih cepat, assert dimatikan) dan merupakan build rilis.

V

0

V=1 mencetak setiap perintah compiler/linker alih-alih ringkasan singkat CC file.c. Gunakan untuk melihat flag yang tepat atau mendiagnosis masalah build.

DEBUG_PRINTF

0

DEBUG_PRINTF=1 mendefinisikan OMV_DEBUG_PRINTF, mengaktifkan output printf debug tingkat rendah dalam firmware (pasangkan dengan SWO/RTT, lihat Men-debug firmware).

PROFILE_ENABLE

0

PROFILE_ENABLE=1 membangun dengan instrumentasi pemanggilan fungsi (-finstrument-functions, -DOMV_PROFILER_ENABLE=1) sehingga Anda dapat membuat profil di mana waktu dihabiskan. PROFILE_HASH=<N> mengatur ukuran hash-table profiler (pangkat dua; default 256) dan PROFILE_IRQ=1 juga membuat profil kode yang berjalan dalam konteks interupsi.

STACK_PROTECTOR

0

STACK_PROTECTOR=1 menambahkan -fstack-protector-all -- canary stack yang mendeteksi stack-buffer overflow. Berguna saat mengejar korupsi memori.

DEBUGGER

JLINK

Debugger mana yang digunakan oleh target make debug / make deploy. JLINK adalah default; NONE menonaktifkan target debug.

Catatan

Banyak variabel lain yang ada (driver kamera/sensor, wireless stack, backend ML, USB stack, secure boot, dll.), tetapi variabel-variabel tersebut diatur per-board di boards/<TARGET>/board_config.mk dan biasanya tidak di-override dari baris perintah. Mengubahnya adalah kustomisasi board, bukan build pengembang normal -- lihat docs/boards.md di repositori firmware.

Untuk pekerjaan sehari-hari, satu-satunya opsi yang Anda butuhkan adalah TARGET (selalu), DEBUG=1 (kapan pun Anda bermaksud untuk debug, lihat Men-debug firmware), dan sesekali V=1.