gpio-libgpiod.sh
libgpiod est l'interface GPIO sérieuse sous Linux : gpiodetect, gpioinfo, gpioset. Le script clignote une LED du connecteur carrier tout en documentant le piège de la libération de ligne à la sortie de gpioset.
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). 1 LED + résistance 330 Ω (broches 1,8 V/3,3 V selon le connecteur : vérifier le schéma).
Câblage
LED sur la broche GPIO choisie du connecteur haut-density (via carrier board), GND à côté. Tensions plus bas que 3,3 V sur certaines broches.
Fonctionnement
gpioset demande au noyau de piloter la ligne ; --mode=exit applique la valeur puis se termine. Selon le noyau, ajouter --mode=wait pour maintenir.
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
Passer au démon Python (exemple python-gpio) pour un contrôle fin, ou piloter en PWM via /sys/class/pwm.
gpio-libgpiod.sh
#!/bin/bash
# Clignotement LED via libgpiod (outils noyau standard).
# Installation : opkg/apt install gpiod (present sur l'image X8).
# Lister : gpiodetect ; broches du connecteur : gpioinfo.
CHIP="${1:-gpiochip0}" # verifier avec gpiodetect
LIGNE="${2:-27}" # GPIO du schema carrier (exemple)
echo "Puces GPIO :"
gpiodetect
echo "Clignotement $CHIP ligne $LIGNE (Ctrl-C pour arreter)"
while true; do
# --mode=exit applique puis rend la ligne ; selon le noyau,
# ajouter --mode=wait pour garder la ligne captive.
gpioset --mode=exit "$CHIP" "$LIGNE=1"
sleep 1
gpioset --mode=exit "$CHIP" "$LIGNE=0"
sleep 1
done