Copyright © 1996 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux: Wegweiser durch das Netzwerk" dann klicken Sie hier.


Kapitel 4
Konfiguration der seriellen Hardware

Gerüchten zufolge soll es dort draußen in Netzland Leute geben, die nur einen PC besitzen und auch nicht das nötige Kleingeld für einen 2Megabit-Anschluß ans Internet haben. Um trotzdem ihre tägliche Dosis an Mail und News zu bekommen, benutzen sie SLIP-Links, UUCP-Netze und Mailboxen, die auf dem normalen Telefonnetz aufbauen.

Dieses Kapitel soll all den Leuten helfen, die ihre Netzverbindung mit Hilfe von Modems aufrechterhalten. Es gibt allerdings viele Details, die dieses Kapitel nicht abdecken kann, z. B. die Konfiguration eines Modems zwecks Einwählens in Ihr System. All diese Themen werden im »Serial HOWTO« von Greg Hankins(1) behandelt, das regelmäßig nach comp.os.linux.answers gepostet wird.

Software für Modem-Verbindungen

Unter Linux gibt es eine ganze Reihe von Kommunikations-Programmen. Viele von ihnen sind einfache Terminal-Programme, die dem Benutzer bzw. der Benutzerin erlauben, sich in ein anderes System einzuwählen, als säße er bzw. sie vor einem ganz gewöhnlichen Terminal. Das traditionelle Terminal-Programm unter UNIX ist kermit, es ist allerdings etwas spartanisch. Es gibt wesentlich komfortablere Programme, die Nummernverzeichnisse, Script-Sprachen zum Anwählen und Einloggen in andere Systeme usw. unterstützen. Eines von ihnen ist minicom, dessen Oberfläche und Bedienung dem sehr ähnlich ist, was ehemalige DOS-Benutzer gewohnt sein mögen. Außerdem existieren noch X-basierte Terminal-Programme wie seyon.

Daneben gibt es für Leute, die eine Mailbox betreiben wollen, eine Reihe von BBS-Paketen für Linux. Einige davon sind auf sunsite.unc.edu unter /pub/Linux/system /Network zu finden.

Abgesehen von Terminal-Programmen gibt es auch Software, die Daten ohne Ihr Eingreifen auf Ihren oder von Ihrem Rechner überträgt. Das Vorteilhafte daran ist, daß es wesentlich weniger Zeit kostet, einige Dutzend Kilobytes automatisch herunterzuladen, als Sie vielleicht dafür brauchen, um Ihre Mail online zu lesen oder eine Mailbox nach interessanten Artikeln zu durchforsten. Auf der Gegenseite erfordert dies allerdings auch mehr Plattenplatz, da dabei auch jede Menge Information übertragen wird, die Sie vielleicht gar nicht interessiert.

Der Inbegriff dieser Art von Kommunikations-Software ist UUCP. Dies ist ein Programmpaket, das Dateien von einem Host auf einen anderen übertragen und Befehle auf einem entfernten Rechner ausführen kann usw. Es wird häufig benutzt, um Mail und News in kleineren Netzen zu übertragen. Ian Taylors UUCP-Paket, das auch unter Linux läuft, wird in einem der folgenden Kapitel beschrieben. Andere, nicht-interaktive Software wird beispielsweise im Fido-Netz eingesetzt. Portierungen von Fido-Netzapplikationen wie z. B. ifmail sind unter Linux auch verfügbar.

Einführung in serielle Geräte

Die von einem UNIX-Kernel für die Kommunikation mit seriellen Geräten bereitgestellten Schnittstellen werden im allgemeinen ttys genannt. Dies ist eine Abkürzung für Teletype, den wichtigsten Hersteller von Terminals in den Anfangstagen von UNIX. Dieser Begriff wird heutzutage allgemein für zeichenorientierte Ein- und Ausgabegeräte benutzt. In diesem Kapitel werden wir ihn ausschließlich benutzen, um uns auf die Geräteschnittstellen des Kernel zu beziehen.

Linux unterscheidet drei Arten von Ttys: (virtuelle) Konsolen, Pseudo-Terminals (ähnlich einer bidirektionalen Pipe; wird von Applikationen wie telnet und xterm benutzt) und serielle Geräte. Die letzteren werden auch zu den Ttys gerechnet, weil sie interaktives Arbeiten über serielle Verbindungen erlauben, sei es von einem festverdrahteten Terminal aus oder über eine Telefonverbindung.

Ttys haben eine Reihe von Konfigurations-Parametern, die über den Systemaufruf ioctl(2) besetzt werden können. Viele davon beziehen sich ausschließlich auf serielle Geräte, da diese einen wesentlich höheren Grad an Flexibilität verlangen, um unterschiedliche Verbindungstypen bedienen zu können.

Zu den prominentesten Parametern gehören die Verbindungs-Geschwindigkeit und die Parität, aber es gibt auch so exotische Dinge wie Flags für die Umsetzung von Groß- in Kleinbuchstaben, von Wagenrücklauf in Zeilenvorschub usw. Der Tty-Treiber unterstützt auch mehrere Verbindungs-Modi (line disciplines), die das Verhalten des Treibers radikal ändern. Beispielsweise wurde der SLIP-Treiber unter Linux mit Hilfe eines solchen Verbindungs-Modus implementiert.

Der Begriff der Verbindungs-Geschwindigkeit ist nicht ganz einfach zu definieren. Der korrekte Ausdruck lautet Bitrate, was sich auf die Übertragungsgeschwindigkeit der Leitung in Bits pro Sekunde (kurz: bps) bezieht. Manchmal werden Sie auch hören, daß Leute den Ausdruck Baud-Rate verwenden, was nicht ganz korrekt ist. Diese Begriffe bezeichnen nicht ganz dasselbe. Die Baud-Rate bezieht sich auf eine physikalische Eigenschaft eines seriellen Geräts, nämlich auf die Taktrate, mit der elektrische Impulse übermittelt werden. Die Bitrate aber bezeichnet eine Eigenschaft einer bestehenden seriellen Verbindung, nämlich die durchschnittliche Anzahl der Bits, die pro Sekunde übertragen werden. Es ist wichtig zu wissen, daß diese Werte normalerweise stark voneinander abweichen, da die meisten Geräte mehr als ein Bit pro Impuls kodieren.

Auf serielle Geräte zugreifen

Wie auf alle Geräte in einem UNIX-System greifen Sie auch auf serielle Geräte durch 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.

Die erste Variante wird zum Einwählen in das System benutzt und trägt die Hauptnummer (major number) 4. Die Dateien heißen ttyS0, ttyS1 etc. Die zweite Gruppe wird zum Auswählen verwendet; die Dateien heißen hier cua0, cua1 usw. und tragen die Major-Nummer 5.

Die Gerätenummern (minor numbers) sind für beide Typen von Dateien gleich. Wenn Sie an einem der Ports COM1 bis COM4 ein Modem angeschlossen haben, ist seine Minor-Nummer die Nummer des COM-Ports plus 63. Wenn Sie eine andere Art von Hardware verwenden, zum Beispiel eine Multiport-Karte, schlagen Sie bitte im Serial-HOWTO nach.

Nehmen wir an, Ihr Modem sei an COM2 angeschlossen. Dann ist seine Minor-Nummer 65, und die Major-Nummer zum Auswählen ist 5. Sie sollten in /dev eine Datei namens cua1 finden, die diese Gerätenummern trägt. Wenn Sie die seriellen Ttys in /dev auflisten, finden Sie die Major- und Minor-Nummern in den Spalten 5 und 6:

$ ls -l /dev/cua*
crw-rw-rw-   1 root     root       5,  64 Nov 30  1993 /dev/cua0
crw-rw-rw-   1 root     root       5,  65 Nov 30  1993 /dev/cua1
crw-rw-rw-   1 root     root       5,  66 Nov 30  1993 /dev/cua2
crw-rw-rw-   1 root     root       5,  67 Jul  9  1994 /dev/cua3

Wenn keine solche Gerätedatei existiert, müssen Sie sie einrichten, indem Sie Superuser werden und folgende Befehle eintippen:

# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1

Manche Leute empfehlen, einen symbolischen Link namens /dev/modem einzurichten, der auf Ihr Modem zeigt, damit ungeübte Benutzer sich nicht den etwas unintuitiven Namen cua1 merken müssen. Sie können allerdings nicht in dem einen Programm modem und in einem anderen den echten Gerätenamen verwenden, weil diese Programme sogenannte Sperr- oder Lock-Dateien verwenden, um anzuzeigen, daß das Gerät gerade benutzt wird. Per Konvention vergibt die Lock-Datei z. B. für cua1 den Namen LCK..cua1. Wenn Sie nun einen anderen Namen für dasselbe Geräte benutzen, wird Ihr Programm diese Lock-Datei ignorieren und das Gerät trotzdem öffnen. Das Ende vom Lied ist, daß beide Applikationen nicht funktionieren.

Serielle Hardware

Linux unterstützt eine breite Palette an seriellen Karten, die den Standard RS-232 unterstützen. RS-232 ist der derzeit verbreitetste Standard für serielle Geräte in der PC-Welt. Er verwendet eine Reihe von Leitungen zur Übertragung der einzelnen Bits und zur Synchronisation. Weitere Leitungen können dafür benutzt werden, um das Anliegen eines Trägersignals zu signalisieren (bei Modems verwendet), sowie für den Handshake.

