Nästa Föregående Innehållsförteckning

3. Skrivarrutiner i kärnan

3.1 lp enheten

Linux kärnan (<=2.1.32), förutsatt att du kar kompilerat in eller laddat lp enheten (output av cat /proc/devices skall innehålla enheten lp), tillhandahåller en eller flera av /dev/lp0, /dev/lp1, och /dev/lp2. Dessa tilldelas INTE dynamisk utan var och en av dem svarar mot en specifik I/O adress. Detta betyder att din första skrivare kan vara lp0 eller lp1 beroende på din hårdvara. Prova båda.

Några få användare har rapporterat att deras dubbelriktade lp portar inte upptäcks om de använder en äldre universalriktad skrivarkabel. Se till att du har en passande kabel.

Man kan inte köra plip och lp drivrutinerna på samma gång på en port. Du kan dock ladda den ena eller den andra när som helst antingen manuellt, eller med kerneld om du har version 2.x (eller senare versioner av 1.3.x) av kärnan. Genom att noggrant ställa in irq och dylikt, kan du antagligen köra plip på ena porten och lp på den andra. Någon gjorde så genom att editera drivrutinen. Jag väntar otåligt på en positiv rapport om någon som lyckats göra detta med bara en smart kommandorad.

Det finns ett litet verktyg som heter tunelp med vilket du, som root, kan finjustera Linux lp enheters irq, "polling rate" och andra alternativ.

Om den är inbyggd, i en del 1.3.x och senare kärnor, kan kärnan ta emot lp= argumentet för att sätta irq och io adresser:

När lp drivrutinen är inbyggd i kärnan kan du använda kommandoraden
till LILO/LOADLIN för att sätta portadresser och irq's som
den drivrutinen skall använda.

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

exempel:   lp=0x378,0   eller   lp=0x278,5,0x378,7 **

Observera att om du använder denna finess måste specificera *alla*
portar som du vill använda, det finns inga "defaults". Du kan stänga av
en inbyggd drivrutin med lp=0.

Om den laddas som en modul i version 2 och sena 1.3.x kärnor är det möjligt att specificera io adresser och irq's på insmod kommandoraden (eller i /etc/conf.modules för att ha effekt på kerneld) genom att använda den vanliga syntaxen. Parametrarna är io=port0,port1,port2 och irq=irq0,irq1,irq2. Läs manualsidan för insmod för ytterligare information om detta.

**För dem av er (som jag själv) som aldrig kan hitta standardportnumren när ni behöver dem, de är som i det andra exemplet ovan. Den andra porten (lp0) är på 0x3bc. Jag har ingen aning om vilken irq den brukar använda.

Källkoden för Linux parallellportsdrivrutin finns i /usr/src/linux/drivers/char/lp.c.

3.2 Parport enheten `parport device' (kärnor >= 2.1.33)

Med början i kärna 2.1.33 (och tillgänglig som patch för kärna 2.0.30), är lp enheten bara en klient till den nya parport enheten. Fördelen med parportenheten är att den rättar till ett antal problem som den gamla lp enheten led av - den kan dela port med andra drivrutiner, den tilldelar tillgängliga parallellportar dynamiskt till enhetsnummer istället för att kräva en fast kommunikation mellan I/O adresser och portnummer, och så vidare.

Tillkomsten av parport enheten har möjliggjort en hel flock av nya parallell-ports drivrutiner för saker som, Zip drives, Backpack CD-ROMs och diskar, etc. En del av dessa finns också tillgängliga för 2.0.x kärnor; leta runt på nätet.

Jag kommer att täcka parport drivaren mer komplett då jag själv använder en, men tills vidare kan du läsa filen Documentation/parport.txt i din källkod till kärnan eller titta på parport web site.

3.3 Seriella enheter

Seriella enheter heter vanligtvis något som /dev/ttyS1 under Linux. Verktyget stty låter dig interaktivt studera eller sätta inställningarna för en serieport; setserial låter dig kontrollera ytterligare några attribut och konfigurera IRQs och I/O adresser för icke standard portar. Ytterligare behandling av serieportar under Linux hittas i Serial-HOWTO.

Om du använder en långsam seriell skrivare med flödeskontroll kan du komma att upptäcka att dina utskrifter trunkeras. Detta kan komma av att serieportens normala beteende är att slänga alla oöversända tecken från sin buffer 30 sekunder efter det att portenheten stängts. Bufferten kan hålla upp till 4096 tecken, och om din skrivare använder flödeskontroll och är så långsam att den inte kan ta emot all data ur bufferten inom 30 sekunder efter det att utskriftsmjukvaran stängt porten kommer det sista av din utskrift att gå förlorad. Om kommandot cat file > /dev/ttyS2 producerar kompletta utskrifter för korta filer och trunkerade för längre kan du ha detta problem.

30 sekundersintervallet kan justeras genom "closing_wait" kommandorads argumentet till setserial (version 2.12 and later). En maskins serieportar initieras vanligtvis genom ett anrop till setserial i startfilen rc.serial. Anropet till skrivarserieporten kan modifieras så att det sätter closing_wait på samma gång som det sätter den portens andra parametrar.


Nästa Föregående Innehållsförteckning