Der Linux-Kernel (<=2.1.32), falls das lp-Device einkompiliert
oder geladen wurde (die Ausgabe von cat /proc/devices
sollte das Device lp einschließen), stellt ein oder mehr Devices
/dev/lp0
, /dev/lp1
und /dev/lp2
zur
Verfügung. Diese werden nicht dynamisch zugeordnet, sondern
korrespondieren vielmehr mit einer bestimmten I/O-Adresse der
Hardware. Das heißt, daß der erste Drucker entweder lp0
oder
lp1
sein kann, abhängig von der verwendeten Hardware. Testen
Sie einfach beides ;-).
Einige Leute haben berichtet, daß ihre bidirektionalen lp-Ports nicht erkannt wurden, wenn sie ein altes, unidirektionales Kabel verwendeten. Überprüfen Sie also, ob Sie über ein vernünftiges Kabel verfügen.
Man kann nicht die plip- und lp-Treiber gleichzeitig auf einem Port laufen lassen. Man kann aber einen der beiden Treiber entweder manuell oder mit dem kerneld (mit Kernelversion 2.x oder späten 1.3.x) laden. Wenn man die Interrupts u.ä. sinnvoll setzt, kann man lp auf dem einen und plip auf dem anderen Port laufen lassen. Jemand hat das gemacht, indem er die Treiber geändert hat; es bleibt abzuwarten, ob es auch eine einfache Kommandozeilen-Methode gibt.
Es gibt ein kleines Utility namens tunelp, mit dem man als root den verwendeten Interrupt, die Übertragungsgeschwindigkeit und anderes eines lp-Device einstellen kann.
Wenn der Treiber in den Kernel eingebunden wurde, können mit der
lp=
-Option während des Bootvorganges die Portadressen und
Interrupts eingestellt werden. Die Option hat folgenden Syntax:
lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Um die Portadresse 0x378 und keinen Interrupt (Polling) zu verwenden, würde dann folgendes benutzt werden:
lp=0x378,0
Mit nachfolgender Option würde die Adresse 0x278 mit dem Interrupt 5 und die Adresse 0x387 mit dem Interrupt 7 verwendet werden:
lp=0x278,5,0x378,7
Die Einstellungen des letzten Beispieles spiegeln die Standardwerte für die beiden parallelen Schnittstellen wieder.
Wenn diese Funktion benutzt wird, müssen alle Ports
angegeben werden, die berücksichtigt werden sollen, es gibt keine
Voreinstellungen. Der eingebaute Treiber kann mit lp=0
deaktiviert werden.
Wenn der Treiber als Modul geladen wird, können die Adressen und
Interrupts in der üblichen Syntax dem insmod-Kommando übergeben
werden. Falls der kerneld Verwendung findet, können die Einstellungen
in der Datei /etc/conf.modules
vorgenommen werden.
Die Parameter sind
io=port0,port1,port2
und irq=irq0,irq1,irq2
. Weitere
Informationen liefert die Manual Page zu insmod
.
Der Quelltext für den Linux Parallelporttreiber befindet sich in
der Datei
/usr/src/linux/drivers/char/lp.c
.
Beginnend mit Kernel 2.1.33 (und verfügbar als Patch für Kernel 2.0.30) ist das lp-Device eigentlich nur noch ein Client des neuen parport-Devices. Die Erweiterung um das parport-Device beseitigt einige der Probleme, die den alten lp-Treiber quälten: ein Port kann mit anderen Treibern »geteilt« werden, den verfügbaren Parallelports werden dynamisch Device-Nummern zugeordnet, anstatt eine feste Zuordnung zu erzwingen, und einiges mehr.
Die Verfügbarkeit des parport-Devices hat eine ganze Reihe neuer Treiber für den Parallelport ermöglicht, so z.B. für parallele ZIP-Laufwerke, externe CD-ROMs und Festplatten. Einige davon sind auch für Kernel 2.0.x verfügbar; weitere Informationen hierzu finden sich im WWW.
Eine Dokumentation zum parport-Treiber ist in den Kernelquellen
in der Datei Documentation/parport.txt
zu finden. Auch
ein Blick auf die parport-Webseite unter folgender Adresse
könnte sinnvoll sein:
http://www.cyberelk.demon.co.uk/parport.html
Die Devices serieller Schnittstellen heißen unter Linux
/dev/ttySx
, wobei x
die spezielle Schnittstelle
bezeichnet. Die erste serielle Schnittstelle wäre also
/dev/ttyS0
.
Das Programm stty
erlaubt es, interaktiv die Einstellungen für
die seriellen Schnittstellen anzusehen oder zu verändern; mit
setserial
können einige erweiterte Attribute eingestellt
werden und IRQs bzw.
I/O-Adressen für nicht-standardmäßige Schnittstellen konfiguriert
werden. Weitere Informationen über serielle Schnittstellen können
in der
Serial HOWTO nachgelesen werden.
Wenn man einen langsamen seriellen Drucker mit serieller Flußkontrolle benutzt, kann es sein, daß einige Druckaufträge nicht vollständig ausgedruckt werden. Das kann mit der seriellen Schnittstelle zusammenhängen. Damit die von einem Programm gelieferten Daten nicht verloren gehen, wenn der Drucker per Flußkontroller dem Computer mitteilt, daß er zur Zeit keine weiteren Daten empfangen kann, weil sein Speicher voll ist, speichert der Treiber der seriellen Schnittstelle die Daten in einen Puffer.
Diese Puffer kann 4096 Zeichen aufnehmen. 30 Sekunden nachdem das Programm das Schnittstellendevice geschlossen hat, löscht der Treiber den Puffer. Falls der Drucker also nicht schnell genug ist, in den 30 Sekunden die im Puffer stehenden Daten zu empfangen, gehen diese verloren.
Wenn der Befehl
cat file > /dev/ttySx
kurze Dateien komplett ausdruckt, bei längeren aber das Ende abschneidet,
könnte genau dieser Fall vorliegen.
Die 30-Sekunden-Wartezeit kann durch die
closing_wait
-Kommandozeilenoption von setserial
(Version 2.12 oder später) eingestellt werden. Die seriellen
Schnittstellen eines Rechners werden üblicherweise durch einen
Aufruf von setserial
in einer der Bootdateien initialisiert.
Der Aufruf für den Port, an dem der Drucker hängt,
kann so modifiziert werden, daß zusammen mit den anderen
Parametern die closing_wait
-Option eingestellt wird.