Er zijn twee compleet verschillende device-drivers voor de parallelle
poort; welke je gebruikt is afhankelijk van je kernelversie (je kunt
achter je versie komen via het commando uname -a
). De driver
is in Linux 2.1.33 gewijzigd.
Een paar details zijn hetzelfde voor beide stijlen drivers. Hetgeen veel mensen hebben gemerkt, is dat Linux hun parallelle poort niet zal detecteren tenzij ze in hun PC BIOS "Plug en Play" de-activeren. (Dit is geen verrassing; de waarnemingsreputatie van PnP of niet-PCI devices onder Windows en elders is een ramp gebleken).
De Linux kernel (<=2.1.32), waarbij er van uit wordt gegaan dat je het
lp device in hebt gecompileerd of geladen
(in de uitvoer van cat /proc/devices
zou het device
lp voor moeten komen als het is geladen), voorziet in één of
meer /dev/lp0, /dev/lp1, en /dev/lp2. Deze
worden NIET dynamisch toegewezen, maar corresponderen ieder met een
specifiek hardware I/O adres. Dit betekent dat je eerste printer,
afhankelijk van je hardware, lp0 of lp1 kan zijn. Probeer
gewoon beiden.
Een paar gebruikers rapporteerden dat hun bi-directionele lp poorten niet werden gedetecteerd als zij een oudere uni-directionele printerkabel gebruikten. Controleer of je een behoorlijke kabel hebt.
Men kan de plip en lp drivers niet tegelijkertijd op een gegeven poort gebruiken (in ieder geval niet onder 2.0). Je kunt echter de ene of de andere driver op ieder moment zowel handmatig hebben geladen als door kerneld met versie 2.x (en latere 1.3.x) kernels. Door zorgvuldig de interrupts en dergelijke in te stellen, kun je naar men mag aannemen plip op de ene poort en lp op de andere poort gebruiken. Iemand deed dit door de drivers te wijzigen; Ik wacht met spanning op een succesvol rapport van iemand die dit slechts door middel van een slimme commando-regel doet.
Er is een kleine utility met de naam
tunelp
in omloop gebracht waar je het
Linux 2.0 interrupt-gebruik, de polling-snelheid, en andere opties van het
Linux 2.0 lp-device, als root, mee af kunt stellen.
Als de lp-driver in de kernel is ingebouwd, zal de kernel een
lp=
optie accepteren om de interrupts en io-adressen in te stellen:
Als de lp driver in de kernel is ingebouwd, zou je de LILO/LOADLIN
commando-regel kunnen gebruiken om de poortadressen en interrupts in te
stellen, waarvan de driver gebruik zal gaan maken.
Syntax: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Bijvoorbeeld: lp=0x378,0 of lp=0x278,5,0x378,7 **
Merk op dat als dit kenmerk wordt gebruikt, je *alle* poorten die
je zult gaan gebruiken, moet specificeren, er zijn geen standaards.
Je kunt een ingebouwde driver met lp=0 de-activeren.
Geladen als een module, is het mogelijk io-adressen en interrupts
op de insmod commando-regel (of in
/etc/conf.modules om kerneld te beïnvloeden) op te geven
door gebruik te maken van de gebruikelijke argumentensyntax van
een module. De parameters zijn io=port0,port1,port2
en irq=irq0,irq1,irq2
. Lees de manpage van
insmod voor meer informatie hierover.
**Voor degenen onder jullie die (me aardig vinden) nooit de standaard poortnummers kunnen vinden als je ze nodig hebt, ze zijn als in het tweede voorbeeld hierboven. De andere poort (lp0) bevindt zich op 0x3bc. Ik zou niet weten van welk interrupt het gewoonlijk gebruik maakt.
De source-code voor de Linux 2.0 parallelle poort-driver staat in /usr/src/linux/drivers/char/lp.c.
Beginnend met kernel 2.1.33 (en beschikbaar als een patch voor kernel 2.0.30), is het lp-device slechts een client van het nieuwe parport-device. De aanvulling van het parport device corrigeert een aantal problemen die bij het oude lp-device optraden - het kan de poort met andere drivers delen, het wijst dynamisch beschikbare parallelle poorten toe aan device-nummers in plaats van dat het een vaste communicatie-verbinding tussen I/O adressen en poortnummers, enz. forceert.
De komst van het parport-device heeft voor een hele schare nieuwe parallelle poortdrivers gezorgd, voor zaken als Zipdrives, Backpack CD-ROM's en disks, enzovoort. Een aantal hiervan zijn ook beschikbaar in versies voor 2.0 kernels; kijk hiervoor rond op het web.
Het belangrijkste verschil dat je op zal vallen, zover het printen betreft is, dat kernels die op de parport zijn gebaseerd, de lp-devices dynamisch aan parallelle poorten toewijzen. Dus wat lp1 onder Linux 2.0 was, kan onder Linux 2.2 heel goed lp0 zijn. Zorg ervoor dat je dit controleert, als je een upgrade van een lp-driver-kernel naar een parport-driver-kernel uitvoert.
Het meest voorkomende probleem dat zich met dit device schijnt voor te doen heeft te maken met een onjuiste configuratie:
Een aantal Linux-distributies worden met een onjuiste setup van /etc/modules.conf (of /etc/conf.modules) geleverd, waardoor de driver niet juist wordt geladen als je het nodig hebt. Met een recente modutils schijnen de juiste magische regels in modules.conf als volgt te moeten zijn:
alias /dev/printers lp alias /dev/lp* lp alias parport_lowlevel parport_pc
In de BIOS van veel PC's is de parallelle poort als een Plug & Play device ingesteld. Hiermee wordt het een perfect eenvoudig apparaat, dat bijna altijd aanwezig is, onnodig gecompliceerd gemaakt; schakel de PnP instelling voor je parallelle poort uit ("LPT1" in veel BIOS'sen) als je parallelle poort niet door de Linux-driver wordt herkend. De juiste instelling wordt vaak "legacy", "ISA" of "0x378" genoemd, maar waarschijnlijk niet "disabled".
Je kunt ook het bestand Documentation/parport.txt in je kernel sources lezen, of de parport website bekijken.
Seriële devices worden onder Linux iets dergelijks als /dev/ttyS1
genoemd. Het utility
stty
staat je toe om de instellingen voor een seriële
poort interactief te bekijken of in te stellen;
setserial
staat je toe een aantal uitgebreide kenmerken te beheren en IRQ's
en I/O adressen te configureren voor de niet-standaard poorten.
Een verdere bespreking van seriële poorten onder Linux kun je
vinden in de
Serial-HOWTO.
Als je gebruik maakt van een langzame seriële printer met flow control,
kan het zijn dat je bemerkt dat een aantal van je afdruktaken worden
afgebroken. Dit kan te wijten zijn aan de seriële poort, wiens
standaardgedrag is om alle niet verzonden tekens te wissen, die zich
na 30 seconden nadat het poortdevice is gesloten nog in de buffer
bevinden. De buffer kan 4096 tekens vasthouden. Als je printer
flow control gebruikt en het langzaam is, kan het alle data uit
de buffer niet binen 30 seconden
nadat de afdruksoftware de seriële poort heeft gesloten, verwerken.
Het laatste deel van de inhoud van de buffer zal hierdoor verloren gaan.
Als het commando cat file > /dev/ttyS2
voor korte bestanden
volledige afdrukken produceert, maar langere
bestanden afbreekt, kan het zijn dat hiervan sprake is.
De 30 seconden-interval kan via de commando-regeloptie "closing_wait" van setserial (versie 2.12 en later) worden aangepast. De seriële poorten van een computer worden gewoonlijk door een aanroep van setserial in het opstartbestand rc.serial geïnitialiseerd. De aanroep voor de seriële afdrukpoort kan worden gewijzigd door de closing_wait tegelijkertijd in te stellen met de andere parameters van de poort.