Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Auf serielle Geräte zugreifen

Wie auf alle Geräte in einem UNIX-System greifen Sie auch auf serielle Geräte über spezielle Dateien im Verzeichnis /dev zu. Es gibt zwei Arten von Gerätedateien, die mit seriellen Treibern zu tun haben, und für jeden Port gibt es jeweils eine Gerätedatei von jedem Typ. Abhängig von der Datei, über die Sie darauf zugreifen, wird sich das Gerät unterschiedlich verhalten. Wir gehen auf die Unterschiede etwas ausführlicher ein, damit Sie einige besondere Konfigurationsdetails serieller Geräte besser verstehen. In der Praxis werden Sie es allerdings nur mit einer Art von Gerätedateien zu tun bekommen, und in Zukunft könnte eine der beiden Grätedateien sogar komplett verschwinden.

Die wichtigste der beiden Arten serieller Geräte hat die Major Number (Major Number) 4. Ihre Gerätedateien haben die Bezeichnung ttyS0, ttyS1 usw. Die zweite Art hat die Major Number 5, ist für Dialout-Anwendungen über die Ports vorgesehen und verwendet die Gerätedateien cua0, cua1 etc. In der Unix-Welt beginnt jede Zählung immer mit null, während Laien dazu tendieren, mit eins zu beginnen. Diese Zählweise verwirrt einige Leute, weil COM1: nicht etwa der Gerätedatei /dev/ttyS1 entspricht, sondern /dev/ttyS0! Die Schnittstelle COM2: entspricht /dev/ttyS1 usw. Jeder, der sich etwas mit PC-Hardware auskennt, weiß, daß die anderen Schnittstellen wie COM3: und höher nie richtig standardisiert wurden.

Serielle Ports, an denen Modems angeschlossen sind, müssen in der Lage sein, sowohl Daten empfangen als auch senden zu können. Damit es dabei nicht zu Konflikten kommt, wurden besondere Gerätedateien eingeführt, die sogenannten cua- bzw. ­“callout”-Geräte. Unglücklicherweise haben sich diese mittlerweile selbst als problematisch erwiesen und werden vermutlich nicht mehr weiterentwickelt. Das Problem ist folgendes:

Linux gestattet es (wie Unix auch), eine (Geräte-)Datei von mehreren Prozessen gleichzeitig zu öffnen. Diese an sich sehr nützliche Sache ist für tty-Geräte allerdings überhaupt nicht sinnvoll, da es passieren kann, daß sich dort mehrere Prozesse gegenseitig in die Quere kommen. Zum Glück hat sich jemand einen Mechanismus ausgedacht, der es einem Prozeß ermöglicht, vor dem Öffnen einer Gerätedatei festzustellen, ob diese Datei schon von einem anderen Prozeß belegt wurde. Dieser Mechanismus verwendet sogenannte Sperrdateien (lock files) und funktioniert so: Will ein Prozeß ein tty-Gerät öffnen, prüft er zunächst, ob es eine besondere Datei (die Sperrdatei) gibt, die dem Namen der Gerätedatei ähnlich ist. Existiert eine solche Datei, nimmt der Prozeß an, daß das gewünschte Gerät von einem anderen Prozeß benutzt wird. Wenn die Datei dagegen nicht existiert, geht der Prozeß davon aus, daß das Gerät frei ist, erzeugt dann selbst eine Sperrdatei und reserviert das tty-Gerät für sich. Es gibt noch einen letzten cleverer Trick, damit die Verwaltung von Sperrdateien funktioniert. Die PID des Prozesses, der diese Datei angelegt hat, wird in die Datei selbst geschrieben. Darauf gehen wir gleich näher ein.

Der Sperrdatei-Mechanismus funktioniert perfekt in Systemumgebungen, in denen es ein eindeutiges Verzeichnis für alle Sperrdateien gibt und alle Programme wissen, wo sich dieses Verzeichnis befindet. Bei Linux war das lange Zeit nicht so. Erst seit der ­offiziellen Einführung des Linux Filesystem Standards (FSSTND) funktioniert der Sperrdatei-Mechanismus für tty-Geräte in Linux störungsfrei. Vorher gab es in manchen Linux-Distributionen phasenweise sogar vier (wenn nicht noch mehr) verschiedene Verzeichnisse für Sperrdateien:/usr/spool/locks/, /var/spool/locks/, /var/lock/ und /usr/lock/. Es ist klar, daß bei einer solchen Konfusion nur Chaos entstehen konnte. Verschiedene Prozesse öffneten an verschiedenen Stellen gleichzeitig Sperrdateien, die eigentlich zur exklusiven Kontrolle einzelner tty-Geräte gedacht waren. Solche Sperrdateien waren dann natürlich nutzlos.

Um einen Ausweg aus diesem Dilemma zu finden, wurden die cua-Geräte eingeführt. Diese Gerätedateien verwendeten keine Sperrdateien mehr, um die Konflikte zwischen Programmen beim Zugriff auf serielle Geräte zu lösen, sondern überließen die Entscheidung über die Freigabe der Geräte dem Kernel. Immer wenn ein ttyS-Gerät bereits geöffnet war, sollte ein Versuch, das zugehörige cua-Gerät zu öffnen, einen Fehler produzieren, der das öffnende Programm darauf hinwies, daß das Gerät bereits belegt war. Im umgekehrten Fall, wenn also das Gerät cua bereits geöffnet war und ein Versuch unternommen wurde, das Gerät ttyS zu öffnen, sollte kein Fehler produziert werden, sondern lediglich die Anfrage blockiert werden, d.h., der öffnende Prozeß mußte dann so lange warten, bis das cua vom anderen Prozeß wieder geschlossen wurde. Dieses Verfahren funktioniert ganz gut, wenn man nur ein einzelnes Modem hat, das die meiste Zeit im Dialin-Modus arbeitet und nur ab und zu ein Dialout über das gleichen Gerät ausführt. In Umgebungen, in denen mehrere Programme gleichzeitig ablaufen, die dasselbe Gerät zum Dialout nutzen wollen, funktioniert die Sache leider nicht. Dazu müßten wieder Sperrdateien verwendet werden, und wir wären genauso schlau wie vorher!

