Hotplugging
Hotplugging (engl. hot lugging; dt. "heisses Einstecken") und Hotswapping (engl. hot swapping; dt. "heisses Austauschen") bezeichnen die Wechselbarkeit bzw. den Wechsel von Systemkomponenten bzw. Modulen im laufenden Betrieb eines Systems.
- Hotplugging bezieht sich auf Komponenten, die mit Software (normalerweise dem Betriebssystem) interagieren und meist eine vorinstallierte Unterstützung durch Software benötigen. Bekannteste Beispiele für Hotplugging-fähige Technologien sind allgemeine Rechnerschnittstellen wie USB, Firewire, PCMCIA oder auch Bluetooth zum Anschluss von Peripheriegeräten oder speziellere wie die Festplattenschnittstellen SCSI, SATA und SAS.
- Hotswapping bezieht sich auf den Austausch von Komponenten, die nicht mit Software interagieren. Hotswapping bezeichnet analog diser Definition ausserdem die Fähigkeit, den ausführbaren Code eines Programms während der Laufzeit zu ändern, ohne die Ausführung des Programms zu unterbrechen.
Damit die dynamische Geräteerkennung funktioniert, ist der Linux-Kernel mit der Option "CONFIG_HOTPLUG" zu übersetzen, was den Standarddistributionen gemacht wird. Wird mit einem Gerätetreiber ein sogenanntes Kobject hinzugefügt oder entfernt, so schickt der Kernel dem udev-Daemon entsprechende Nachrichten oder ruft durch die Funktion "kset_hotplug" (Quellcode in "lib/kobject.c") das in "/proc/sys/kernel/hotplug" aufgeführte Programm auf.
Früher war das "/sbin/hotplug", später "/sbin/udevsend", in neuen Versionen fällt es ganz weg. Als Argument dient die Klasse des Subsystems (z. B. "ieee1394", "net", "pci" oder "usb"). Weitere Informationen stehen in Umgebungsvariablen. Hierbei besitzt "ACTION" die Werte "add" oder "remove". Die Variable "SEQNUM" inkrementiert sich bei jedem Aufruf. "DEVPATH" gibt an, wo im Sysfs die Geräteinformationen zu finden sind, etwa unter "/devices/pci0001:01/0001:01:19.0/usb2/2-1/2-1:1.0". Zusätzliche Informationen sind beispielsweise "MAJOR", "MINOR" und "UDEV_EVENT".
Je nach Objekttyp exportiert das Skript noch andere Variablen: für physische Hardware die Vendor und Produkt-IDs oder für USB in "DEVICE" den entsprechenden Eintrag im USB-FS. Passend zum Beispiel wäre dies "/proc/bus/usb/002/010". udev selbst (früher die Hotplug-Skripte) ordnet das passende Kernelmodul mit dem Treiber anhand der Hardware-IDs in "/lib/modules/$ver" zu und lädt es.