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.