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 |
|
MCU |
Port |
Core |
|---|---|---|---|---|
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 (dual M55) |
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+ |
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 |
|---|---|
|
Binary firmware -- di-flash oleh OpenMV IDE Tools -> Load Custom Firmware dan oleh |
|
Firmware dengan simbol debug -- file yang ditunjuk oleh debugger |
|
Bootloader (hanya pada board dengan bootloader yang diaktifkan) |
|
Image gabungan bootloader + firmware |
|
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 |
|---|---|---|
|
(diperlukan) |
Board yang akan dibangun. Memilih |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Debugger mana yang digunakan oleh target |
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.