Home / LinuxUser / 2005 / 03 / Hotplugging mit Udev, HAL und D-Bus

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Mit heißer Nadel

Hotplugging mit Udev, HAL und D-Bus

01.03.2005 Hardware, die einfach funktioniert, wenn man sie am PC ansteckt – das ist der berechtigte Wunsch jedes Anwenders. Aktuelle Linux-Distributionen tun einiges dafür. Wir erklären, wie die einzelnen Komponenten des zuständigen Hotplug-Systems zusammenspielen.

Kann das denn wirklich so schwer sein? Sie wollten doch nur, dass Linux das richtige Programm startet, als Sie die neue Digitalkamera einsteckten. Doch das Betriebssystem begegnet Ihnen mit eisigem Schweigen.

Diese Situation ist nur allzu bekannt, auch wenn sich mittlerweile einiges verbessert hat. Unser Artikel erklärt, was ein modernes Linux mit frisch eingesteckten Geräten macht und warum noch immer nicht alles nach Wunsch funktioniert.

Prinzipiell soll Linux natürlich mit jeder Art von Hardware richtig umgehen. Besondere Bedeutung gewinnt mit der Verbreitung von USB und Firewire die Fähigkeit, während des Betriebs ein- und ausgesteckte Geräte richtig zu verwalten, das so genannte Hotplugging [1].

Agenten im Einsatz

Eine Schlüsselrolle beim Hotplugging spielen die Skripts in /etc/hotplug/, die so genannten Agenten. Sie treten in Aktion, wenn der Kernel dem Hotplug-System ein Ereignis (Event) signalisiert, in der Regel das Anschließen oder Ausstecken externer Hardware.

Es existieren zwei Typen von Ereignissen: Während ein Device Event für die grundlegende Initialisierung des Gerätes sorgt, richtet Hotplug bei einem Interface Event das Gerät quasi benutzerfertig ein, bereitet also die Schnittstelle (Interface) für Anwendungen vor.

Dazu legt Hotplug mit Hilfe von Udev die entsprechende Gerätedatei an und ruft anschließend den zuständigen Agenten auf. Mehr Details zu UDev liefert der entsprechende Kasten.

Für jeden Agenten sind verschiedene Aktionen festgelegt, die ihm das in /proc/sys/kernel/hotplug definierte Hotplug-Programm als Parameter übergibt: add respektive register für das Anschließen der Komponente und remove oder unregister für das Entfernen. Welche Schritte die einzelnen Agenten genau ausführen, hängt von der benutzten Distribution und der jeweiligen Hardwarekomponente ab.

Da ein großer Teil der hotplug-fähigen Hardware über USB an das System angeschlossen wird, bewerkstelligt die meisten Aufgaben der USB-Agent. Er überprüft zunächst, ob er für das neue Gerät einen Treiber findet (zum Beispiel isdn) und lädt dann das entsprechende Modul über modprobe. Findet er ein zum Treiber gleichnamiges Skript im Verzeichnis /etc/hotplug/usb/, führt er es aus.

Damit hat er seine Aufgabe eigentlich schon beendet. Das Laden der entsprechenden Module löst aber meistens weitere Hotplug-Events aus, die wieder andere Agenten starten.

Bei vielen Hardware-Elementen arbeiten deshalb mehrere Hotplug-Agenten zusammen. So startet beim Anschließen einer externen Festplatte erst der USB-Agent, dann der SCSI-Agent, um mit Hilfe des Moduls usb-storage die einzelnen Partitionen als SCSI-Geräte einzubinden. Bei einem Bluetooth-Dongle startet zuerst der USB-Agent, dann der bluetooth.agent.

Eine weitere Aufgabe der Hotplug-Agenten ist das Laden der Firmware, sofern es das entsprechende Gerät verlangt. Die Datei /etc/hotplug/blacklist führt Module auf, die keiner der Agenten laden darf. auf. Hier finden sich Module, die das System über andere Dienste startet, oder die das Powermanagement behindern.

Gerätedateien nach Bedarf

Damit Linux die Hardware benutzen kann, braucht es in den allermeisten Fällen Gerätedateien. Auf modernen Distributionen legt das Udev-Subsystem diese an, wenn ein neues Gerät im Kernel auftaucht.

Wer beispielsweise seinem MP3-Stick eine andere Gerätedatei als sda1 zuweisen will, kann dafür eine eigene Udev-Regel schreiben. Bei der Vielzahl an Skripts im Hotplug-System gibt es auch andere Wege, wir beschränken uns erst einmal auf diese Lösung.

Die Udev-Regeln liegen im Verzeichnis in /etc/udev/rules.d. Dort befindet sich eine Datei, die übliche Geräte beschreibt, unter Ubuntu udev.rules, bei Fedora 50-udev.rules. Udev liest die Dateien in lexikalischer Reihenfolge. Wer eigene Udev-Regeln vor der systemweiten gelesen wissen möchte, muss also einen passenden Dateinamen verwenden, zum Beispiel 10-local.rules. Für einen Noname-MP3-Stick verwendeten wir darin folgenden Eintrag:

BUS="usb", SYSFS{idProduct}=↩
"1000", SYSFS{idVendor}="10d6",↩
 NAME="mp3disk"

Nun zeigt der Gnome-Desktop nicht mehr die Gerätebezeichnung sda1, sondern das etwas aussagekräftigere mp3disk an (Abbildung 1). Beim Finden der verwendenten USB-IDs hilft das Programm lsusb, das die angeschlossenen USB-Geräte auflistet. Existiert schon eine Gerätedatei, zeigt udevinfo -q path -n /dev/Gerätedatei den Pfad im SysFS (siehe Kasten Udev) – allerdings ohne den Mount-Punkt /sys. Dieser Pfad dient wieder als Parameter (-p) für denselben Befehl, um SysFS-Infos anzuzeigen:

udevinfo -a -p /block/hda/hda1
…
    SYSFS{idVendor}="10d6"
…

Abbildung 1: Mit einer angepassten Udev-Konfigurationsdatei erhält das Icon auf dem Gnome-Desktop eine passende Beschriftung.

Auch so finden sie also gerätespezifische Werte, die Sie für spezielle Konfigurationen verwenden können. Eine ausführliche, englischsprachige Beschreibung, wie man Udev-Dateien erstellt, findet sich unter [2]. Die Fedora-Site bietet einen knappen Überblick des Udev-Systems [3].

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

989 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zum Autor

Marcel Hilzinger

Marcel Hilzinger

Marcel Hilzinger arbeitet als Redakteur für die Zeitschriften LinuxUser und EasyLinux. Am liebsten schreibt er Artikel zu netten Gadgets oder Multimedia-Software. In seiner Freizeit spielt er gerne Kicker.

Zum Blog von Marcel Hilzinger →


Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...