14.1.1.2. Aygıt yazılımını derleme#

Geliştirme ortamını kurma bölümünden gelen ortam hazır olduğunda, bir aygıt yazılımı imajı derlemek iki make komutu artı bir TARGET seçiminden ibarettir.

14.1.1.2.1. Derleme#

Önce, dondurulmuş .py modüllerini bayt koduna derleyen ana bilgisayar aracı olan mpy-cross‘u derleyin (bunu bir kez yapın ve MicroPython’u her güncellediğinizde tekrar yapın):

make -j$(nproc) -C lib/micropython/mpy-cross

Ardından, <TARGET> aşağıdaki tablodaki adlardan biri olacak şekilde bir kart için aygıt yazılımını derleyin:

make -j$(nproc) TARGET=<TARGET>

-j$(nproc), tüm CPU çekirdeklerinde paralel olarak derleme yapar (macOS’ta -j$(sysctl -n hw.ncpu) kullanın). TARGET zorunludur – hedefsiz make çalıştırmak “Invalid or no TARGET specified” hatasıyla durur.

Baştan sona, eksiksiz bir ilk derleme:

make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4

14.1.1.2.1.1. Desteklenen kartlar#

TARGET değerleri, boards/ altındaki dizin adlarıdır. Kameralar ve silikonları:

Kamera

TARGET

MCU

Port

Çekirdek

OpenMV Cam M4

OPENMV2

STM32F427

stm32

Cortex-M4

OpenMV Cam M7

OPENMV3

STM32F765

stm32

Cortex-M7

OpenMV Cam H7

OPENMV4

STM32H743

stm32

Cortex-M7

OpenMV Cam H7 Plus

OPENMV4P

STM32H743 + SDRAM

stm32

Cortex-M7

OpenMV Pure Thermal

OPENMVPT

STM32H743 + SDRAM

stm32

Cortex-M7

OpenMV Cam N6

OPENMV_N6

STM32N657

stm32

Cortex-M55

OpenMV Cam RT1062

OPENMV_RT1060

MIMXRT1062

mimxrt

Cortex-M7

OpenMV AE3

OPENMV_AE3

Alif Ensemble (çift M55)

alif

Cortex-M55

Arduino Portenta H7

ARDUINO_PORTENTA_H7

STM32H747

stm32

Cortex-M7

Arduino Giga

ARDUINO_GIGA

STM32H747

stm32

Cortex-M7

Arduino Nicla Vision

ARDUINO_NICLA_VISION

STM32H747

stm32

Cortex-M7

Arduino Nano 33 BLE Sense

ARDUINO_NANO_33_BLE_SENSE

nRF52840

nrf

Cortex-M4

Arduino Nano RP2040 Connect

ARDUINO_NANO_RP2040_CONNECT

RP2040

rp2

Cortex-M0+

Donanımınız için tam olarak doğru TARGET değerini derleyin – örneğin OpenMV Cam H7 için OPENMV4, H7 Plus için OPENMV4P, N6 için OPENMV_N6.

14.1.1.2.1.2. Derleme çıktısı#

Bir karta ait her şey build/<TARGET>/bin/ dizinine gelir. TARGET=OPENMV4 için bu, şunları içeren build/OPENMV4/bin/ dizinidir:

Dosya

Ne olduğu

firmware.bin

Aygıt yazılımı ikili dosyası – OpenMV IDE Tools -> Load Custom Firmware ile ve dfu-util ile flash’lanır

firmware.elf

Hata ayıklama sembollerini içeren aygıt yazılımı – hata ayıklayıcıyı yönlendirdiğiniz dosya

bootloader.bin / .elf

Önyükleyici (bootloader) (yalnızca önyükleyicinin etkin olduğu kartlarda)

openmv.bin

Birleşik önyükleyici (bootloader) + aygıt yazılımı imajı

romfs<n>.img

Aygıt yazılımıyla birlikte flash’lanan salt okunur ROM dosya sistemi imajı

Alif AE3 çift çekirdeklidir, bu nedenle firmware_M55_HP.elf / firmware_M55_HP.bin (yüksek performanslı çekirdek) ve ayrı bir firmware_M55_HE.elf / firmware_M55_HE.bin (yüksek verimli çekirdek) ile birlikte, boot ROM’a her çekirdeğin imajının nerede bulunduğunu söyleyen bir içindekiler tablosu (TOC) imajı üretir.

14.1.1.2.1.3. Temizleme ve yeniden derleme#

