Chapitre 18. Le système Hotplug

Table des matières

18.1. Périphériques et interfaces
18.2. Événements hotplug
18.3. Agents hotplug
18.4. Chargement automatique de modules
18.5. Hotplug avec PCI
18.6. Le script d'amorçage Coldplug
18.7. Analyse d'erreurs

Résumé

Le système de branchement à chaud (hotplug) contrôle l'initialisation de la plupart des périphériques dans un ordinateur. Il n'est pas seulement utilisé pour les périphériques pouvant être insérés et retirés durant le fonctionnement mais pour tous les périphériques qui sont reconnus durant l'amorçage du noyau. Il travaille en étroite collaboration avec le système de fichiers sysfs et udev qui sont décrits dans Chapitre 19, Nœuds de périphériques dynamiques avec udev.

Jusqu'à ce que le noyau soit amorcé, seuls les périphériques absolument nécessaires, comme le système de bus, les disques d'amorçage et le clavier, sont initialisés. Normalement, le noyau déclenche un événement hotplug pour tous les périphériques détectés. Le démon udevd écoute ces événements et appelle les scripts hotplug correspondants afin d'initialiser ces périphériques. Pour les périphériques qui ne sont pas reconnus automatiquement ou dont les événements ont été perdus lors de l'amorçage, vous disposez de coldplug. Il repasse le événements enregistrés ou balaie le système à la recherche de périphériques non initialisés et utilise une configuration statique aux anciens périphériques tels que ISA.

Si on laisse de côté quelques exceptions historiques, la plupart des périphériques sont initialisés dès qu'ils sont disponibles, soit à l'amorçage du système ou au branchement. Durant cette initialisation, les interfaces sont enregistrées par le noyau. L'enregistrement de l'interface entraîne d'autres événements hotplug qui déclenchent une installation automatique de l'interface concernée.

Dans les versions précédentes de SUSE LINUX, un ensemble statique de données de configuration était utilisé pour initialiser les périphériques. Maintenant le système examine chaque périphérique disponible et recherche les données de configuration adéquates ou le génère.

Les plus importantes fonctions hotplug sont configurées dans deux fichiers : vous trouverez dans /etc/sysconfig/hotplug des variables qui commandent le comportement de hotplug et coldplug. Chaque variable est détaillée par un commentaire. Le fichier /proc/sys/kernel/hotplug comporte le nom du programme exécutable qui est appelé par le noyau. Les réglages de périphériques se trouvent dans le fichier /etc/sysconfig/hardware. À partir de SUSE LINUX 9.3, ce fichier est normalement vide car udevd reçoit les messages hotplug via un socket netlink.

18.1. Périphériques et interfaces

Le système hotplug ne gère pas que des interfaces mais aussi des périphériques. Un périphérique est lié soit à un bus, soit à une interface. Un bus peut être considéré comme une interface multiple. Une interface relie des périphériques entre eux ou à une application. Il existe aussi des périphériques virtuels tels que des tunnels réseau. Les périphériques nécessitent généralement des pilotes sous forme de modules du noyau. Les interfaces sont principalement représentées par des nœuds de périphériques créés par udev. La distinction entre périphériques et interfaces est importante pour la compréhension du concept général.

On trouve dans /sys/devices les périphériques déclarés dans le système de fichiers sysfs ; les interfaces se trouvent dans /sys/class ou /sys/block. Dans le fichier sysfs, toutes les interfaces doivent comporter un lien (en anglais link) vers leur périphérique. Toutefois, il existe encore quelques pilotes qui n'ajoutent pas automatiquement ce lien. Sans ce lien, on ne sait pas à quel périphérique appartient cette interface et il est impossible de trouver une configuration adaptée.

Les périphériques sont identifiés au moyen d'une description de périphérique. Celle-ci peut être le chemin de périphérique (device path) dans sysfs (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0), une description de l'emplacement de connexion (bus-pci-0000:02:00.0), un identifiant individuel (id-32311AE03FB82538) ou toute méthode comparable d'identification. Auparavant les interfaces étaient toujours identifiées par leur nom. Ces noms sont une simple numérotation des périphériques existants, qui peuvent donc avoit été modifiés lorsque les périphériques ont été ajoutés ou supprimés.

On peut aussi identifier les interfaces par une description du périphérique correspondant. C'est alors généralement le contexte qui permet de déterminer si c'est de la description du périphérique lui même ou de son interface dont il est question. Des exemples typiques de périphériques, d'interfaces et de leurs descriptions sont :

Carte réseau PCI

Un périphérique lié au bus PCI (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0 ou bus-pci-0000:02:00.0) et qui dispose d'une interface réseau ( eth0, id-00:0d:60:7f:0b:22 ou bus-pci-0000:02:00.0). Celle-ci est utilisée par des services réseau ou est liée à un périphérique réseau virtuel comme un tunnel ou un réseau local virtuel (VLAN), lequel possède en retour une interface.

Contrôleur PCI SCSI

Un périphérique (/sys/devices/pci0000:20/0000:20:01.1, etc.) qui met à disposition plusieurs interfaces physiques sous la forme d'un bus (/sys/class/scsi_host/host1).

Disque dur SCSI

Un périphérique (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0, bus-scsi-1:0:0:0) avec plusieurs interfaces (/sys/block/sda*).


SUSE LINUX Guide de l'administrateur 9.2