flasher-core-arduino.sh
Le geste unique de la X8 : le Linux téléverse lui-même le firmware Arduino du cœur temps réel via mboot. Backup, flash, run en trois commandes — le déploiement OTA des deux mondes de la carte devient un simple script.
Matériel requis
Une Arduino Portenta X8 (module ST STM32MP1 : quad Cortex-A7 Linux + double cœur Cortex-M4 temps réel, 8 Go eMMC, 2 Go LPDDR4, Wi-Fi/BT embarqués, option LTE). Aucun ; le croquis compilé (.bin) exporté depuis l'Arduino IDE.
Câblage
Rien à câbler : le flash se fait de l'application Linux vers le cœur MCU interne.
Fonctionnement
mboot gère les partitions firmware du cœur : --backup archive l'existant, --flash écrit le .bin, --run bascule l'exécution. Échec de flash = rollback possible.
Exécution
Côté Linux : accès SSH (USB-C routed ou réseau) sur l'image Portenta Linux, scripts bash/Python. Côté temps réel : Arduino IDE avec le core « Arduino Mbed OS Portenta X8 Boards », cœur M7 applicatif, flash via mboot depuis Linux.
Variantes
Intégrer le flash dans un pipeline CI (GitHub Actions produit le .bin, le pousse en scp et appelle mboot).
flasher-core-arduino.sh
#!/bin/bash
# mboot : le Linux de la X8 flashe les coeurs Arduino (M7/M4).
# Preparer le .bin avec l'Arduino IDE (Portenta X8-M7 core),
# le copier sur la carte (scp), puis :
set -e
BIN="${1:?Usage: $0 firmware.bin [--reset]}"
if [ ! -f "$BIN" ]; then
echo "fichier introuvable : $BIN"
echo "Exporter le croquis (Sketch > Export Binary) puis scp :"
echo " scp firmware.bin root@<carte>:/tmp/"
exit 1
fi
# Sauvegarde du firmware courant.
mboot --backup > /tmp/backup-$(date +%F).tar 2>/dev/null || true
# Flash du coeur applicatif temps reel.
mboot --flash "$BIN"
# Redemarrer l'application flashee.
mboot --run
echo "Firmware Arduino applique."
# Pour revenir a l'etat d'usine :
# mboot --restore /tmp/backup-*.tar
# Logs du deploiement :
# journalctl -f (selon l'image)