Maîtriser le sous-système de contrôle des broches pour pilotes de périphériques Linux
Note de l'éditeur : Linux embarqué devient l'épine dorsale de l'Internet des objets, et les pilotes de périphériques sont le pont entre applications et matériel. Dans « Linux Device Drivers Development », l'auteur John Madieu offre un guide détaillé, riche en code, pour construire ces pilotes.
Cet extrait — Chapitre 14 du livre — plonge dans le contrôle des broches et GPIOs, une zone critique pour développeurs qui doivent interfacer du matériel personnalisé avec le noyau. Le premier volet introduit le sous-système de contrôle des broches.
Adapté de Linux Device Drivers Development, par John Madieu.
Chapitre 14. Sous-système Pin Control et GPIO
Par John Madieu
Dans Linux embarqué, les pilotes interagissent presque toujours avec des GPIOs ou configurent le multiplexage de broches. Une « broche » est la ligne de sortie physique d'un composant, et de nombreux SoC réutilisent la même broche pour plusieurs fonctions. Par exemple, la broche MX6QDL_PAD_SD3_DAT1 de l'i.MX6QDL peut servir de ligne de données SD, ligne UART RTS/CTS, ligne FlexCAN Rx, ou GPIO générique.
Le processus de sélection de la fonction d'une broche s'appelle pin muxing, et le composant noyau qui l'orchestre est le contrôleur de broches. Dans la seconde partie de ce chapitre, nous explorerons le sous-système General Purpose Input/Output (GPIO), une fonction de broche courante.
Dans ce chapitre, vous allez :
- Parcourir le sous-système de contrôle des broches et apprendre à déclarer des nœuds pin-control dans l'Arbre de Périphériques (Device Tree).
- Comparer l'API GPIO héritée basée sur les entiers avec l'interface plus récente basée sur les descripteurs.
- Gérer les GPIOs qui sont aussi utilisés comme interruptions.
- Explorer les interfaces sysfs dédiées à la gestion GPIO.
Sous-système de contrôle des broches
Le sous-système pinctrl gère le multiplexage et la configuration des broches. Les appareils qui nécessitent un arrangement de broches spécifique doivent décrire cet arrangement dans l'Arbre de Périphériques. Le pilote du contrôleur de broches analyse ces descriptions et programme le contrôleur I/O du SoC en conséquence.
Le sous-système offre :
- Multiplexage de broches — réutiliser une seule broche pour plusieurs rôles (UART TX, GPIO, HSI, etc.) par groupe ou par broche.
- Configuration de broches — régler les propriétés électriques comme pull-up/pull-down, force de drive, debounce, et plus.
Notez que ce livre se concentre sur l'utilisation de l'API du contrôleur de broches ; il ne couvre pas l'écriture d'un pilote de contrôleur de broches lui-même.
Pinctrl et l'Arbre de Périphériques
Dans l'Arbre de Périphériques, un nœud contrôleur de broches décrit tous les groupes de broches et fonctions disponibles. Chaque groupe se voit assigner un ID entier, optionnellement accompagné d'un pinctrl-name qui mappe des noms lisibles par l'humain aux IDs.
La liaison d'un appareil spécifie les états de broches qu'il requiert. Deux propriétés lient un appareil aux états de broches :
pinctrl-<ID>— une liste de phandles pointant vers des nœuds de configuration de broches. Plusieurs entrées permettent à un appareil d'être configuré par plusieurs contrôleurs de broches ou de combiner plusieurs nœuds pour un seul contrôleur.pinctrl-name— une liste parallèle assignant des noms à chaque ID d'état. L'état 0 est généralement nommédefaultet suit la liste standard définie dansinclude/linux/pinctrl/pinctrl-state.h.
Ci-dessous un extrait typique d'Arbre de Périphériques montrant la configuration de broches pour deux appareils :

Chaque ligne suit le format <PIN_FUNCTION> <PIN_SETTING> :
MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09 0x80000000
MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
Le premier token (MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09) identifie la fonction de broche ; le second token (0x80000000) encode les bits de configuration (pull-up/down, force de drive, etc.). Ces macros sont définies dans des fichiers d'en-tête spécifiques à l'architecture comme arch/arm/boot/dts/imx6q-pinfunc.h.
Pour programmer un état de broche dans le code du pilote, suivez ces étapes pendant l'initialisation (typiquement dans probe()) :
struct pinctrl *pinctrl;
pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
dev_warn(&pdev->dev, "pins are not configured from the driver");
L'assistant pinctrl_get_select_default() récupère et applique automatiquement l'état default. Si un appareil fournit un état init, le noyau l'appliquera avant probe() puis reviendra à default après, sauf si le pilote le change.
Quand terminé, libérez le contrôleur avec pinctrl_put(pinctrl) ou utilisez la variante gérée par ressource devm_pinctrl_put(pinctrl).
Voici un exemple concret du fichier am335x-evm.dts :
dcan1: d_can@481d0000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&d_can1_pins>;
};
Dans le pilote correspondant :
pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
dev_warn(&pdev->dev, "pins are not configured from the driver");
Au moment où le probe() du pilote s'exécute, la configuration de broches default est déjà en place.
Le prochain volet couvrira le sous-système GPIO en détail.
Reproduit avec permission de Packt Publishing. Copyright © 2017 Packt Publishing
John Madieu est un ingénieur Linux embarqué et noyau basé à Paris. Il développe des pilotes et BSPs pour clients en automatisation, transport, santé, énergie, et défense. John travaille chez EXPEMB, pionnier en design computer-on-module, et est un défenseur open-source actif qui croit que le partage de connaissances accélère l'innovation.
Technologie de l'Internet des objets
- De l'ivoire à la bakélite : retraçant l'évolution des plastiques modernes
- Perspectives futures : faire progresser l'IIoT industriel pour l'excellence de production
- Qui commande la voiture connectée ? Regard depuis la perspective du conducteur
- 6 étapes éprouvées pour sécuriser les systèmes embarqués IoT
- Adoption SaaS en forte hausse dans le développement produit : obstacles clés et opportunités – Partie 2
- L'adoption du SaaS atteint un point de bascule dans le développement produit — insights de PTC
- Comment choisir le partenaire de développement IoT idéal : défis clés et solutions
- PCs Industriels : La pierre angulaire du contrôle complexe dans la révolution IIoT
- Facteurs clés pour un développement IoT d'entreprise réussi : insights d'experts Nokia