![]() |
|
Linux - Wegweiser für NetzwerkerOnline-VersionCopyright © 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. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Nun befassen wir uns eine Weile mit den beiden nützlichsten Konfigurations-Hilfsmitteln für serielle Geräte: setserial und stty.
Der Kernel gibt sich alle Mühe, selbst herauszufinden, wie Ihre serielle Hardware für einen reibungslosen Betrieb konfiguriert werden muß. Das ist wegen der Vielzahl unterschiedlicher Konfigurationen serieller Geräte aber ein schwieriges Unterfangen. Wo die Probleme liegen, hatten wir bereits bei den internen Modems kurz besprochen. Sie verwenden zwar einen UART mit 16-Byte-Puffer, der Gerätetreiber im Kernel meint aber, er hätte es nur mit einem 16450 zu tun. Wenn er nicht ausdrücklich darüber informiert wird, daß es sich um einen 16550 handelt, wird der Kernel vom erweiterten Puffer keinen Gebrauch machen. Ein anderes Beispiel sind die einfachen 4-Port-Karten, die IRQ-Sharing unterstützen, d.h., alle seriellen Geräte können sich einen Interrupt teilen. In diesem Fall muß der Kernel ausdrücklich darüber informiert werden, welcher Interrupt genutzt werden soll und daß Interrupts mehrfach genutzt werden können.
Mit dem Befehl setserial können serielle Treiber zur Laufzeit des Systems konfiguriert werden. Normalerweise wird er während des Bootens von einem Skript aus gestartet. In einigen Distributionen hat das Skript den Namen 0setserial, in anderen rc.serial. Es ist verantwortlich dafür, den seriellen Gerätetreiber so zu initialisieren, daß er mit allen angeschlossenen seriellen Geräten zurechtkommt, die nicht dem üblichen Standard entsprechen.
Die allgemeine Syntax von setserial ist:
setserial
Dabei bezeichnet “device” ein serielles Gerät wie z.B. ttyS0.
device
[parameters
]
Der setserial-Befehl verfügt über eine große Anzahl von Parametern. Die gebräuchlichsten sind in Tabelle 4.1 beschrieben. Informationen zu den anderen Parametern finden Sie in der Manpage von setserial.
Tabelle 4.1: setserial-Kommandozeilenparameter
Parameter | Beschreibung |
---|---|
port port_number
|
Gibt die I/O-Portadresse des seriellen Geräts an. Portnummern sollten in hexadezimaler Notation angegeben werden, z.B. |
irq num
|
Gibt die Nummer des IRQs an, den das serielle Gerät verwendet. |
uart uart_type
|
Gibt den UART-Typ des seriellen Geräts an. Übliche Werte sind |
fourport
|
Die Angabe dieses Parameters teilt dem seriellen Kernel-Treiber mit, daß sich dieser Port an einer AST-Fourport-Karte befindet. |
spd_hi
|
Programmiert den UART auf eine Geschwindigkeit von 57,6 Kbps, wenn ein Prozeß 38,4 Kbps verlangt. |
spd_vhi
|
Programmiert den UART auf eine Geschwindigkeit von 115 Kbps, wenn ein Prozeß 38,4 Kbps verlangt. |
spd_normal
|
Programmiert den UART auf die Standardgeschwindigkeit von 38,4 Kbps, wenn eine Anfrage vorliegt. Dieser Parameter bewirkt die Umkehrung des Effekts eines |
auto_irq
|
Dieser Parameter veranlaßt den Kernel, den IRQ des angegebenen Geräts automatisch zu ermitteln. Dieser Versuch kann auch fehlschlagen, weshalb es sich bei der automatischen Ermittlung eher um ein Raten handelt. Ist Ihnen der IRQ des seriellen Geräts bekannt, sollten Sie besser den Befehl |
autoconfig
|
Dieser Parameter muß immer in Verbindung mit dem |
skip_test
|
Dieser Parameter veranlaßt den Kernel, auf den UART-Typ-Test während der automatischen Konfiguration zu verzichten. Das ist insbesondere dann notwendig, wenn der UART vom Kernel nicht korrekt erkannt wird. |
Tabelle 4.1 zeigt, wie ein typisches, einfaches Beispiel einer rc-Datei zur Konfiguration Ihrer seriellen Ports zur Boot-Zeit aussehen könnte. Bei den meisten Linux-Distributionen wird ein solches Beispiel noch etwas ausführlicher gestaltet sein.
Beispiel 4.1: rc.serial-Datei mit setserial-Anweisungen
# /etc/rc.serial - serial line configuration script. # # Configure serial devices /sbin/setserial /dev/ttyS0 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS1 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS2 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig # # Display serial device configuration /sbin/setserial -bg /dev/ttyS*
Das Argument -bg /dev/ttyS*
in der letzten Anweisung gibt eine hübsch formatierte Zusammenstellung der Hardwarekonfiguration aller aktiven seriellen Geräte aus. Die Ausgabe sieht etwa wie in Tabelle 4.2 aus.
Beispiel 4.2: Ausgabe des Befehls setserial -bg /dev/ttyS
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A
Der Name stty bedeutet wahrscheinlich “set tty” (“Setze tty”); dieser Befehl kann aber auch dazu benutzt werden, um eine Terminal-Konfiguration anzuzeigen. Verglichen mit setserial, bietet stty vielleicht eine noch verwirrendere Fülle an Konfigurationsmöglichkeiten. Die wichtigsten davon werden wir gleich behandeln, die anderen können Sie in der Manpage zu stty nachlesen.
Der stty-Befehl wird meistens dazu verwendet, um Terminal-Parameter zu konfigurieren, z.B. ob Zeichen zurückgesendet (echo) werden sollen oder welche Taste ein Abbruchsignal erzeugen soll. Wir hatten bereits früher erwähnt, daß serielle Geräte tty-Geräte sind und der stty-Befehl daher auch für sie geeignet ist.
Eine der wichtigeren Anwendungen von stty ist die Aktivierung des Hardware-Handshakes serieller Geräte. Über Hardware-Handshakes hatten wir schon vorher kurz gesprochen. Standardmäßig ist der Hardware-Handshake serieller Geräte nichtaktiviert, so daß man mit dieser Voreinstellung mit dreiadrigen seriellen Kabeln arbeiten kann. Mit solche Kabeln läßt sich kein Hardware-Handshake realisieren; wäre er standardmäßig aktiviert, könnte auf dem Kabel nicht ein einziges Zeichen übertragen werden.
Wenn Ihr Modem den Hardware-Handshake unterstützt, sollten Sie sicherstellen, daß dieser auch aktiviert ist (sehen Sie in Ihrem Modem-Handbuch nach, welche Kommandos Sie dafür brauchen). Überraschenderweise versuchen die wenigsten Kommunikationsprogramme dies einzustellen, weshalb Sie es unter Umständen per Hand tun müssen. Auch Ihren seriellen Port müssen Sie auf Hardware-Handshake umstellen. Im stty-Befehl verwenden Sie dafür das crtscts
-Flag. Diesen Befehl führen Sie am besten während des Bootens in der Datei rc.serial (oder einer vergleichbaren) aus, indem Sie Befehle, wie die in Tabelle 4.3 gezeigten, verwenden.
Beispiel 4.3: stty-Befehle in der Datei rc.serial
# stty crtscts < /dev/ttyS0 stty crtscts < /dev/ttyS1 stty crtscts < /dev/ttyS2 stty crtscts < /dev/ttyS3 #
Das stty-Kommando arbeitet standardmäßig immer mit dem aktuellen Terminal. Durch Eingabeumleitung (“<”) kann man aber jedes tty-Gerät mit dem stty-Befehl manipulieren. Es kommt häufig vor, daß man vergißt, wann man “<” oder “>” anzuwenden hat. Modernere Varianten des stty-Befehls haben in dieser Hinsicht eine viel übersichtlichere Syntax. Um das zu zeigen, formulieren wir unser Konfigurationsbeispiel etwas um. Das Ergebnis zeigt Tabelle 4.4.
Beispiel 4.4: stty-Befehle mit moderner Syntax in der Datei rc.serial
# stty crtscts -F /dev/ttyS0 stty crtscts -F /dev/ttyS1 stty crtscts -F /dev/ttyS2 stty crtscts -F /dev/ttyS3 #
Wir erwähnten bereits, daß stty auch dazu verwendet werden kann, die aktuelle Terminal-Konfiguration eines tty-Geräts anzuzeigen. Um sich alle aktiven Einstellungen eines tty-Geräts anzusehen, gehen Sie wie folgt vor:
$
stty -a -F /dev/ttyS1
Die Ausgabe des Befehls (siehe Tabelle 4.5) zeigt den Status aller Flags für das angegebene Gerät an. Ein Flag mit einem Minuszeichen (wie in –crtscts) bedeutet, daß dieses Flag abgeschaltet ist.
Beispiel 4.5: Ausgabe von stty -a
speed 19200 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Eine Beschreibung der wichtigsten Flags ist in Tabelle 4.2 enthalten. Ohne Minuszeichen wird ein Flag in einer stty-Anweisung immer aktiviert, mit Minuszeichen deaktiviert. Um z.B. den Hardware-Handshake am ttyS0
-Gerät abzuschalten, geben Sie folgendes ein:
$
stty -crtscts -F /dev/ttyS0
Tabelle 4.2: Die wichtigsten stty-Flags zur Konfiguration serieller Geräte
Flags | Beschreibung |
---|---|
N
|
Setzt die Übertragungsgeschwindigkeit auf |
crtsdts
|
Aktiviert bzw. deaktiviert das Hardware-Handshaking. |
ixon
|
Aktiviert bzw. deaktiviert XON/XOFF. |
clocal
|
Aktiviert bzw. deaktiviert Modem-Kontrollsignale wie DTR/DTS und DCD. Wichtig für dreiadrige serielle Kabel, da sie diese Signale nicht bereitstellen. |
cs5 cs6 cs7 cs8
|
Setzt die Anzahl der Datenbits auf 5, 6, 7 bzw. 8. |
parodd
|
Aktiviert ungerade Parität. Ein negiertes Flag bedeutet gerade Parität. |
parenb
|
Aktiviert Paritätstest. Ist dieses Flag negiert, wird keine Parität verwendet. |
cstopb
|
Aktiviert die Verwendung von zwei Stopbits pro Zeichen. Bei negiertem Flag wird ein Stopbit pro Zeichen verwendet. |
echo
|
Aktiviert bzw. deaktiviert die Rücksendung (Echo) des empfangenen Zeichens zum Sender. |
Im folgenden Beispiel werden einige dieser Flags kombiniert, um das serielle Gerät ttyS0 auf 19.200 bps, 8 Datenbits, keine Parität, Hardware-Handshaking und deaktiviertes Echo einzustellen:
$
stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Weitere Informationen zum Linux - Wegweiser für Netzwerker
Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center
© 2001, O'Reilly Verlag