Inhalt

3. Kernel-Drucker-Devices

3.1 Das lp-Device

Das Linux-Kernel (<=2.1.32), falls das lp-Device eincompiliert 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, das 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 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 (http://www.picante.com/~gtaylor/pht/man/tunelp.8.html), mit dem man als root Interrupts, Geschwindigkeit und anderes am lp-Device einstellen kann.

Wenn die Option in Kernel 2.x oder einigen 1.3.x-Kernels compiliert wurde, kann eine lp= Option (über LILO/LOADLIN) gewählt werden, um die Portadressen und Interrupts einzustellen:

Syntax:      lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]

Beispiel:    lp=0x378,0   oder   lp=0x278,5,0x378,7 **

** Für alle diejenigen, die sich nie an die Standard-Porteinstellungen erinnern können, wenn sie sie brauchen (so wie ich): sie entsprechen dem zweiten Beispiel oben. Der andere Port (lp0) liegt bei 0x3bc; keine Ahnung, was für einen Interrupt er benutzt.

Hinweis: Wenn diese Funktion benutzt wird, müssen alle Ports angegeben werden, die berücksichtigt werden sollen, es gibt keine Voreinstellungen. Man kann einen eingebauten Treiber mit lp=0 deaktivieren.

Wenn das Device als Modul geladen wird (nur in 2.x und späten 1.3.x Kernels), können die Adressen und Interrupts in der üblichen Syntax im insmod-Kommando angegeben werden (oder in /etc/conf.modules für den kerneld). Die Parameter sind io=port0,port1,port2 und irq=irq0,irq1,irq2. Auf der Man-page zu insmod gibt es weitere Informationen.

Der Quelltext für den Linux Parallelporttreiber befindet sich in /usr/src/linux/drivers/char/lp.c.

3.2 Das parport-Device (Kernelversionen >= 2.1.33)

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-Device. Die Erweiterung um das parport-Device beseitigt einige der Probleme, die den alten lp Treiber quälen - es kann den Port mit anderen Treibern "teilen", es ordnet verfügbaren Parallelports dynamisch Device-Nummern zu, anstatt eine feste Zuordnung zu erzwingen, und einiges mehr.

Die Verfügbarkeit des parport-Device hat eine ganze Reihe neuer Treiber für den Parallelport ermöglicht, so z.B. für ZIP-Laufwerke, externe CD-ROMs und Festplatten usw. Einige davon sind auch für Kernel 2.0.x verfügbar; schauen Sie sich im Web um.

Ich werde den parport-Treiber vollständiger beschreiben, sobald ich ihn selbst benutze; in der Zwischenzeit können Sie das File Documentation/parport.txt in den Kernelquellen oder auf http://www.cyberelk.demon.co.uk/parport/parport.txt lesen, oder einen Blick auf die parport-Webseite (http://www.cyberelk.demon.co.uk/parport.html) werfen.

3.3 Serielle Devices

Serielle Devices heißen üblicherweise unter Linux /dev/ttyS1 oder ähnlich. Das Programm stty (http://www.picante.com/~gtaylor/pht/man/stty.1.html) erlaubt es, interaktiv die Einstellungen für die seriellen Schnittstellen anzusehen oder zu verändern; mit setserial (http://www.picante.com/~gtaylor/pht/man/setserial.8.html) 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 (http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html) nachgelesen werden.

Wenn man einen langsamen seriellen Drucker mit Flußkontrolle benutzt, kann es sein, daß einige Druckaufträge abgeschnitten werden. Das kann an den seriellen Schnittstellen liegen, die standardmäßig 30 Sekunden, nachdem das Schnittstellendevice geschlossen wurde, alle nicht gesendeten Zeichen löschen. Der Puffer hält bis zu 4096 Zeichen, wenn der Drucker Flußkontrolle verwendet und nicht schnell genug ist, um innerhalb von 30 Sekunden, nachdem die Software die Schnittstelle geschlossen hat, alle Daten aus dem Puffer zu empfangen, ist das Ende des Pufferinhalts verloren. Wenn der Befehl cat file > /dev/ttyS2 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 im rc.serial Bootfile 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.


Inhalt