Ceci est une ancienne révision du document !
Accéder aux entrées/sorties depuis l'espace utilisateur via SysFs
1)Par défaut, le système de fichiers est configuré pour accéder aux GPIO via le procédé SysFs. Il s'agit d'un procédé de fichiers avec une arborescence spécifique accessible depuis /sys/. On peut retenir ces ces points importants :
- Les contrôleurs de GPIO sont visibles depuis /sys/class/gpio. Chaque contrôleur contrôle quelques GPIO.
root@Petalinux_LEDs:~# ls /sys/class/gpio export gpiochip890 gpiochip898 gpiochip906 unexport
Ici nous pouvons voir trois contrôleurs gpiochip890, gpiochip898 et gpiochip906. Des informations sont disponibles pour chacun d'eux.
root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip890 base label ngpio power subsystem uevent root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/base 890 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/label /amba_pl/gpio@41200000 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/ngpio 8
root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip898 base label ngpio power subsystem uevent root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/base 898 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/label /amba_pl/gpio@41200000 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/ngpio 8
root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip906/ base device label ngpio power subsystem uevent root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/base 906 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/label zynq_gpio root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/ngpio 118
Le premier contrôleur est réservé pour le port des interrupteurs, le second pour le port des DELs que nous avons configurés lors de la création du projet Vivado (il y en a 8 interrupteurs et 8 DELs au total) et le troisième correspond à l'ensemble des GPIOs qui sont accessibles par le Zynq. Les numéro indiqués dans le fichier base correspondent aux numéros de la première GPIO accessible sur le port correspondant. Les GPIO suivantes sont accessibles aux numéros suivants, jusqu'à base + ngpio.
- Les GPIOs à utiliser doivent être configurées. Il faut les déclarer dans le fichier export. Cela crée un répertoire du nom de la GPIO.
root@Petalinux_LEDs:~# echo 898 > /sys/class/gpio/export root@Petalinux_LEDs:~# ls /sys/class/gpio/ export gpio898 gpiochip898 gpiochip906 unexport root@Petalinux_LEDs:~# ls /sys/class/gpio/gpio898 active_low direction power subsystem uevent value
Une fois créée, il est nécessaire d'indiquer sa direction (entrée ou sortie), dans le fichier direction.
root@Petalinux_LEDs:~# echo out > /sys/class/gpio/gpio898/direction
Idem pour la les autres DELs et interrupteurs :
root@Petalinux_LEDs:~# echo 905 > /sys/class/gpio/export root@Petalinux_LEDs:~# echo out > /sys/class/gpio/gpio905/direction root@Petalinux_LEDs:~# echo 890 > /sys/class/gpio/export root@Petalinux_LEDs:~# echo 897 > /sys/class/gpio/export root@Petalinux_LEDs:~# echo in > /sys/class/gpio/gpio890/direction root@Petalinux_LEDs:~# echo in > /sys/class/gpio/gpio897/direction
- Pour affecter un état à la sortie, on utilise le fichier value
root@Petalinux_LEDs:~# echo 1 > /sys/class/gpio/gpio898/value root@Petalinux_LEDs:~# echo 1 > /sys/class/gpio/gpio905/value
Les DELs LD0 et LD7 s'allument.
root@Petalinux_LEDs:~# echo 0 > /sys/class/gpio/gpio898/value root@Petalinux_LEDs:~# echo 0 > /sys/class/gpio/gpio905/value
Les DELs LD0 et LD7 s'éteignent.
- Pour contrôler l'état d'une entrée, on utilise aussi le fichier value
root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio890/value 0 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio897/value 0
Lorsque les interrupteurs SW0 et SW7 sont ouverts.
root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio890/value 1 root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio897/value 1
Lorsque les interrupteurs SW0 et SW7 sont fermés.
- Pour libérer les ports d'entrées sorties pour d'autres applications, il est nécessaire de les désinscrire par l'intermédiaire du fichier unexport
root@Petalinux_LEDs:~# echo 890 > /sys/class/gpio/unexport root@Petalinux_LEDs:~# echo 897 > /sys/class/gpio/unexport root@Petalinux_LEDs:~# echo 898 > /sys/class/gpio/unexport root@Petalinux_LEDs:~# echo 905 > /sys/class/gpio/unexport