Obwohl den Hardware-Handshake vom Standard nicht vorgeschrieben wird, ist er doch sehr nützlich. Er erlaubt jeder der beiden Stationen, der anderen mitzuteilen, ob weitere Daten empfangen werden können oder ob die Gegenstelle eine Pause einlegen sollte, bis der Empfänger die anliegenden Daten verarbeitet hat. Die hierfür verwendeten Steuerleitungen heißen »Clear to Send« (CTS) und »Ready to Send« (RTS), woraus sich auch der umgangssprachliche Name RTS/CTS für den Hardware-Handshake ableitet.

In PCs wird die RS-232-Schnittstelle üblicherweise durch UART-Chips angesteuert, die vom National Semiconductor 16450 oder neueren Varianten wie dem NSC 16550A(2) abstammen. Einige Fabrikate (insbesondere interne Modems, die mit dem Rockwell-Chipsatz ausgerüstet sind) verwenden auch völlig andere Chips, die aber so programmiert worden sind, daß sie sich (fast) wie ein 16550 verhalten.

Der wesentliche Unterschied zwischen 16450s und 16550s ist, daß die letzteren einen 16 Byte großen FIFO-Buffer besitzen, während erstere nur einen 1 Byte großen Puffer ihr eigen nennen. Dadurch sind 16450s für Geschwindigkeiten bis 9600 bps geeignet, während Sie für höhere Geschwindigkeiten einen 16550 benötigen. Neben diesen unterstützt Linux auch den 8250-Chip, den ursprünglichen UART-Baustein im PC-AT.

In der voreingestellten Konfiguration überprüft der Kernel die Standard-Ports COM1 bis COM4 und weist ihnen, wenn vorhanden, die Minor-Nummern 64 bis 76 zu, wie oben beschrieben.

Wenn Sie Ihre seriellen Ports korrekt konfigurieren wollen, sollten Sie Ted Tsos setserial-Programm mitsamt dem Script rc.serial installieren. Dieses Script sollte beim Booten des Systems ausgeführt werden. Es verwendet setserial, um die seriellen Geräte im Kernel zu konfigurieren. Ein typisches rc.serial sieht so aus:

# /etc/rc.serial -- Konfigurations-Script für serielle Schnittstellen.
#
# Abfangen von "wild interrupts".
/sbin/setserial -W /dev/cua*
# Konfiguration der Schnittstellen./sbin/setserial /dev/cua0 auto_irq skip_test 
autoconfig
/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua2 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua3 auto_irq skip_test autoconfig
# Serielle Konfiguration anzeigen.
/sbin/setserial -bg /dev/cua*

Wenn Ihre serielle Karte nicht erkannt wird oder der Befehl setserial -bg eine falsche Einstellung anzeigt, werden Sie die korrekte Einstellung durch die Angabe der richtigen Werte erzwingen müssen. Besonders häufig scheinen Besitzer interner Modems mit dem Rockwell-Chipsatz mit diesen Problemen zu kämpfen haben. Wenn beispielsweise setserial behauptet, sie hätten einen 16450-UART, obwohl der Baustein in Wirklichkeit zum NSC 16550 kompatibel ist, müssen Sie den Konfigurations-Befehl des betreffenden Ports so abändern:

/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig uart 16550

Ähnliche Optionen existieren, um die Auswahl eines bestimmten COM-Ports, der I/O-Adresse und des IRQ zu erzwingen. Bitte lesen Sie die Details in der Manpage setserial(8) nach.

Wenn Ihr Modem den Hardware-Handshake unterstützt, sollten Sie sicherstellen, daß dieser auch aktiviert ist. Überraschenderweise versuchen die wenigsten Kommunikations-Programme dies einzustellen, weshalb Sie es unter Umständen per Hand tun müssen. Das geschieht am besten auch im rc.serial-Script, indem Sie stty so aufrufen:

$ stty crtscts < /dev/cua1

Um zu überprüfen, ob der Hardware-Handshake eingeschaltet ist, geben Sie diesen Befehl ein:

$ stty -a < /dev/cua1

Dieser Befehl gibt den aktuellen Zustand aller Flags für dieses Gerät aus; wenn ein Flag mit einem vorangestellten Minus (wie in -crtscts) ausgegeben wird, besagt das, daß es ausgeschaltet ist.


Fußnoten

(1)
Greg kann unter der Adresse gregh@cc.gatech.edu erreicht werden.
(2)
Es gab auch einen NSC 16550, aber seine FIFO hat niemals richtig funktioniert.

Inhaltsverzeichnis Kapitel 3 Kapitel 5