5. Serielle Konsole
Im «Nomalfall» gibt es keinen Grund, einen Rechner via serielle
Konsole zu betreiben. Serielle Konsolen sind langsame, textbasierte Terminals
der alten Schule − die allerdings in den folgenden Fällen
unverzichtbar sind:
-
Der Computer weist keine Monitor- und Tastaturanschlüsse auf.
Embedded Plattformen, die für Router besonders gut geeignet sind,
fallen typischerweise in diese Kategorie.
-
Im Normalbetrieb wird der Rechner via SSH gewartet
und konfiguriert. Für Diagnosezwecke und bei grösseren Updates
ist der Zugang zu einer Konsole jedoch zwingend. In diesen Fällen ist
es einfacher, mit einer seriellen Konsole zu arbeiten, als Tastatur
und Monitor zum Router zu transportieren (oder umgekehrt).
Konventionelle serielle Schnittstellen sind weit verbreitete i/O-Ports, die
im RS-232 Standard spezifiziert sind. Als Anschlüsse dienen meist 9-Pin
Stecker, als Transmitter auf dem Board dient ein UART-Chip (Universal
Asynchronous Receiver-Transmitter). Der serielle Port wurde
ursprünglich entwickelt, um Modems anzuschliessen, aber er kann auch
verwendet werden um Mäuse, Printer und Terminals mit einem Computer
zu verbinden.
Der Kernel des Routers muss derart konfiguriert werden, dass System-Meldungen
an den seriellen Port ausgegeben werden. (In der Beispielkonfiguration wurde
der Support für den seriellen Port bereits aktiviert.)
Character devices --->
[*] Support for console on serial port
|
|
Um den Router mit seinem Terminal zu verbinden wird ein Nullmodem-Kabel
benötigt. Router und Terminal müssen mit RS-232 Anschlüssen
ausgerüstet sein.
Dem seriellen Port des Routers wird eine I/O-Adresse, ein IRQ und
ein Name (z.B. ttyS0) zugewiesen. Diese Werte werden normalerweise
vom BIOS gesetzt. Einstellungen mit setserial
überprüfen:
# setserial -bg /dev/ttyS*
|
|
Das obige Kommando gibt die I/O-Port-Adressen der seriellen Ports aus, die
zugehörigen IRQs und den Typ des verwendeten UART.
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A
|
|
Hinweis: Wenn der serielle Port als Konsole für das System benützt wird,
dann kann der Interrupt nicht mit einem anderen Gerät geteilt werden. Falls
die Konsole auf Port /dev/ttyS0 arbeitet, muss der
Port /dev/ttyS2 mit Hilfe von setserial deaktiviert
werden, damit Interrupt 4 nicht mehrfach belegt wird.
# setserial /dev/ttyS2 uart none port 0x0 irq 0
|
|
Die Datenrate (speed), sowie die Methode zur Kontrolle des Datenflusses
müssen definiert und LILO oder GRUB müssen angepasst werden.
Die Konfigurationsdatei /etc/lilo.conf des Routers so
editieren, dass LILO einen seriellen Port als Ein- Ausgabegerät
benützt. Dazu ist in der «Global Section» der Datei ein
Eintrag von der Form serial = <PORT>,<Geschwindigkeit>
<Parität><Datenbits> nötig.
## LILO global section
## Send LILO I/O to /dev/ttyS0
## Values: port 0, 9600 Baud, no parity, 8 bits
serial = 0,9600n8
|
|
Ausserdem muss dem Kernel des Routers mitgeteilt werden, dass er eine
serielle Schnittstelle als Konsole benützen soll. Der Bootparameter
dafür lautet console= <device> . Beim
image , das gebootet werden soll, den entsprechenden Eintrag
vornehmen:
## For plattforms without video card use
## append = "console=ttyS0,9600n8r"
## To enable virtual terminal and serial port use
append="console=tty0 console=ttyS0,9600n8r"
|
|
Hinweis: Mit der Konfiguration append="console=tty0 console=ttyS0,9600n8r"
werden die Kernel-Messages auf der virtuellen Konsole /dev/tty0 und
auf der seriellen Konsole /dev/ttyS0 ausgegeben. Die Meldungen,
die init beim Booten ausgibt, erscheinen aber nur auf /dev/ttyS0 .
LILO updaten
Damit das Login auf dem Router auch via serielle Schnittstelle erfolgen
kann, muss ein getty gestartet werden das auf /dev/ttyS0
hört und einen Bootprompt zur Verfügung stellt. Für Rechner, die via
Nullmodem-Kabel miteinander verbunden werden, muss /etc/inittab
wie folgt editiert werden. (Ein entsprechender Eintrag ist vorhanden, er muss
lediglich aktiviert und angepasst werden.)
s1 = ID
123 = Terminal wird im Runlevel 1, 2, 3 betrieben
respawn = getty nach dem Logout neu starten
/sbin/agetty = agetty starten
-L = Carrier Detect Leitung ignorieren
ttyS0 = Bezeichnung des seriellen Ports
9600 = Baudrate
vt100 = Terminal Emulation
s1:123:respawn:/sbin/agetty -L ttyS0 9600 vt100
|
|
/sbin/getty wird mit dem folgenden Kommando gestartet:
s1:123:respawn:/sbin/getty ttyS0 9600 vt100
|
|
Die Grussbotschaft von /sbin/getty «Welcome to Linux 2.6.x (ttyS0)»
wird durch den folgenden Eintrag in /etc/issue erzeugt:
Nach der Änderungen /etc/inittab neu einlesen.
Überprüfen, ob /dev/modem nicht auf den seriellen Port
zeigt, den die Konsole verwendet. Den Link gegebenenfalls löschen.
# ls -l /dev | grep modem
|
|
Standardmässig sollte ein remote-Zugriff von root nicht
zugelassen werden. Die entsprechenden Einträge in
/etc/securetty überprüfen.
(Selbstverständlich muss der root-Zugriff via ttyS0
zugelassen werden. Es wird vorausgesetzt, dass Personen, die in
der Lage sind, ein Nullmodem-Kabel an den Router anzuschliessen,
dazu auch berechtigt sind.)
Mit setserial die Hardware-Konfiguration des Terminal-Rechners
überprüfen. (Vergl. «Low Level Konfiguration des Routers».)
Auf dem PC, der als Terminal dient, muss ein Terminalprogramm
wie Minicom (Linux) oder Hyperterminal
(hypertrm Windows) zur Verfügung stehen. Im Folgenden wird
die Konfiguration von Minicom beschrieben. Minicom im
Konfigurarionsmodus starten:
Serial port setup auswählen und die folgenden Werte eintragen:
A - Serial Device : /dev/ttyS0
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 9600 8N1
F - Hardware Flow Control : Yes
G - Software Flow Control : No
|
|
ENTER drücken. Save setup as serial0 erzeugt das
Konfigurationsfile /etc/minirc.serial0 .
minicom starten.
Falls der Router und der Terminal-Rechner mit einem Nullmodemkabel verbunden
sind, erscheint im Terminalfenster des remote-Rechners der Bootprompt des
Routers.
|