🛠 Images custom et flotte : construire son Yocto, déployer par OTA avec fioctl et Waves
Objectifs
Passer de « je bidouille ma carte » à « je gère une flotte ». L'image d'usine est une Linux microPlatform (LMP) de Foundries.io, construite avec Yocto ; la couche BSP Arduino est publique (arduino/meta-partner-arduino), les modules noyau aussi (portentax8-x8h7). Le workflow officiel : une FoundriesFactory compile OS + conteneurs, fioctl pilote les mises à jour, et l'OTA — garanti atomique par la structure A/B de LMP — pousse OS et conteneurs. En version managée, Arduino Cloud for Business / Portenta X8 Manager ajoute provisioning par clés individuelles et monitoring de flotte ; le tuto officiel waves-fleet-managment couvre le déploiement de conteneurs à distance.
Matériel
- 1 × Arduino Portenta X8 (idéalement 2 : une de prod, une de bench)
- Poste de build Linux costaud (Yocto : comptez de nombreux Go de disque et des heures de compilation la première fois)
- Compte GitHub + un FoundriesFactory (offre gratuite pour commencer)
- CLI fioctl installé sur le poste (docs.foundries.io)
- Accès adb à la carte pour l'enrôler dans la factory
Code complet
# --- Cote poste de build ---
# 1. Initialiser sa factory (guidé par la doc Foundries.io)
fioctl login
# 2. Récuperer la BSP Arduino : couche meta-partner-arduino
# (github.com/arduino/meta-partner-arduino) + recipes LMP ;
# tuto officiel : docs.arduino.cc/tutorials/portenta-x8/image-building
# puis : bitbake lmp-factory-image
# 3. Pousser la branche de build vers la factory
git push
# -> la factory compile en cloud et héberge l'OTA
# --- Cote carte : suivre la mise à jour ---
adb shell
fio@portenta-x8:~$ sudo journalctl -fu ostree-remount # ou update manager
fio@portenta-x8:~$ docker ps # les conteneurs applicatifs suivent l'OTA
# --- Cote flotte ---
fioctl updates list # état de rollout par appareil
fioctl devices list
# Gestion managée alternative : Arduino Cloud for Business /
# Portenta X8 Manager (provisioning keys + monitoring),
# ou le workflow « Waves » du tuto officiel waves-fleet-managment.
Vérification attendue
Après git push, la factory compile l'image ; la carte enrôlée télécharge l'OTA et bascule sur le nouvel OS sans briqueter : en cas d'échec de boot, le mécanisme A/B de LMP revient à l'image précédente. Les conteneurs applicatifs se mettent à jour indépendamment, versionnés comme des images Docker — c'est exactement ce modèle de déploiement qu'exploite le tuto Waves pour une flotte.
Erreurs fréquentes
- Vouloir
apt installdans l'image : c'est du Yocto — tout ce qui touche l'OS se déclare dans les recipes et se recompile ; les tests rapides passent paropkg(utilisé par Arduino pour ses modules noyau) ou par des conteneurs. - Modifier la BSP sans lire image-building : la couche meta-partner-arduino a une compatibilité LMP noyau 6.1.24 — mélanger des branches LMP récentes et cette couche casse la compilation.
- Perdre les clés de la factory : le provisioning est basé sur des clés individuelles (modèle Portenta X8 Manager) — une clé perdue = appareil qu'il faut ré-enrôler physiquement.
- Tester l'OTA sur la seule carte en production : le rollback A/B protège le boot, pas tes données — garde une carte de bench et valide sur elle chaque rollout.
- Confondre les deux niveaux d'OTA : l'OS (ostree/LMP via factory) et les conteneurs (registries) montent séparément ; un échec de pull conteneur ne touche pas l'OS, et inversement.
- >
- >
Autres tutoriels pour cette carte
- Premiers pas : comprendre le monstre à 9 cœurs et entrer dans Linux via ADB
- Premier sketch sur le cœur M4 : le blink qui se flash par ADB
- Docker dès la sortie de l'emballage : premier conteneur sur le Linux embarqué
- Pont Linux ↔ Arduino : appeler des fonctions du sketch M4 depuis Python (RPC)
- Mettre la X8 en réseau : Wi-Fi du Murata 1DX et Gigabit Ethernet sur porteuse
- Nœud IoT de datalogging : capteurs sur le M4, stockage et transport en conteneur
Exemples de code pour cette carte
etat-systeme.shBashgpio-libgpiod.shBashpython-gpio.pyPythondocker-hello.shBashflasher-core-arduino.shBashwifi-nmcli.shBash