Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Embarqué

Pilotes de périphériques Linux intégrés :Comprendre leur rôle

Note de l'éditeur : Linux embarqué s'est régulièrement classé parmi les meilleurs systèmes d'exploitation utilisés dans la conception de systèmes embarqués. Avec la croissance rapide de l'intérêt pour l'Internet des objets (IoT), la capacité de Linux embarqué à remplir plusieurs rôles s'avérera vitale pour répondre aux divers besoins rencontrés à chaque couche de la hiérarchie des applications IoT. À son tour, la capacité des ingénieurs à maîtriser les systèmes Linux embarqués deviendra critique pour parvenir à un développement rapide et fiable de systèmes plus sophistiqués. Dans Mastering Embedded Linux Programming - Second Edition, l'auteur Chris Simmonds emmène le lecteur dans une visite détaillée de l'étendue et de la profondeur de cet important système d'exploitation, en utilisant des exemples détaillés pour illustrer chaque point clé.

Dans cet extrait, chapitre 9, du livre, l'auteur décrit comment les pilotes de périphérique du noyau interagissent avec le matériel du système et comment les développeurs peuvent écrire des pilotes de périphérique et les utiliser dans leurs applications. Les versements suivants présentent cet extrait sur les pilotes de périphériques Linux embarqués :

• Comprendre leur rôle

• Lecture de l'état du pilote au moment de l'exécution

• Pilotes de périphérique dans l'espace utilisateur

• Écriture d'un pilote de périphérique de noyau

• Découverte de la configuration matérielle

Adapté de Maîtriser la programmation Linux embarquée - Deuxième édition, par Chris Simmonds.

Chapitre 9. Interface avec les pilotes de périphérique

Les pilotes de périphérique du noyau sont le mécanisme par lequel le matériel sous-jacent est exposé au reste du système. En tant que développeur de systèmes embarqués, vous devez savoir comment ces pilotes de périphériques s'intègrent dans l'architecture globale et comment y accéder à partir des programmes de l'espace utilisateur. Votre système disposera probablement de nouveaux éléments matériels et vous devrez trouver un moyen d'y accéder. Dans de nombreux cas, vous constaterez que des pilotes de périphériques sont fournis pour vous et que vous pouvez réaliser tout ce que vous voulez sans écrire de code de noyau. Par exemple, vous pouvez manipuler les broches et les LED GPIO à l'aide de fichiers dans sysfs , et il existe des bibliothèques pour accéder aux bus série, notamment SPI (Serial Peripheral Interface) et je 2 C (Circuit Inter-Intégré).

Il existe de nombreux endroits pour savoir comment écrire un pilote de périphérique, mais peu pour vous dire pourquoi vous voudriez le faire et les choix que vous avez pour le faire. C'est ce que je veux couvrir ici. Cependant, rappelez-vous qu'il ne s'agit pas d'un livre consacré à l'écriture de pilotes de périphériques de noyau et que les informations fournies ici sont destinées à vous aider à naviguer sur le territoire mais pas nécessairement à vous y installer. Il existe de nombreux bons livres et articles qui vous aideront à écrire des pilotes de périphériques, dont certains sont répertoriés à la fin de ce chapitre.

Dans ce chapitre, nous aborderons les sujets suivants :

Le rôle des pilotes de périphériques

Comme je l'ai mentionné au chapitre 4, Configurer et construire le noyau , l'une des fonctions du noyau est d'encapsuler les nombreuses interfaces matérielles d'un système informatique et de les présenter de manière cohérente aux programmes de l'espace utilisateur. Le noyau a des frameworks conçus pour faciliter l'écriture d'un pilote de périphérique, qui est le morceau de code qui fait la médiation entre le noyau ci-dessus et le matériel ci-dessous. Un pilote de périphérique peut être écrit pour contrôler des périphériques physiques tels qu'un contrôleur UART ou MMC, ou il peut représenter un périphérique virtuel tel que le périphérique null ( /dev/null ) ou un disque virtuel. Un pilote peut contrôler plusieurs appareils du même type.

