udev

Linux permet d'accéder aux périphérique via le système de fichier en utilisant le répertoire /dev, "udev" permet d'avoir la gestion de ce répertoire dans l'espace utilisateur. Ce système utilise une série de règles afin de déterminer le nom le plus approprié pour chaque périphérique.

/dev

Sous Linux, il est possible d'accéder à un périphérique via un descripteur de fichier du repertoire /dev, ceci permet d'utiliser des appels système de lecture de fichier pour accéder à n'importe quel type de périphérique. Par exemple, on spécifie généralement le premier disque IDE par /dev/hda.

La banalisation des périphérique accessible à chaud (USB, Firewire, etc) a montré les limites du repertoire /dev car celui-ci nommait statiquement tout les périphérique et était donc mal adapté à l'ajout de périphérique à chaud. De plus créer un fichier pour chaque périphérique possible qu'il soit présent ou non à amené le répertoire /dev à devenir beaucoup trop gros (couramment plus de 18 000 descripteurs).

Une solution consiste à utiliser le noyau pour gérer le repertoire /dev, celui-ci ne devant afficher que les périphériques actuellement disponible. Cette solution a été implémenté et porte le nom de devfs, c'est un pseudo système de fichier géré par le noyau qui représente un dossier /dev peuplé dynamiquement. Cette solution fonctionne pour réduire le nombre de fichier mais ne règle pas les problèmes du nommage des périphériques (le nom étant déterminé statiquement dans le noyau, sans intervention possible de l'administrateur). De plus cette solution ne fonctionne pas sur de gros espaces de nommage.

udev a été créé pour palier tout ces problèmes en nommant les périphérique lors de leur ajout à l'aide d'une série de règles et en fonctionnant dans l'espace utilisateur. Lors de l'ajout ou de la déconnexion d'un périphérique, le noyau appelle le programme hotplug pour en informer l'espace utilisateur, udev est alors appelé par hotplug afin de créer les entrées adéquate dans /dev. Le nommage des périphérique dans /dev avec udev se fait par l'intermédiaire du sous-système namedev qui utilise une série de règle pour déterminer le ou les noms adéquat pour le périphérique.

udev

Le système udev permet de faire le lien entre les évènements de hotplug, les informations du système de fichier sysfs et le repertoire /dev. Ce système se décompose en trois parties dont les deux première sont d'intérêt direct pour les administrateurs:
  • udev: replacement dynamique de /dev
  • namedev: gère le nommage des périphériques
  • libsysfs: bibliothèques standard pour obtenir des informations de sysfs
udev fonctionne dans l'espace utilisateur et est appelé par hotplug à chaque changement sur les périphérique. Il utilise alors les informations fournies par hotplug pour obtenir toutes les informations sur le périphérique dans sysfs, tel que les numéros majeur et mineur du périphérique qui seront utilisé pour créer le fichier adéquat dans /dev. udev fait ensuite à namedev afin de déterminer le ou les noms du périphérique, le pseudo fichier est alors créé dans /dev avec les noms attribués à l'aide de namedev.

Mise en place de udev

Le programme /sbin/hotplug génère un évènement pour chaque périphérique ajouté ou supprimé, c'est hotplug qui lance le programme udev. Pour ce faire, il existe un lien symbolique vers udev dans le répertoire /etc/hotplug.d/default.

Nommage des périphériques

L'attribution des noms de périphérique se fait en consultant les règles de namedev stockées dans /etc/udev/rules.d/. Le règles pour l'attribution du nom des périphériques sont consultés en 5 étapes ordonnés du cas le plus précis au nommage par défaut:

  1. numéro de série ou nom
  2. numéro du périphérique sur le bus
  3. topologie sur le bus
  4. replacement direct du nom donné par le noyau
  5. nom donné par le noyau

Dès que le nom du périphérique peut être déterminé à une étape, il est attribué directement et le pseudo fichier peut être créé.

Toutes les règles sont écrites dans des fichiers du dossier /etc/udev/rules.d. Ces fichiers sont lu dans l'ordre alphanumérique par namedev à chaque fois qu'un périphérique est ajouté ou enlevé. Lorsque le périphérique est ajouté, namedev permet de déterminer son nom et éventuellement les liens symboliques y référant, ce qui permet à udev de créer les fichiers approprié. Lorsque le périphérique est enlevé, namedev est a nouveau consulté pour retrouver le nom et chaque lien symbolique afin de nettoyer /dev.

Références

Objectifs liés