14.1.1.2. การสร้างเฟิร์มแวร์¶
เมื่อมีสภาพแวดล้อมจาก การตั้งค่าสภาพแวดล้อมการพัฒนา แล้ว การสร้างภาพเฟิร์มแวร์ต้องใช้คำสั่ง make สองคำสั่งและการเลือก TARGET
14.1.1.2.1. การคอมไพล์¶
ก่อนอื่นสร้าง mpy-cross ซึ่งเป็นเครื่องมือโฮสต์ที่คอมไพล์โมดูล .py ที่ถูกแช่แข็งเป็น bytecode (ทำครั้งเดียว และทำอีกครั้งเมื่ออัปเดต MicroPython):
make -j$(nproc) -C lib/micropython/mpy-cross
จากนั้นสร้างเฟิร์มแวร์สำหรับบอร์ด โดยที่ <TARGET> คือชื่อหนึ่งจากตารางด้านล่าง:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) สร้างแบบขนานบน CPU cores ทั้งหมด (บน macOS ใช้ -j$(sysctl -n hw.ncpu)) TARGET เป็นข้อบังคับ การใช้ make โดยไม่มี target จะหยุดทำงานพร้อมข้อความ "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 |
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+ |
สร้าง TARGET ที่ตรงกับฮาร์ดแวร์ของคุณ เช่น OPENMV4 สำหรับ OpenMV Cam H7, OPENMV4P สำหรับ H7 Plus, OPENMV_N6 สำหรับ N6
14.1.1.2.1.2. ผลลัพธ์การสร้าง¶
ทุกอย่างสำหรับบอร์ดจะอยู่ใน build/<TARGET>/bin/ สำหรับ TARGET=OPENMV4 คือ build/OPENMV4/bin/ ซึ่งมี:
ไฟล์ |
คำอธิบาย |
|---|---|
|
ไบนารีเฟิร์มแวร์ -- ติดตั้งโดย OpenMV IDE Tools -> Load Custom Firmware และโดย |
|
เฟิร์มแวร์พร้อมสัญลักษณ์ debug -- ไฟล์ที่คุณชี้ debugger ไป |
|
บูตโหลดเดอร์ (เฉพาะบนบอร์ดที่เปิดใช้งานบูตโหลดเดอร์) |
|
ภาพรวมบูตโหลดเดอร์ + เฟิร์มแวร์ |
|
ภาพระบบไฟล์ ROM แบบอ่านอย่างเดียวที่ติดตั้งพร้อมกับเฟิร์มแวร์ |
Alif AE3 เป็นแบบ dual-core จึงสร้าง firmware_M55_HP.elf / firmware_M55_HP.bin (core ประสิทธิภาพสูง) และ firmware_M55_HE.elf / firmware_M55_HE.bin แยกต่างหาก (core ประหยัดพลังงาน) รวมถึงภาพ table-of-contents (TOC) ที่บอก boot ROM ว่าภาพของแต่ละ core อยู่ที่ไหน
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 (ไม่ต้องมี toolchain บนโฮสต์)¶
หากคุณไม่ต้องการติดตั้งอะไรบนโฮสต์ (หรืออยู่บน platform ที่ไม่มีการสร้าง native) ให้ใช้เส้นทาง Docker:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Artifacts จะปรากฏใน openmv/docker/build/<TARGET> สำหรับการสร้างซ้ำ มีเส้นทาง dev แบบ incremental ที่ mount repo ที่ absolute path เดียวกันภายใน container เหมือนกับบนโฮสต์ ทำให้ source path ของ debugger แก้ไขได้โดยไม่ต้องทำการ remapping:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
รัน make clean-dev เมื่อเปลี่ยน TARGET
14.1.1.2.2. ตัวเลือกการสร้าง¶
พฤติกรรมการสร้างถูกควบคุมโดยตัวแปรที่ส่งผ่านในบรรทัดคำสั่ง make เช่น:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
ตัวแปรที่นักพัฒนาเฟิร์มแวร์จะใช้:
ตัวแปร |
ค่าเริ่มต้น |
ผล |
|---|---|---|
|
(จำเป็น) |
บอร์ดที่จะสร้าง เลือก |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debugger ที่ target |
Note
มีตัวแปรอีกมากมาย (drivers กล้อง/เซนเซอร์ wireless stacks, ML backends, USB stack, secure boot และอื่น ๆ) แต่สิ่งเหล่านั้นถูกกำหนดต่อบอร์ดใน boards/<TARGET>/board_config.mk และมักไม่ถูกแทนที่ในบรรทัดคำสั่ง การเปลี่ยนแปลงสิ่งเหล่านั้นคือการกำหนดค่าบอร์ด ไม่ใช่การสร้างนักพัฒนาปกติ ดู docs/boards.md ในที่เก็บเฟิร์มแวร์
สำหรับงานประจำวัน ตัวเลือกเดียวที่คุณต้องการคือ TARGET (เสมอ), DEBUG=1 (เมื่อใดก็ตามที่คุณตั้งใจจะ debug ดู การดีบักเฟิร์มแวร์) และบางครั้ง V=1