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 המדויק עבור החומרה שלכם – למשל 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 ועל ידי |
| קושחה עם סמלי דיבאג – הקובץ שעליו אתם מכוונים את הדיבאגר |
| המאתחל (bootloader) (רק בלוחות שבהם המאתחל מופעל) |
| תמונת מאתחל (bootloader) + קושחה משולבת |
| תמונת מערכת קבצים ROM לקריאה בלבד הנצרבת לצד הקושחה |
ה-Alif AE3 הוא דו-ליבתי, ולכן הוא מפיק firmware_M55_HP.elf / firmware_M55_HP.bin (ליבת הביצועים הגבוהים) וכן firmware_M55_HE.elf / firmware_M55_HE.bin נפרדים (ליבת היעילות הגבוהה) בתוספת תמונת תוכן עניינים (TOC) המורה ל-boot 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>
הריצו make clean-dev בעת החלפת TARGET.
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.