Table des matières
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.
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 :
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.
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).
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*).