02.12.2012 Aufrufe

Erstellt von Dr. Jörg Meese www.doc-systems.de 1

Erstellt von Dr. Jörg Meese www.doc-systems.de 1

Erstellt von Dr. Jörg Meese www.doc-systems.de 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Hotplug<br />

USB<br />

Mittlerweile wer<strong>de</strong>n in vielen Computern Hardwarekomponenten verwen<strong>de</strong>t, die zur Laufzeit <strong>de</strong>s Systems<br />

angeschlossen und wie<strong>de</strong>r abgenommen wer<strong>de</strong>n können. Neben USB, als bekanntestes Beispiel für diese Komponenten,<br />

gibt es auch noch PCI, PCMCIA, Firewire, SCSI und an<strong>de</strong>re Schnittstellen.<br />

Hotplug-Systeme haben die Aufgabe, neu angeschlossene bzw. eingebaute Hardware zu erkennen und diese<br />

automatisch betriebsbereit einzurichten. Des Weiteren müssen Komponenten, die wie<strong>de</strong>r entnommen wer<strong>de</strong>n sollen, auf<br />

diese Entnahme vorbereitet wer<strong>de</strong>n bzw. Ressourcen wie<strong>de</strong>r frei gegeben wer<strong>de</strong>n, wenn Komponenten ohne<br />

Vorwarnung entfernt wur<strong>de</strong>n.<br />

Arbeitsweise <strong>de</strong>s Kernel-USB mit Hilfe <strong>von</strong> hotplug:<br />

/etc/init.d/boot.hotplug Start <strong>de</strong>s Hotplug-Systems<br />

/sbin/hotplug vom Kernel aufgerufenes Skript, <strong>de</strong>m er die Hotplug-Ereignisse sowie die Hardware-Infos<br />

<strong>de</strong>r eingesteckten USB-Karte übergibt<br />

/etc/hotplug/usb.agent dieser Agent ermittelt die geeigneten Treiber für die Karte<br />

/etc/hotpug/usb.usermap hier prüft <strong>de</strong>r Agent, ob diese Hardware <strong>von</strong> einem Anwendungsprogramm bzw. einem<br />

speziellen Initialisierungsskript bedient wer<strong>de</strong>n soll<br />

/lib/modules//modules.usbmap Zuordnungstabelle <strong>de</strong>s Kernels<br />

/etc/hotplug/net.agent bei Netzwerkkarten erzeugt <strong>de</strong>r Kernel ein Hotplug-Netzwerkereignis<br />

<strong>de</strong>r net.agent bin<strong>de</strong>t die benötigten Netzwerkinformationen an die Karte<br />

Realisierung <strong>von</strong> Hotplug in Linux<br />

Für gewöhnlich überwachen so genannte Daemonen Teile eines Systems auf externe Ereignisse; so überwacht z.B. <strong>de</strong>r<br />

inetd eingehen<strong>de</strong> Netzwerkanfragen. Der Daemon bei Hotplug ist <strong>de</strong>r Kernel selbst. Dazu müssen die Treiber eines<br />

Busses in <strong>de</strong>r Lage sein, neue Geräte zu erkennen und diese auf einheitlichem Weg <strong>de</strong>m System mitzuteilen. Im Kernel<br />

2.4 sind USB, PCMCIA, Firewire, teilweise PCI und das Netzwerksubsystem dazu in <strong>de</strong>r Lage. Dieser Teil <strong>von</strong><br />

Hotplug ist in <strong>de</strong>n jeweiligen Modulen fest eingebaut und lässt sich ohne Kernelän<strong>de</strong>rung nicht weiter beeinflussen.<br />

Der zweite Teil <strong>von</strong> Hotplug leitet die notwendigen Schritte zum Einbin<strong>de</strong>n <strong>von</strong> Geräten bzw. <strong>de</strong>ren herauslösen ein<br />

und ist eine Sammlung <strong>von</strong> Skripten im Verzeichnis /etc/hotplug mit <strong>de</strong>m zentralen Skript /sbin/hotplug. Dieses Skript<br />

ist die Schnittstelle zwischen <strong>de</strong>m Kernel und <strong>de</strong>r Hotplug-Skriptsammlung.<br />

Im weiteren Verlauf <strong>de</strong>s Kapitels wer<strong>de</strong>n wir mit ,,Hotplug-System`` diese Skripte bezeichnen.<br />

Wenn ein hotplugfähiges Gerät angeschlossen o<strong>de</strong>r entfernt wird, ruft <strong>de</strong>r Kernel das Skript /sbin/hotplug auf und<br />

übergibt zusätzliche Informationen über die entsprechen<strong>de</strong> Hardwarekomponente. Dieses Skript verteilt die Arbeit - je<br />

