Zurück Weiter Inhalt

3. Kernel-Drucker-Devices

3.1 Das lp-Device

Das Linux-Kernel, 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 beides ;)

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 Version 2 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 eine kleine Utility namens tunelp (http://www.picante.com/~gtaylor/pht/man/tunelp.html), mit dem man als root Interrupts, Geschwindigkeit und anderes am lp-Device einstellen kann.

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

Wenn der lp-Treiber in der Kernel eingebaut wurde, kann ein LILO/LOADLIN-Kommando benutzt werden, um die Portadresse und Interrupts einzustellen.

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

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

** Standard Port-Einstellungen, der andere Port (<tt/lp0/) liegt bei 0x3bc.

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.0 und späten 1.3.x Kernels), können die Adressen und Interrupts in der üblichen Syntax im insmod-Kommando angegeben werden. Die Parameter sind io=x,y,z und irq=x,y,z, wobei x, y und z genau das sind, was man annimmt. Auf der Man-page zu insmod gibt es weitere Informationen.

3.2 Serielle Devices

Serielle Devices werden üblicherweise unter Linux als etwas wie /dev/ttyS1 bezeichnet. Das Programm stty (http://www.picante.com/~gtaylor/pht/man/stty.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.html) können einige erweiterte Attribute eingestellt werden und IRQs und I/O-Adressen für nicht-standardmäßige Schnittstellen eingestellt werden. Weitere Informationen über serielle Schnittstellen können in der Serial-HOWTO (http://sunsite.unc.edu/mdw/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öscht. 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 das "closing_wait"-Element der Datenstruktur der seriellen Schnittstelle mit Hilfe eines ioctl()- Aufrufs eingestellt werden. Setserial kann dieses Element nicht einstellen, aber andere in der selben Datenstruktur, so daß es einfach ist, setserial entsprechend anzupassen. Dann kann in rc.serial der setserial-Befehl so geändert werden, daß closing_wait verlängert wird.


Zurück Weiter Inhalt