Le code du pilote de périphérique du noyau s'exécute à un niveau de privilège élevé, tout comme le reste du noyau. Il a un accès complet à l'espace d'adressage du processeur et aux registres matériels. Il peut gérer les interruptions et les transferts DMA. Il peut utiliser l'infrastructure du noyau sophistiquée pour la synchronisation et la gestion de la mémoire. Cependant, vous devez être conscient qu'il y a un inconvénient à cela; si quelque chose ne va pas dans un pilote bogué, cela peut vraiment mal tourner et faire tomber le système. Par conséquent, il existe un principe selon lequel les pilotes de périphériques doivent être aussi simples que possible en fournissant simplement des informations aux applications où les vraies décisions sont prises. Vous entendez souvent cela être exprimé par pas de politique dans le noyau . Il est de la responsabilité de l'espace utilisateur de définir la politique qui régit le comportement global du système. Par exemple, le chargement des modules du noyau en réponse à des événements externes, tels que le branchement d'un nouveau périphérique USB, relève de la responsabilité du programme de l'espace utilisateur, udev , et non du noyau. Le noyau fournit juste un moyen de charger un module de noyau.

Sous Linux, il existe trois principaux types de pilotes de périphériques :

Il existe également un quatrième type qui se présente comme un groupe de fichiers dans l'un des pseudo-systèmes de fichiers. Par exemple, vous pouvez accéder au pilote GPIO via un groupe de fichiers dans /sys/class/gpio , comme je le décrirai plus loin dans ce chapitre. Commençons par examiner plus en détail les trois types d'appareils de base.

Appareils de caractères

Les périphériques de caractères sont identifiés dans l'espace utilisateur par un fichier spécial appelé nœud de périphérique . Ce nom de fichier est mappé sur un pilote de périphérique à l'aide des numéros majeurs et mineurs qui lui sont associés. D'une manière générale, le nombre majeur mappe le nœud de périphérique à un pilote de périphérique particulier, et le numéro mineur indique au pilote quelle interface est en cours d'accès. Par exemple, le nœud de périphérique du premier port série sur l'ARM Versatile PB est nommé /dev/ttyAMA0 , et il a le numéro majeur 204 et le numéro mineur 64. Le nœud de périphérique pour le deuxième port série a le même numéro majeur, car il est géré par le même pilote de périphérique, mais le numéro mineur est 65. Nous pouvons voir les numéros des quatre ports série dans la liste des répertoires ici :

# ls -l /dev/ttyAMA*crw-rw---- 1 root root 204, 64 Jan 1 1970 /dev/ttyAMA0crw-rw---- 1 root root 204, 65 Jan 1 1970 /dev/ ttyAMA1crw-rw---- 1 racine racine 204, 66 1er janvier 1970 /dev/ttyAMA2crw-rw---- 1 racine racine 204, 67 1er janvier 1970 /dev/ttyAMA3

La liste des numéros majeurs et mineurs standard se trouve dans la documentation du noyau dans Documentation/devices.txt . La liste n'est pas mise à jour très souvent et n'inclut pas le périphérique ttyAMA décrit dans le paragraphe précédent. Néanmoins, si vous regardez le code source du noyau dans drivers/tty/serial/amba-pl011.c , vous verrez où sont déclarés les numéros majeurs et mineurs :

 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64

Lorsqu'il y a plus d'une instance d'un périphérique, comme avec le pilote ttyAMA, la convention pour former le nom du nœud de périphérique est de prendre un nom de base, ttyAMA, et d'ajouter le numéro d'instance de 0 à 3 dans cet exemple.

Comme je l'ai mentionné au chapitre 5, Créer un système de fichiers racine , les nœuds d'appareils peuvent être créés de plusieurs manières :

Vous pouvez avoir l'impression d'après les nombres que j'ai utilisés ci-dessus que les nombres majeurs et mineurs sont des nombres de 8 bits compris entre 0 et 255. En fait, à partir de Linux 2.6, le nombre majeur a une longueur de 12 bits, ce qui donne des nombres valides. de 1 à 4 095, et le nombre mineur est de 20 bits, de 0 à 1 048 575.


Embarqué

  1. Rôle des systèmes embarqués dans les automobiles
  2. Rôle diversifié de l'époxy dans la fabrication de circuits imprimés d'appareils IoT
  3. Les technologies clés jouent un rôle croissant pour la vision embarquée
  4. Mises à jour OTA pour Linux embarqué, partie 2 – Une comparaison des systèmes de mise à jour standard
  5. Mises à jour OTA pour Linux embarqué, partie 1 – Principes fondamentaux et implémentation
  6. Blog :Comprendre le rôle du PDMS dans le domaine de la microfluidique
  7. De l'IoT au cryptojacking :comprendre les nouvelles menaces liées aux appareils mobiles
  8. Introduction au piratage du matériel embarqué des appareils IoT
  9. Composants de la FAO et leur rôle dans l'usinage CNC