14.1.1.2. Biên dịch firmware¶
Với môi trường từ Thiết lập môi trường phát triển đã sẵn sàng, việc biên dịch ảnh firmware chỉ cần hai lệnh make cộng với việc chọn TARGET.
14.1.1.2.1. Biên dịch¶
Đầu tiên hãy biên dịch mpy-cross, công cụ trên máy chủ biên dịch các module .py đóng băng thành bytecode (thực hiện một lần, và lại khi bạn cập nhật MicroPython):
make -j$(nproc) -C lib/micropython/mpy-cross
Sau đó biên dịch firmware cho một board, trong đó <TARGET> là một trong các tên từ bảng bên dưới:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) biên dịch song song trên tất cả các lõi CPU (trên macOS sử dụng -j$(sysctl -n hw.ncpu)). TARGET là bắt buộc -- make không có target sẽ hủy với thông báo "Invalid or no TARGET specified".
Một quá trình biên dịch đầu tiên hoàn chỉnh, từ đầu đến cuối:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Các board được hỗ trợ¶
Các giá trị TARGET là tên thư mục trong boards/. Các camera và silicon của chúng:
Camera |
|
MCU |
Port |
Lõi |
|---|---|---|---|---|
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+ |
Hãy biên dịch đúng TARGET cho phần cứng của bạn -- ví dụ: OPENMV4 cho OpenMV Cam H7, OPENMV4P cho H7 Plus, OPENMV_N6 cho N6.
14.1.1.2.1.2. Đầu ra biên dịch¶
Tất cả mọi thứ cho một board được đặt trong build/<TARGET>/bin/. Với TARGET=OPENMV4 đó là build/OPENMV4/bin/, chứa:
Tệp |
Nội dung |
|---|---|
|
Nhị phân firmware -- được nạp bởi OpenMV IDE Tools -> Load Custom Firmware và bởi |
|
Firmware với ký hiệu debug -- tệp bạn trỏ debugger vào |
|
Bootloader (chỉ trên các board có bootloader được bật) |
|
Ảnh kết hợp bootloader + firmware |
|
Ảnh hệ thống tệp ROM chỉ đọc được nạp cùng với firmware |
Alif AE3 là dual-core, vì vậy nó tạo ra firmware_M55_HP.elf / firmware_M55_HP.bin (lõi hiệu suất cao) và firmware_M55_HE.elf / firmware_M55_HE.bin riêng biệt (lõi hiệu quả cao) cộng với ảnh mục lục (TOC) cho boot ROM biết vị trí ảnh của mỗi lõi.
14.1.1.2.1.3. Dọn dẹp và biên dịch lại¶
Các bản biên dịch được tách biệt theo từng board trong build/<TARGET>/. Để xóa bản biên dịch của một board:
make TARGET=<TARGET> clean
Không có distclean; clean luôn cần TARGET. mpy-cross được dùng chung cho tất cả board -- nếu bạn cập nhật MicroPython, hãy biên dịch lại nó:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Để báo cáo mức sử dụng flash/RAM của một bản biên dịch:
make TARGET=<TARGET> size
14.1.1.2.1.4. Biên dịch trong Docker (không cần toolchain trên máy chủ)¶
Nếu bạn không muốn cài đặt bất cứ thứ gì trên máy chủ (hoặc bạn đang ở một nền tảng không có bản dựng gốc), hãy sử dụng đường dẫn Docker:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Các artifact xuất hiện trong openmv/docker/build/<TARGET>. Đối với các bản biên dịch lặp lại, có một đường dẫn phát triển tăng dần gắn kết repo tại cùng đường dẫn tuyệt đối bên trong container như trên máy chủ, để các đường dẫn nguồn debugger có thể phân giải mà không cần ánh xạ lại:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Chạy make clean-dev khi chuyển đổi TARGET.
14.1.1.2.2. Tùy chọn biên dịch¶
Hành vi biên dịch được điều khiển bởi các biến truyền vào dòng lệnh make, ví dụ:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
Các biến mà nhà phát triển firmware sẽ sử dụng:
Biến |
Mặc định |
Tác dụng |
|---|---|---|
|
(bắt buộc) |
Board cần biên dịch. Chọn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Debugger nào mà các target |
Ghi chú
Còn nhiều biến khác nữa (driver camera/cảm biến, stack không dây, backend ML, stack USB, secure boot, v.v.), nhưng chúng được đặt theo từng board trong boards/<TARGET>/board_config.mk và thường không bị ghi đè trên dòng lệnh. Thay đổi chúng là tùy chỉnh board, không phải bản biên dịch nhà phát triển thông thường -- xem docs/boards.md trong kho firmware.
Đối với công việc hàng ngày, các tùy chọn duy nhất bạn cần là TARGET (luôn luôn), DEBUG=1 (khi bạn có ý định debug, xem Gỡ lỗi firmware), và đôi khi V=1.