Derlemeler, build/<TARGET>/ altında her kart için yalıtılmıştır. Bir kartın derlemesini silmek için:

make TARGET=<TARGET> clean

distclean yoktur; clean her zaman bir TARGET gerektirir. mpy-cross kartlar arasında paylaşılır – MicroPython’u güncellerseniz onu da yeniden derleyin:

make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross

Bir derlemenin flash/RAM kullanımını bildirmek için:

make TARGET=<TARGET> size

14.1.1.2.1.4. Docker içinde derleme (ana bilgisayar araç zinciri olmadan)#

Ana bilgisayara hiçbir şey kurmamayı tercih ederseniz (veya yerel bir derlemenin bulunmadığı bir platformdaysanız), Docker yolunu kullanın:

git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>

Yapılar (artifacts) openmv/docker/build/<TARGET> dizininde görünür. Tekrarlanan derlemeler için, depoyu kapsayıcı içinde ana bilgisayardakiyle aynı mutlak yola bağlayan artımlı bir geliştirme yolu vardır; böylece hata ayıklayıcı kaynak yolları yeniden eşleme olmadan çözümlenir:

make install-sdk
make build-firmware-dev TARGET=<TARGET>

TARGET değiştirirken make clean-dev çalıştırın.

14.1.1.2.2. Derleme seçenekleri#

Derleme davranışı, make komut satırında geçirilen değişkenlerle denetlenir, örneğin:

make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1

Bir aygıt yazılımı geliştiricisinin kullanacağı değişkenler:

Değişken

Varsayılan

Etkisi

TARGET

(zorunlu)

Derlenecek kart. MCU, çekirdek, bellek haritası, USB kimlikleri ve etkin modülleri ayarlayan boards/<TARGET>/board_config.mk dosyasını seçer.

DEBUG

0

DEBUG=1, -Og -ggdb3 ile derler (hata ayıklama için optimize edilmiş, tam GDB hata ayıklama bilgisi) ve MicroPython ROM metni sıkıştırmasını devre dışı bırakır – bu, hata ayıkladığınız derlemedir. DEBUG=0 ise -O2 -DNDEBUG ile derler (daha küçük, daha hızlı, assert’ler kapalı) ve sürüm derlemesidir.

V

0

V=1, kısa CC file.c özeti yerine her derleyici/bağlayıcı komutunu yazdırır. Tam bayrakları görmek veya derleme sorunlarını teşhis etmek için kullanın.

DEBUG_PRINTF

0

DEBUG_PRINTF=1, OMV_DEBUG_PRINTF tanımlar ve aygıt yazılımında düşük düzeyli hata ayıklama printf çıkışını etkinleştirir (SWO/RTT ile birlikte kullanın, bkz. Aygıt yazılımının hata ayıklaması).

PROFILE_ENABLE

0

PROFILE_ENABLE=1, işlev çağrısı araçlandırmasıyla derler (-finstrument-functions, -DOMV_PROFILER_ENABLE=1) böylece zamanın nerede harcandığını profilleyebilirsiniz. PROFILE_HASH=<N>, profilleyici hash tablosu boyutunu ayarlar (ikinin kuvveti; varsayılan 256) ve PROFILE_IRQ=1 ayrıca kesme bağlamında çalışan kodu da profiler.

STACK_PROTECTOR

0

STACK_PROTECTOR=1, -fstack-protector-all ekler – yığın arabelleği taşmalarını yakalayan yığın kanaryaları. Bellek bozulmasını izlerken yararlıdır.

DEBUGGER

JLINK

make debug / make deploy hedeflerinin hangi hata ayıklayıcıyı kullandığı. JLINK varsayılandır; NONE, debug hedefini devre dışı bırakır.

Not

Çok daha fazla değişken mevcuttur (kamera/sensör sürücüleri, kablosuz yığınlar, ML arka uçları, USB yığını, güvenli önyükleme vb.), ancak bunlar boards/<TARGET>/board_config.mk içinde her kart için ayarlanır ve normalde komut satırında geçersiz kılınmaz. Bunları değiştirmek, normal bir geliştirici derlemesi değil, kart özelleştirmesidir – aygıt yazılımı deposundaki docs/boards.md dosyasına bakın.

Günlük çalışmada ihtiyaç duyacağınız tek seçenekler TARGET (her zaman), DEBUG=1 (hata ayıklamayı amaçladığınızda, bkz. Aygıt yazılımının hata ayıklaması) ve ara sıra V=1 değişkenleridir.