Erst mit der Einführung des Linux Filesystem Standards kam das rettende Ufer in Sicht. Er legt fest, daß grundsätzlich Sperrdateien verwendet werden und diese in einem eindeutigen Verzeichnis abgelegt werden sollten, nämlich /var/lock. Per Konvention haben die Namen aller Sperrdateien ein ganz besonderes Format. So hat z.B. die Sperrdatei für das ttyS1-Gerät den Namen LCK..ttyS1. Die Sperrdateien für cua-Geräte sollten auch in diesem Verzeichnis abgelegt werden, jedoch wird von der Verwendung dieser Geräte abgeraten.

Die cua-Geräte werden eventuell noch eine Zeitlang unterstützt, um Rückwärtskompatibilität zu gewährleisten, mit der Zeit werden sie jedoch an Bedeutung verlieren. Falls Sie unsicher sind, verwenden Sie grundsätzlich nur ttyS-Geräte und stellen Sie sicher, daß Ihr System auch wirklich den Linux-FSSTND verwendet. Zumindest sollten alle Programme, die serielle Geräte verwenden, ihre Sperrdateien in einem einzigen besonderen ­Verzeichnis ablegen. Die meisten Programme, die mit tty-Geräten zu tun haben, bieten die Möglichkeit, bei der Übersetzung ihrer Quelldateien das Sperrverzeichnis mit einer speziellen Compiler-Option festzulegen. In manchen Fällen kann man dieses Verzeichnis auch in einer Variablen namens LOCKDIR im Makefile oder in einer Konfigura­tions- ­Header-Datei angeben. Wenn Sie Ihre Software selbst übersetzen, ist es am besten, wenn Sie sich genau an den FSSTND halten. Bei vorkompilierten Binärpaketen, von denen Sie nicht wissen, wo sie die Sperrdateien ablegen, können Sie das wie folgt herausfinden:

strings binaryfile | grep lock
Stimmt das angezeigte Verzeichnis nicht mit dem Rest Ihres Systems überein, können Sie sich immer noch mit einem Trick behelfen. Versuchen Sie einfach, einen symbolischen Link vom Verzeichnis, das vom Binärprogramm favorisiert wird, zum Standardverzeichnis /var/lock/ anzulegen. Das ist zwar nicht besonders elegant, aber es funktioniert.

Spezialdateien für serielle Geräte

Die Minor Numbers sind für beide seriellen Geräteklassen gleich. Wenn Sie an einem der Ports COM1 bis COM4 ein Modem angeschlossen haben, ist seine Minor Number die Nummer des COM-Ports plus 63. Wenn Sie eine andere Art von Hardware verwenden, zum Beispiel eine leistungsfähige Multiport-Karte, kann es passieren, daß sie nicht mit den vorhandenen Standardtreibern funktioniert, sondern spezielle Gerätedateien benötigt. Wie man solche Gerätedateien prinzipiell erzeugt, können Sie im Serial-HOWTO nachlesen.

Nehmen wir an, Ihr Modem sei an COM2 angeschlossen. Dann ist seine Minor Number 65, und die Major Number ist 4. Sie sollten in /dev eine Datei namens ttyS1 finden, die diese Gerätenummern trägt. Wenn Sie die seriellen ttys in /dev auflisten, finden Sie die Major und Minor Numbers in den Spalten 5 und 6:

$ ls -l /dev/ttyS* 
0 crw-rw----   1 uucp     dialout    4,  64 Oct 13  1997 /dev/ttyS0 
0 crw-rw----   1 uucp     dialout    4,  65 Jan 26 21:55 /dev/ttyS1 
0 crw-rw----   1 uucp     dialout    4,  66 Oct 13  1997 /dev/ttyS2 
0 crw-rw----   1 uucp     dialout    4,  67 Oct 13  1997 /dev/ttyS3

Wenn keine solche Gerätedatei existiert, müssen Sie sie einrichten, indem Sie sich als Superuser anmelden und folgende Befehle eingeben:

# mknod -m 666 /dev/ttyS1 c 4 65 
# chown uucp.dialout /dev/ttyS1
In den verschiedenen Linux-Distributionen werden die Eigentumsrechte an den seriellen Geräten leicht unterschiedlich gehandhabt. In einigen Distributionen ist root als Eigentümer vorgesehen, in anderen dagegen uucp (wie in unserem Beispiel). Die modernen Varianten gehen noch einen Schritt weiter und ordnen die Dialout-Geräte einer speziellen Gruppe zu. Nur Anwender, die in dieser Gruppe eingetragen sind, dürfen diese Geräte benutzen.

Manche Leute empfehlen, einen symbolischen Link namens /dev/modem einzurichten, der auf Ihr Modem zeigt, damit ungeübte Benutzer sich nicht den wenig einprägsamen Namen cua1 merken müssen. Sie sollten dann allerdings nicht in einem Programm modem und in einem anderen Programm den echten Gerätenamen verwenden, da sonst die Sperrdateien unterschiedliche Namen bekommen und der Sperrmechanismus nicht mehr funktioniert.





vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag