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.