14.1.1.2. Compiler le micrologiciel¶
Avec l’environnement de Configuration de l’environnement de développement en place, compiler une image de micrologiciel se résume à deux commandes make plus la sélection d’une TARGET.
14.1.1.2.1. Compilation¶
Compilez d’abord mpy-cross, l’outil hôte qui compile les modules .py figés en bytecode (faites-le une fois, puis de nouveau chaque fois que vous mettez à jour MicroPython)
make -j$(nproc) -C lib/micropython/mpy-cross
Compilez ensuite le micrologiciel pour une carte, où <TARGET> est l’un des noms du tableau ci-dessous
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) compile en parallèle sur tous les cœurs CPU (sur macOS, utilisez -j$(sysctl -n hw.ncpu)). TARGET est obligatoire – make sans cible s’interrompt avec « Invalid or no TARGET specified ».
Une première compilation complète, de bout en bout
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. Cartes prises en charge¶
Les valeurs de TARGET sont les noms de répertoires sous boards/. Les caméras et leur silicium :
Caméra |
|
MCU |
Port |
Cœur |
|---|---|---|---|---|
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 (double 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+ |
Compilez la TARGET exacte correspondant à votre matériel – par exemple OPENMV4 pour l’OpenMV Cam H7, OPENMV4P pour la H7 Plus, OPENMV_N6 pour la N6.
14.1.1.2.1.2. Résultat de la compilation¶
Tout ce qui concerne une carte atterrit dans build/<TARGET>/bin/. Pour TARGET=OPENMV4, c’est build/OPENMV4/bin/, qui contient :
Fichier |
Ce dont il s’agit |
|---|---|
|
Binaire du micrologiciel – flashé par OpenMV IDE Tools -> Load Custom Firmware et par |
|
Micrologiciel avec symboles de débogage – le fichier que vous indiquez au débogueur |
|
Le programme d’amorçage (uniquement sur les cartes dotées d’un programme d’amorçage activé) |
|
Image combinée programme d’amorçage + micrologiciel |
|
Image du système de fichiers ROM en lecture seule, flashée en même temps que le micrologiciel |
L’Alif AE3 est à double cœur, il produit donc firmware_M55_HP.elf / firmware_M55_HP.bin (le cœur haute performance) et un firmware_M55_HE.elf / firmware_M55_HE.bin distinct (le cœur haute efficacité) ainsi qu’une image de table des matières (TOC) qui indique à la ROM d’amorçage où se trouve l’image de chaque cœur.
14.1.1.2.1.3. Nettoyage et recompilation¶
Les compilations sont isolées par carte sous build/<TARGET>/. Pour effacer la compilation d’une carte
make TARGET=<TARGET> clean
Il n’y a pas de distclean ; clean a toujours besoin d’une TARGET. mpy-cross est partagé entre les cartes – si vous mettez à jour MicroPython, recompilez-le aussi
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
Pour rapporter l’utilisation de la mémoire flash/RAM d’une compilation
make TARGET=<TARGET> size
14.1.1.2.1.4. Compiler dans Docker (sans chaîne d’outils hôte)¶
Si vous préférez ne rien installer sur l’hôte (ou si vous êtes sur une plateforme sans compilation native), utilisez la voie Docker
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
Les artefacts apparaissent dans openmv/docker/build/<TARGET>. Pour des compilations répétées, il existe une voie de développement incrémentale qui monte le dépôt au même chemin absolu à l’intérieur du conteneur que sur l’hôte, de sorte que les chemins source du débogueur se résolvent sans remappage
make install-sdk
make build-firmware-dev TARGET=<TARGET>
Exécutez make clean-dev lors du changement de TARGET.
14.1.1.2.2. Options de compilation¶
Le comportement de la compilation est contrôlé par des variables passées sur la ligne de commande make, par exemple
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
Les variables qu’un développeur de micrologiciel utilisera :
Variable |
Valeur par défaut |
Effet |
|---|---|---|
|
(requis) |
La carte à compiler. Sélectionne |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le débogueur qu’utilisent les cibles |
Note
Bien d’autres variables existent (pilotes de caméra/capteur, piles sans fil, backends ML, pile USB, démarrage sécurisé, etc.), mais celles-ci sont définies par carte dans boards/<TARGET>/board_config.mk et ne sont normalement pas surchargées sur la ligne de commande. Les modifier relève de la personnalisation de carte, pas d’une compilation de développeur ordinaire – voir docs/boards.md dans le dépôt du micrologiciel.
Pour le travail quotidien, les seules options dont vous avez besoin sont TARGET (toujours), DEBUG=1 (chaque fois que vous comptez déboguer, voir Débogage du micrologiciel), et occasionnellement V=1.