14.1.1.2. 建置韌體¶
在備妥 設定開發環境 中的環境後,建置韌體映像只需兩個 make 指令,外加選定一個 TARGET。
14.1.1.2.1. 編譯¶
首先建置 mpy-cross,這是將凍結的 .py 模組編譯成位元組碼的主機端工具(執行一次即可,並在每次更新 MicroPython 時重新執行):
make -j$(nproc) -C lib/micropython/mpy-cross
接著為某塊開發板建置韌體,其中 <TARGET> 是下表中名稱之一:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) 會在所有 CPU 核心上平行建置(在 macOS 上請使用 -j$(sysctl -n hw.ncpu))。TARGET 為必填,未指定目標就執行 make 會以 "Invalid or no TARGET specified" 中止。
一次完整的首次建置,從頭到尾:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. 支援的開發板¶
TARGET 的值即 boards/ 之下的目錄名稱。各相機及其晶片如下:
相機 |
|
MCU |
Port |
核心 |
|---|---|---|---|---|
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) |
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+ |
請為你的硬體建置確切的 TARGET,例如 OpenMV Cam H7 用 OPENMV4、H7 Plus 用 OPENMV4P、N6 用 OPENMV_N6。
14.1.1.2.1.2. 建置輸出¶
某塊開發板的所有產物都會落在 build/<TARGET>/bin/。以 TARGET=OPENMV4 為例即 build/OPENMV4/bin/,其中包含:
檔案 |
其內容 |
|---|---|
|
韌體二進位檔,由 OpenMV IDE 的 Tools -> Load Custom Firmware 以及 |
|
帶有除錯符號的韌體,是你讓除錯器指向的檔案 |
|
開機載入程式(僅出現在啟用了開機載入程式的開發板上) |
|
開機載入程式與韌體的合併映像 |
|
與韌體一同燒錄的唯讀 ROM 檔案系統映像 |
Alif AE3 為雙核心,因此會產生 firmware_M55_HP.elf / firmware_M55_HP.bin(高效能核心)與另一組 firmware_M55_HE.elf / firmware_M55_HE.bin(高效率核心),外加一個目錄表(TOC)映像,用以告知開機 ROM 各核心的映像位於何處。
14.1.1.2.1.3. 清理與重新建置¶
各開發板的建置在 build/<TARGET>/ 之下彼此隔離。若要清除某一塊開發板的建置:
make TARGET=<TARGET> clean
並沒有 distclean;clean 一律需要指定 TARGET。mpy-cross 由各開發板共用,若你更新了 MicroPython,也請一併重新建置它:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
若要回報某次建置的 flash/RAM 用量:
make TARGET=<TARGET> size
14.1.1.2.1.4. 在 Docker 中建置(無主機端工具鏈)¶
如果你寧可不在主機上安裝任何東西(或你所在的平台沒有原生建置),可使用 Docker 路徑:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
產物會出現在 openmv/docker/build/<TARGET>。對於重複建置,有一條增量開發路徑,它會將儲存庫掛載到容器內與主機上相同的絕對路徑,如此除錯器的原始碼路徑無需重新對應即可解析:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
切換 TARGET 時請執行 make clean-dev。
14.1.1.2.2. 建置選項¶
建置行為由在 make 命令列上傳入的變數控制,例如:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
韌體開發者會用到的變數:
變數 |
預設值 |
效果 |
|---|---|---|
|
(必填) |
要建置的開發板。會選定 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
備註
還有更多變數(相機/感測器驅動程式、無線堆疊、ML 後端、USB 堆疊、安全開機等),但那些是在 boards/<TARGET>/board_config.mk 中逐板設定,通常不會在命令列上覆寫。更動它們屬於開發板自訂,而非一般的開發者建置,請參見韌體儲存庫中的 docs/boards.md。
對於日常工作,你唯一需要的選項是 TARGET(一律需要)、DEBUG=1(每當你打算除錯時,參見 為韌體除錯),以及偶爾用到的 V=1。