Introduction
Types de pilote
Sous Linux pour accéder aux ressources matérielles, il est impératif de développer un pilote de périphérique (device driver)
Linux distingue deux types principaux de pilotes de périphériques
- Pilotes orientés caractère (char device driver), visible sous
/dev
- Accès séquentiel des données (octet par octet)
- Accès à des périphériques simples (port série, …)
- Pilotes orientés bloc (block device driver), visible sous
/dev
- Accès aléatoire des données (par bloc)
- Accès aux disques
Cette liste peut être complétée par deux types supplémentaires
- Pilotes réseau (network device driver), visible avec
ifconfig
- Accès aux interfaces réseau (Ethernet, …)
- Accès aux piles de protocoles
- Pilotes orientés mémoire (uio device driver)
- Accès aux périphériques très simples avec accès aux registres mémoires (memory mapped devices)
- Accès depuis l’espace utilisateur (uio = user space I/O)
Device Model
Le Device Model proposé par le noyau Linux permet de maximaliser la réutilisation du code entre les différentes architectures et plateformes hardware
3 structures importantes :
struct device
: périphérique dans le système et généralement associé à un bus. Il est découvert de différentes manières (hot-plug, pilote de périphérique (driver), initialisation)struct device_driver
: entité logicielle associée au périphérique et permettant d’effectuer des opérations sur ce dernierstruct bus_type
: canal de communication entre le microprocesseur et le périphérique d’entrée/sortie (quelques bus: I2C, SPI, USB, PCI,…)
Interface utilisateur
L’accès aux pilotes de périphériques se fait par l’intermédiaire de fichiers virtuels.
Espace utilisateur
- Le fichier, situé dans le répertoire
/dev
, permet d’interagir avec le pilote chargé dans le noyau Linux à l’aide des opérations standard sur les fichiers
Espace noyau
- Pour connaître, le pilote en charge de traiter les requêtes de l’application en espace utilisateur, le noyau utilise un numéro de périphérique (device number) associé au nom du fichier. Celui-ci est composé d’un numéro majeur associé au pilote (le code) et d’un numéro mineur associé au périphérique (instance du pilote)
- Pour chaque opération en espace utilisateur, le pilote de périphérique implémente une méthode correspondante (handler) dans le noyau
Répertoire des pilotes de périphériques
Tous les pilotes orientés caractère ou bloc sont accessibles pour les utilisateurs
par l’intermédiaire de fichiers virtuels situés dans le répertoire /dev
$ ls -l /dev
brw------- 1 root root 179, 33 Jan 1 00:00 mmcblk0p1
brw------- 1 root root 179, 34 Jan 1 00:00 mmcblk0p2
crw------- 1 root root 10, 61 Jan 1 00:00 network_latency
crw------- 1 root root 10, 60 Jan 1 00:00 network_throughput
crw-rw-rw- 1 root root 1, 3 Jan 1 00:00 null
crw-rw-rw- 1 root root 5, 2 Jan 1 00:00 ptmx
- Les fanions
b
etc
indiquent le type de pilote (b
→ block,c
→ character) 1
,5
,10
et179
sont les major numbers- Les numéros majeurs permettent d’identifier les différentes pilotes de périphériques à l’intérieur du noyau Linux (le code)
2
,3
,33
,34
,60
et61
sont les minor numbers- Les numéros mineurs représentent une instance d’un pilote correspondant à un périphérique donné (les données)
Interfaces de configuration et de gestion
Afin de pouvoir effectuer des opérations de configuration, de gestion et/ou de maintenance sur un périphérique, les pilotes de périphériques nécessitent la mise en œuvre d’une interface supplémentaire
Linux propose 3 interfaces :
- ioctl → input/output control
- interface du pilote mis à disposition au niveau du fichier d’accès
accessible sous
/dev
- utilisée pour la configuration des pilotes de périphériques
- interface du pilote mis à disposition au niveau du fichier d’accès
accessible sous
- procfs → process filesystem
- fichiers d’état (configuration) accessible sous
/proc
- utilisée principalement pour la configuration et le monitoring du noyau Linux
- fichiers d’état (configuration) accessible sous
- sysfs → system filesystem
- fichiers de configuration et de gestion accessible sous
/sys
- utilisée principalement pour la configuration et la gestion des modules noyaux et des pilotes de périphériques
- fichiers de configuration et de gestion accessible sous