Inhalt

3. Kernel-Drucker-Devices

3.1 lp-Device

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.

3.2 parport-Device

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

3.3 Serielle Devices

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.


Inhalt