nach Art <strong>de</strong>r Hardware - an weitere Skripte. Diese la<strong>de</strong>n bzw. entla<strong>de</strong>n die Kernelmodule und rufen wie<strong>de</strong>rum weitere<br />

Programme zur Konfiguration <strong>de</strong>r Komponenten auf. Die Programme liegen in /etc/hotplug und en<strong>de</strong>n immer mit<br />

.agent.<br />

Hotplug starten und Coldplug<br />

Obwohl <strong>de</strong>r Kernel immer Hotplugereignisse an /sbin/hotplug weitergibt, muss das Hotplug-System erst einmal mit<br />

<strong>de</strong>m Befehl rchotplug start gestartet wer<strong>de</strong>n. Solange Hotplug nicht gestartet ist, wer<strong>de</strong>n alle entsprechen<strong>de</strong>n Ereignisse<br />

verworfen. Außer<strong>de</strong>m gibt es Komponenten, die vom Kernel schon erkannt wer<strong>de</strong>n, bevor überhaupt ein Zugriff auf das<br />

Dateisystem möglich ist. Diese Ereignisse gehen einfach verloren. Deshalb wird in <strong>de</strong>n Skripten /etc/hotplug/*.rc<br />

versucht, für bereits vorhan<strong>de</strong>ne Hardware diese Ereignisse künstlich zu erzeugen. In diesem Zusammenhang wird auch<br />

<strong>von</strong> ,,Coldplug`` gesprochen. Falls zu diesem Zeitpunkt die USB-Basismodule noch nicht gela<strong>de</strong>n sind, wer<strong>de</strong>n diese<br />

gela<strong>de</strong>n und das USB-Gerätedateisystem (usb<strong>de</strong>vfs) eingehängt.<br />

Wird Hotplug durch einen Aufruf <strong>von</strong> rchotplug stop angehalten, wer<strong>de</strong>n keine weiteren Ereignisse mehr ausgewertet.<br />

Wer nie während <strong>de</strong>s Betriebs seine Hardware verän<strong>de</strong>rt, kann Hotplug auch vollständig <strong>de</strong>aktivieren. Allerdings muss<br />

dann auf an<strong>de</strong>re Art und Weise für die Einrichtung <strong>von</strong> USB- o<strong>de</strong>r PCMCIA-Geräten gesorgt wer<strong>de</strong>n.<br />

<strong>Erstellt</strong> <strong>von</strong> <strong>Dr</strong>. <strong>Jörg</strong> <strong>Meese</strong> <strong>www</strong>.<strong>doc</strong>-<strong>systems</strong>.<strong>de</strong> 1


Im Verzeichnis /etc/sysconfig/hotplug gibt es einige Variablen, die das Verhalten <strong>von</strong> Hotplug steuern. So kann z.B. mit<br />

<strong>de</strong>r Variable die ,,Gesprächigkeit`` <strong>von</strong> Hotplug beeinflusst wer<strong>de</strong>n. Über die Variablen<br />

, und kann eingestellt wer<strong>de</strong>n,<br />

dass nur Ereignisse bestimmten Typs verarbeitet wer<strong>de</strong>n. Alle weiteren Variablen sind in <strong>de</strong>n entsprechen<strong>de</strong>n<br />

Unterabschnitten näher erläutert. Alle Meldungen <strong>von</strong> Hotplug wer<strong>de</strong>n immer in <strong>de</strong>r Datei (/var/log/messages)<br />

(Systemlog) protokolliert.<br />

Wenn ein neues USB-Gerät angeschlossen wird, ermittelt das Skript /etc/hotplug/usb.agent einen geeigneten Treiber<br />

und stellt sicher, dass dieser gela<strong>de</strong>n ist. Dieser Treiber muss nicht unbedingt ein Kernelmodul sein; beispielsweise<br />

wer<strong>de</strong>n viele USB-Kameras direkt <strong>von</strong> Anwendungsprogrammen angesprochen.<br />

Die Zuordnung <strong>von</strong> Treibern zur Hardware ist mehrstufig: Als Erstes wird in <strong>de</strong>r Datei /etc/hotplug/usb.usermap<br />

nachgesehen, ob diese Hardware <strong>von</strong> einem Anwendungsprogramm bzw. einem speziellen Initialisierungsskript bedient<br />

wer<strong>de</strong>n soll. Falls das nicht zutrifft, wird in /etc/hotplug/usb.handmap nach einer individuellen Zuordnung zu einem<br />

Kernelmodul gesucht. Wenn auch dort nichts gefun<strong>de</strong>n wur<strong>de</strong> (was in <strong>de</strong>n meisten Fällen zutrifft), wird letztendlich die<br />

Zuordnungstabelle <strong>de</strong>s Kernels /lib/modules//modules.usbmap befragt. Des Weiteren wird hier<br />

nochmal ein USB-Hardwarescan durchgeführt, <strong>de</strong>r bei <strong>de</strong>r Verwendung <strong>von</strong> KDE als grafische Oberfläche weitere<br />

Aktionen auslöst. Zum Beispiel wird für Geräte, die zum ersten Mal verwen<strong>de</strong>t wer<strong>de</strong>n, ein geeignetes YaST-Modul zur<br />

Konfiguration angeboten o<strong>de</strong>r Applikationen zur Verwendung mit <strong>de</strong>m neuen Gerät wer<strong>de</strong>n gestartet. Dieser<br />

Mechanismus läuft parallel zu <strong>de</strong>n an<strong>de</strong>ren Aktionen, die <strong>von</strong> /etc/hotplug/usb.agent ausgelöst wer<strong>de</strong>n.<br />

USB-Geräte wer<strong>de</strong>n vom usb.agent je nach Typ unterschiedlich behan<strong>de</strong>lt:<br />

Speichergeräte<br />

wie z.B. Festplatten wer<strong>de</strong>n vom Skript /usr/sbin/checkhotmounts behan<strong>de</strong>lt, sobald die erfor<strong>de</strong>rlichen Treiber gela<strong>de</strong>n<br />

sind.<br />

Netzwerkgeräte<br />

erzeugen ein eigenes Hotplugereignis im Kernel, sobald diese registriert wer<strong>de</strong>n. Der usb.agent hinterlegt lediglich<br />

Hardwareinformationen, die später vom Netzwerkereignis verwen<strong>de</strong>t wer<strong>de</strong>n. Dies ist nur eine vorübergehen<strong>de</strong> Lösung<br />

für <strong>de</strong>n Kernel 2.4 und versagt, wenn mehrere USB-Netzwerkgeräte verwen<strong>de</strong>t wer<strong>de</strong>n. Dies kommt je<strong>doc</strong>h nur sehr<br />

selten vor.<br />

Kameras<br />

wer<strong>de</strong>n über <strong>de</strong>n Hardwarescan/KDE-Mechanismus angesprochen. Dazu wer<strong>de</strong>n allerdings noch via<br />

/etc/hotplug/usb/usbcam die Zugriffsrechte <strong>de</strong>r Gerätedatei für <strong>de</strong>n eingeloggten Benutzer gesetzt, damit dieser unter<br />

KDE darauf zugreifen kann.<br />

Mäuse<br />

benötigen nur ein gela<strong>de</strong>nes Modul, welches hier gela<strong>de</strong>n wird, um sofort verwen<strong>de</strong>t zu wer<strong>de</strong>n.<br />

Tastaturen<br />

wer<strong>de</strong>n schon beim Bootvorgang benötigt und wer<strong>de</strong>n <strong>de</strong>shalb nicht <strong>von</strong> Hotplug behan<strong>de</strong>lt.<br />

ISDN/Mo<strong>de</strong>m<br />

wird <strong>de</strong>rzeit noch nicht automatisch eingerichtet.<br />

Es gibt noch einige USB-spezifische Variablen in /etc/sysconfig/hotplug. In<br />

stehen die Treiber für <strong>de</strong>n USB-Controller in <strong>de</strong>r Reihenfolge, wie<br />

sie zu la<strong>de</strong>n versucht wer<strong>de</strong>n. Wird ein Treiber erfolgreich gela<strong>de</strong>n, wer<strong>de</strong>n in<br />

die Module eingetragen, die beim Entfernen <strong>de</strong>r Komponente wie<strong>de</strong>r<br />

entla<strong>de</strong>n wer<strong>de</strong>n sollen. Alle nachfolgen<strong>de</strong>n Module für USB wer<strong>de</strong>n nicht entla<strong>de</strong>n, weil nicht sicher entschie<strong>de</strong>n<br />

wer<strong>de</strong>n kann, ob sie noch <strong>von</strong> einem Gerät benötigt wer<strong>de</strong>n. Die Variable <br />

enthält die Namen <strong>de</strong>r Module, die ein Netzwerkinterface zur Verfügung stellen. Sobald eines dieser Module gela<strong>de</strong>n<br />

wird, wird eine Hardwarebeschreibung zur späteren Verwendung beim Netzwerkereignis abgelegt. Dieser Vorgang<br />

wird in <strong>de</strong>r System-Logdatei protokolliert.<br />

<strong>Erstellt</strong> <strong>von</strong> <strong>Dr</strong>. <strong>Jörg</strong> <strong>Meese</strong> <strong>www</strong>.<strong>doc</strong>-<strong>systems</strong>.<strong>de</strong> 2

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!