Avanti Indietro Indice

6. Configurare la porta seriale

6.1 Supporto per il bus PCI in fase di completamento

Il driver seriale del kernel 2.2 non contiene un supporto per il bus PCI. Ma i kernel 2.3 e 2.4 finalmente supporteranno alcune schede seriali PCI (e schede modem). La maggior parte delle schede PCI necessitano di uno speciale supporto nel driver. Il driver legge il numero identificativo memorizzato nella scheda per determinare come (o se) supportare la scheda. Se avete una scheda PCI che siete convinti non sia un winmodem ma non funziona comunque, allora potreste essere d'aiuto per tentare di creare un driver per essa. Per fare questo dovrete contattare il curatore del serial driver, Theodeore (Ted) Y. Ts'o. Ma per prima cosa controllate l'elenco dei modem al sito http://www.o2.net/~gromitkc/winmodem.html per le ultime informazioni sui modem PCI e relativi argomenti.

Inviategli tramite posta elettronica una copia dell'output di "lspci -vv" con complete informazioni circa il modello ed il costruttore del modem PCI (o della porta seriale). Egli cercherà di approntarvi un driver di prova che potrebbe fare al caso vostro. Dovrete recuperarlo, compilarlo e possibilmente ricompilare il vostro kernel. Poi dovrete testare il driver per vedere se funziona bene e fare una relazione dei risultati a Ted Ts'o. Se siete disposti a fare tutto quanto sopradescritto (e questa è l'ultima versione di questo HOW-TO) allora inviategli quanto richiesto a: mailto:tytso@mit.edu.

I modem PCI sono ben standardizzati. Alcuni usano la memoria principale per comunicare con il PC. Se vedete indirizzi esadecimali a 8 cifre probabilmente non funzioneranno sotto Linux. Alcuni richiedono particolari abilitazioni dell'IRQ. L'output di "lspci" può aiutare a determinare se può essere supportato. Se vedete una porta IO a 4 cifre e nessun indirizzo di memoria lungo, il modem potrebbe funzionare semplicemente dicendo a "setserial" l'IO della porta e l'IRQ. Alcune persono hanno fatto funzionare un modem PCI 3COM 3CP5610 in questo modo

6.2 Introduzione alla configurazione

Nella maggior parte dei casi, la configurazione viene eseguita automaticamente e voi non dovete fare nulla. Ma talvolta dovete configurare (o semplicemente volete controllare la configurazione). Se è questo il caso, dovete per prima cosa sapere qualcosa circa le due parti necessarie per configurare la porta seriale sotto Linux.

La prima parte (configurazione a basso livello) è assegnare un indirizzo IO, un IRQ ed un nome (tipo ttyS2). Questa coppia IO-IRQ deve essere impostata nell'hardware e deve anche essere passata al driver seriale. Potremo chiamare questa parte in breve come configurazione di "io-irq". setserial viene usato per informare il driver. I metodi PnP, i jumper, ecc, sono usati per impostare l'hardware. Dettagli saranno forniti successivamente. Se dovete configurare ma non comprendete alcuni dettagli è poi facile avere dei guai.

La seconda parte (configurazione ad alto livello) consiste nell'assegnare una velocità (tipo 38.4K bit/secondo), selezionare il controllo di flusso, ecc. Questo viene spesso fatto dai programmi di comunicazione come PPP, minicom, o da getty (che potreste lanciare sulla porta così che altri possano collegarsi attraverso di essa). In ogni caso dovrete dire a questi programmi quale velocità volete, ecc., usando un menu od un file di configurazione. Questa configurazione di alto livello può essere fatta anche con il programma stty. stty è anche utile per vedere lo stato corrente se avete dei problemi. Vedere anche la sezione "Stty" del Serial-HOWTO.

Quando Linux parte, viene compiuto un tentativo per rilevare e configurare (a basso livello) alcune porte seriali. Quello che accade esattamente dipende dal vostro BIOS, hardware, distribuzione di Linux, ecc. Se le porte seriali funzionano bene, potrebbe non esserci bisogno di effettuare ulteriori configurazioni. I programmi applicativi tendono spesso ad eseguire una configurazione di alto livello, ma potrebbere richiedere informazioni che voi gli dovreste fornire. Con le porte seriali Plug-and-Play (spesso inserite in un modem interno), la situazione è diventata più complessa. Ecco i casi in cui occorre eseguire una configurazione a basso livello (impostare gli indirizzi IRQ e IO):

Per i kernel 2.2+ dovreste essere capaci di usare più di due porte seriali senza configurare a basso livello, condividendo gi interrupt. La cosa funziona solo se l'hardware seriale lo supporta e potrebbe essere altrettanto difficile che configurare a basso livello. Vedere Condivisione di interrupt e i Kernel 2.2+

La configurazione a basso livello (impostare gli indirizzi IRQ e IO) sembra causare più problemi (rispetto a quella ad alto livello), sebbene per la maggioranza sia completamente automatica e nessuna configurazione si debba effettuare. Quindi la quasi totalità di questa sezione verte su questo argomento. A meno che il driver seriale sappia il corretto indirizzo IRQ e IO la porta non funzionerà per niente. Probabilmente non sarà neanche individuata da Linux. Anche se essa fosse trovata, potrebbe lavorare in modo estremamente lento se l'IRQ è sbagliato. Vedere Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi.

Nel mondo Wintel, l'indirizzo IO ed IRQ sono chiamati "risorse" e quindi siamo configurando certe risorse. Ma ci sono molti altri tipi di "risorse" così che il termine potrebbe avere molti altri significati. Ricapitolando, la configurazione a basso livello consiste nell'impostare due valori (un numero di IRQ e un indirizzo IO) in due posti:

  1. nei registri di memoria dell'hardware della porta seriale stessa
  2. nel device driver (spesso lanciando "setserial" in fase di boot)

Potreste dare un occhiata ai messaggi di avvio (fase di boot). Essi sono in genere corretti. Ma se state avendo problemi, c'è una buona probabilità che alcuni di questi messaggi non mostrino la corretta configurazione dell'hardware (e d'altronde non sono deputati a farlo). Vedere Indirizzi I/O e IRQ: Messaggi in fase di boot.

6.3 Errori comuni commessi nel riconfigurare a basso livello

Ecco alcuni degli errori più comuni che possono compiere:

6.4 Indirizzi I/O e IRQ: messaggi in fase di boot

In molti casi le vostre porte verranno automaticamente configurate a basso livello in fase di boot (ma non sempre correttamente). Per vedere cosa sta succedendo, guardate i messaggi di avvio sullo schermo. Non trascurate di controllare i messaggi del BIOS prima che Linux venga caricato (nessun esempio mostrato qui). Questi messaggi BIOS possono essere arrestati premendo il tasto Pause. Usate Shift-PagSu per scorrere i messaggi dopo che sono passati sullo schermo. Shift-PagGiù li scorrerà nel senso opposto. Il comando dmesg potrebbe esser usato ogniqualvolta si voglia vedere alcuni messaggi ma spesso ne mancano di importanti. Ecco un esempio di messaggi in fase di boot (così come nel tardo 1999). Notate che ttyS00 è lo stesso di /dev/ttyS0.

Per prima cosa vedete quello che è stato rilevato (ma l'irq è solo un
ipotesi):

Serial driver version 4.27 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
ttyS02 at 0x03e8 (irq = 4) is a 16550A
 
Più tardi potete vedere quello che era stato salvato, ma anche questo
non è necessariamente corretto:

Loading the saved-state of the serial devices...
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A
/dev/ttyS2 at 0x03e8 (irq = 5) is a 16550A

Notate che qui vi è un leggero disallineamento: il primo messaggio mostra ttyS2 a irq=4 mentre il secondo lo mostra a irq=5. Potreste anche avere solo il primo messaggio. In molti casi l'ultimo messaggio è quello corretto. Ma se state avendo problemi il messaggio potrebbe fuorviarvi. Prima di leggere la spiegazione di tutta questa complessità nel resto di questa sezione, potreste semplicemente provare ad usare la vostra porta seriale e vedere se tutto va bene. Se è il caso, potrebbe non essere essenziale leggere oltre.

Il secondo messaggio deriva dal programma setserial che viene lanciato in fase di boot. Mostra quella che il device driver pensa sia la corretta configurazione. Ma questo potrebbe essere sbagliato. Ad esempio l'irq potrabbe essere in realtà impostato a irq=8 nell'hardware (entrambi i messaggi sono sbagliati). irq=5 potrebbere esistere perché qualcuno ha incorrettamente impostato questo valore nel file di configurazione (o simile). Il fatto che Linux talvolta prenda degli IRQ sbagliati dipende dal fatto che non verifica gli IRQ. Semplicemente assume quelli "standard" (primo messaggio) o accetta quello che gli si dice quando viene configurato (secondo messaggio). Nessuno di questi è necessariamente corretto. Se il driver seriale ha l'IRQ sbagliato, la porta seriale è molto lenta o non funziona per niente.

Il primo messaggio è il risultato di Linux che verifica le porte seriali ma non verifica gli IRQ. Se una porta viene mostrata in questa fase essa esiste ma il suo irq potrebbe essere sbagliato. Linux non controlla gli IRQ perché il farlo non è a prova di errore. Esso assume che gli IRQ sono come mostrato perché questi sono i valori "standard". Potreste controllare manualmente con setserial usando le opzioni autoconfig e auto_irq ma non si garantisce che sia esatto.

I dati mostrati nei messaggi del BIOS (che vedete per primi) è quello che è impostato nell'hardware. Se la porta seriale è Plug-and-Play PnP allora è possibile che isapnp venga lanciato e modifichi queste impostazioni. Cercate dei messaggi in questo senso dopo che Linux è partito. L'ultimo messaggio relativo alla porta seriale mostrato nell'esempio di cui sopra dovrebbe coincidere con i messaggi del BIOS (che è possibile siano stati modificati da isapnp). Se sono diversi allora dovreste aver bisogno di cambiare le impostazioni nell'hardware della porta od usare setserial per dire al driver quello che è attualmente impostato nell'hardware.

Inoltre, se avete porte seriali Plug-and-Play (PnP), Linux non le troverà a meno che l'IRQ e l'IO siano stati impostati all'interno dell'hardware dal software PnP. Questa è una comune ragione per la quale i messaggi di avvio non mostrano una porta seriale che fisicamente esiste. L'harware del PC (un BIOS PnP) potrebbe automaticamente configurare a basso livello questo. La configurazione PnP sarà spiegata più avanti.

6.5 Quali sono l'indirizzo IO e l'IRQ correnti della mia porta seriale?

La sezione precedente indica come tentare di fare questo guardando i messaggi di avvio. Se essi vi forniscono sufficienti informazioni, allra potreste anche saltare la lettura di questa sezione. Se no allora ci sono alcuni altri modi per scoprirli.

Ci sono davvero due risposte alla domanda "Quali sono i miei IRQ e IO?" 1. Quello che il device driver pensa che sia impostato (questo è quello che setserial in genere imposta e mostra). 2. Quello che in realtà è impostato nell'hardware. Potrebbe essere gli stessi. Se non losono avrete problemi visto che il driver ha informazioni sbagliate circa la porta seriale fisica. Se il driver ha l'IO sbagliato tenterà di inviare dati ad una porta seriale inesistente o, ancora peggio, ad un dispositivo esistente che non è una porta seriale. Se ha l'IRQ sbagliato il driver non riceverà le richieste di interrupt dalla porta seriale, causando una risposta molto lenta o mancante. Vedere Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi. Se ha il tipo sbagliato di UART potrebbero esserci problemi. Per determinare se entrambe le coppie di IRQ-IO sono identiche dovreste scoprire come sono impostati sia nel driver che nell'hardware.

Cosa pensa il device driver?

Questo è facile da scoprire. Basta guardare ai messaggi di avvio o digitare "setserial -g /dev/ttyS*". Se tutto è a posto, allora quello che vedrete sarà impostato anche nell'hardware. Ci sono alcuni ulteriori modi di trovare queste informazioni guardando dei "file" nella directory /proc. Una ragione importante per comprendere questi ulteriori modi è per avvisarvi che essi mostrano solo quello che il device driver pensa che sia. Alcuni vedono certi "file" nella directory /proc ed erroneamente pensano che quello che vedono sia quello che è impostato nell'hardware ma non è necessariamente così.

/proc/ioports mostrerà gli indirizzi di IO che i driver stanno usando. /proc/interrupts mostra gli IRQ che sono stati usati dai driver dei processi attualmente in esecuzione (che hanno dispositivi aperti). Notate che in entrambi i casi di cui sopra potete solo vedere quello il driver pensa che sia e non necessariamente quello che è veramente impostato nell'hardware. /proc/interrupts mostra anche quanti interrupt sono stati invocati (spesso migliaia) per ogni dispositivo). Potete ricavare un indizio da questo perché se vedete un gran numero di interrupt invocati significa che c'è un qualche hardware da qualche parte che sta usando quell'interrupt. Talvolta il vedere solo pochi interrupt non significa che quell'interrupt sia stato fisicamente generato da una qualche porta seriale. Quindi se non vedete quasi interrupt per una porta che state cercando di usare, quell'interrupt potrebbe non essere stato impostato dall'hardware ad questo implica che il driver sta usando l'interrupt sbagliato. Per vedere /proc/interrupt per controllare su di un programma che state attualmente eseguendo (tipo "minicom") dovete mantenere il programma in esecuzione mentre controllate. Per fare questo cercate di saltare in una shell senza uscire dal programma.

Cos'è impostato nell'hardware della mia porta seriale?

Come scoprire quali indirizzi IO e IRQ sono realmente impostati nel dispositivo hardware? Forse i messaggi del BIOS vi danno alcune informazioni prima che Linux inizi il caricamento. Usate il tasto shift-PagSu per risalire attraverso i messaggi di avvio e cercate i primissimi che provengono dal BIOS. Questa era la situazione prima che Linux partisse. Setserial non può modificarla ma isapnp o pciutils sì.

Un metodo brutale è cercare la rilevazione con setserial usando l'opzione "autoconfig". Avrete bisogno di indovinare gli indirizzi per poterli poi verificare. Vedere Cos'è setserial. Per una porta seriale PCI, usate il comando "lspci" (per i kernel <2.2 guardate in /proc/pci). Se la vostra porta seriale è Plug-and-Play leggete le successive due sottosezioni.

Per una porta impostata tramite jumper, ecco come essi sono impostati. Se la porta non è Plug-and-Play (PnP) ma è stata impostata usando un programma DOS, allora è impostata secondo quanto deciso da chi ha lanciato quel programma.

Cosa è impostato nell'hardware della mia porta seriale?

Le porte PnP non mantengono la loro configurazione nell'hardware quando viene spento il PC. Questo è in contrasto con i jumper (non-PnP) che restano immutati anche quando si spegne la corrente. Se avete una porta ISA PnP, potrebbe raggiungere lo stato nella quale non abbia alcun indirizzo IRQ e IO e sia effettivamente disabilitata. Dovrebbe essere ancora possibile trovare la porta usando il programma pnpdump.

Per il Plug-and-Play (PnP) sul bus ISA si potrebbe tentare con il programma pnpdump (che è parte di isapnptools). Se usate l'opzione --dumpregs dovrebbe informarvi circa gli effettivi indirizzi IO e IRQ impostati nella porta.

Riguardo alle porte PnP controllarne la configurazione sotto DOS/Windows potrebbe non essere di molto aiuto. Windows mantiene le sue informazioni di configurazione nel suo Registro che non viene usato da Linux. Potrebbe fornire la memoria non volatile del BIOS di alcune informazioni ma potrebbe non essere in sicrono con quelle della configurazione corrente di Windows nel Registro ??. Se lasciate che un BIOS PnP faccia una configurazione automatica quando lanciate Linux (ed avete detto al BIOS che non avete un sistema operativo PnP quando fate partire Linux), allora Linux dovrebbe usare una qualsivoglia configurazione si trovi nella memoria non volatile del BIOS.

6.6 Scegliere gli IRQ seriali

Se avete un vero Plug-and-Play impostato dove sia il sistema operativo che il BIOS PnP configurano tutti i vostri dispositivi, non sceglierete i vostri IRQ. PnP determina quello che pensa sia meglio e li assegna. Ma se usate gli strumenti di Linux per il Plug-and-Play (isapnp e pcitools) allora dovete essere voi a sceglierli. Se già conoscete quale IRQ volete usate potete saltare questa sezione a meno che non vogliate sapere che l'IRQ O ha un uso speciale (vedere il paragrafo seguente).

L'IRQ 0 non è un IRQ

Sebbene IRQ 0 sia in realtà il timer (nell'hardware), esso ha uno speciale significato nell'impostare una porta seriale con setserial. Esso dice al driver che non c'è un interrupt per quella porta ed il driver allora userà metodi di polling. È piuttosto inefficiente ma può essere tentato se c'è un conflitto di interrupt o degli interrupt sono male impostati. Il vantaggio di assegnarlo è che non avete bisogno di sapere quale interrupt è impostato nell'hardware. Dovrebbe essere usato solo come espediente temporaneo fino a che non siate in grado di trovare un vero interrupt da usare.

Condivisione di interrupt e i Kernel 2.2+

La regola generale è che ogni dispositivo dovrebbe usare un IRQ unico e non condividerlo. Ma ci sono situazioni dove la condivisione è permessa come nella maggior parte delle schede multi-porta. Anche quando è permesso, potrebbe essere non molto efficiente visto che ogni volta che viene invocato un interrupt condiviso, occorre effettuare un controllo per determinare da dove proviene. Sebbene quindi sia possibile, è meglio attribuire ad ogni dispositivo il proprio interrupt.

Per i kernel precedenti il 2.2, gli IRQ seriali potevano essere condivisi tra di loro solo per la maggioranza delle schede multiporta. A partire dal kernel 2.2 gli IRQ seriali possono talvolta essere condivisi tra tutte le porte seriali. Per far sì che la condivisione funzioni nel kernel 2.2 esso deve essere compilato con CONFIG_SERIAL_SHARE_IRQ e l'hardware della porta seriale deve supportare la condivisione (così che se due seriali mettono due diversi voltaggi nello stesso cavo di interrupt, solo il voltaggio che significa "questo è un interrupt" prevarrà). Quindi anche se avete il 2.2, è meglio evitare la condivisione.

Quale IRQ scegliere?

L'hardware seriale spesso ha solamente un numero limitato di IRQ che possono essere impostati. Inoltre voi non volete dei conflitti di IRQ. Così non è che ci sia molta scelta. Il vostro PC di norma dovrebbe avere impostato ttyS0 e ttyS2 all'IRQ 4 e ttyS1 e ttyS3 all'IRQ 3. /proc/interrupts mostrerà quali IRQ sono usati da programmi attualmente in esecuzione. È meglio non usare uno di questi. Prima che l'IRQ 5 venisse usato per le schede audio, era spesso usato per una porta seriale.

Ecco come Greg (l'autore originale di Serial-HOWTO) ha impostato i suoi in /etc/rc.d/rc.serial. rc.serial è un file (uno script di shell) che viene lanciato in avvio (potrebbe avere un percorso diverso). Per versioni di "setserial" superiori a 2.15 non è più fatto in questo modo, ma questo esempio mostra la scelta di IRQ.

 /sbin/setserial /dev/ttyS0 irq 3       # il mio mouse seriale
 /sbin/setserial /dev/ttyS1 irq 4       # il terminale dumb Wyse  
 /sbin/setserial /dev/ttyS2 irq 5       # il mio modem Zoom
 /sbin/setserial /dev/ttyS3 irq 9       # il mio modem USR 
 

Assegnazioni di IRQ standard:

        IRQ  0    Timer channel 0 (Potrebbe significare "no interrupt". 
                  Vedi sotto)
        IRQ  1    Tastiera
        IRQ  2    Cascade per il controller 2
        IRQ  3    porta seriale 2
        IRQ  4    porta seriale 1
        IRQ  5    porta parallela 2, scheda audio
        IRQ  6    Floppy
        IRQ  7    porta parallela 1
        IRQ  8    Real-time clock
        IRQ  9    Rediretto a IRQ2
        IRQ 10    non assegnato 
        IRQ 11    non assegnato
        IRQ 12    non assegnato
        IRQ 13    coprocessore matematico
        IRQ 14    controller 1 di dischi fissi
        IRQ 15    controller 2 di dischi fissi
 

Non esiste la "Cosa Giusta" da fare quando si scelgono gli interrupt. Semplicemente assicuratevi che esso non sia usato dalla scheda madre, o da qualsiasi altra scheda. 2, 3, 4, 5, 7, 10, 11, 12 o 15 sono scelte possibili. Notate che IRQ 2 è la stessa cosa di IRQ 9. Potete invocare sia 2 che 9, il driver seriale è molto comprensivo. Se avete una scheda seriale molto vecchia potrebbe essere incapace di usare gli IRQ 8 e superiori.

Accertatevi di non usare gli IRQ 1, 6, 8, 13 o 14!. Questi sono usati dalla vostra scheda madre. La farete molto scontenta se gli "rubate" i suoi IRQ. Quando avete finito, ricontrollate /proc/interrupts mentre i programmi che usano gli interrupt sono in esecuzione ed assicuratevi che non vi siano conflitti.

6.7 Scegliere gli indirizzi -- Conflitti della scheda video con ttyS3

L'indirizzo IO delle schede video IBM 8514 (ed altre simili) è 0x?2e8 dove ? è 2, 4, 8 o 9. Questo può causare conflitto (ma non dovrebbe se la porta seriale è ben concepita) con l'indirizzo IO di ttyS3 in 0x02e8 se la porta seriale ignora lo 0 esadecimale iniziale (molte lo fanno). Queste sono cattive notizie se tentate di usare ttys3 a quell'indirizzo di IO.

Nella maggioranza dei casi dovreste usare l'indirizzo predefinito se possibile. Gli indirizzi mostrati rappresentano il primo indirizzo in un intervallo di 8 byte. Ad esempio 3f8 comprende in realtà 3f8-3ff. Ogni dispositivo seriale (così come altri tipi di dispositivi che usano indirizzi IO) abbisogna del proprio univoco intervallo di indirizzi. Non dovrebbero esserci confilitti. Ecco gli indirizzi predefiniti per le porte seriali:

 ttyS0 indirizzo 0x3f8
 ttyS1 indirizzo 0x2f8
 ttyS2 indirizzo 0x3e8
 ttyS3 indirizzo 0x2e8
 

6.8 Impostare gli indirizzi IO e IRQ nell'hardware (per lo più per PnP)

Dopo che è impostato nell'hardware non dimenticate di assicurarvi che sia anche impostato nel driver usando setserial. Per porte seriali non-PnP essi sono impostati sia nell'hardware da jumper o facendo girare un programma DOS ("senza jumper") per impostarli (questo potrebbe disabilitare PnP). Il resto di questa sottosezione riguarda solo le porte seriali PnP. Ecco una lista dei possibili metodi per configurare una porta seriale:

Gli indirizzi di IO e IRQ devono essere impostati (da PnP) nei propri registri ogni volta che il sistema viene acceso visto che l'hardware PnP non tiene memoria di cosa era stato impostato prima che venisse spento il PC. Un semplice modo di fare questo è lasciare che il BIOS PnP sappia che voi non avete un sistema operativo PnP ed il BIOS automaticamente lo farà ogni volta che si fa partire. Questo potrebbe causare problemi sotto Windows (che è un sistema operativo PnP) se voi lanciate Windows mentre il BIOS pensa che Windows non sia un sistema operativo PnP. Vedere il Plug-and-Play HOWTO.

Il Plug-and-Play era concepito per automatizzare la configurazione io-irq, ma per Linux, allo stato attuale, ha reso la vita più complicata, I kernel standard per Linux non supportano il plug-and-play molto bene. Se usate una patch al kernel di Linux per convertirlo a sistema operativo plug-and-play, allora tutto quanto di cui sopra dovrebbe essere gestito dal sistema operativo automaticamente. Ma quando volete usare questo per automatizzare la configurazione di dispositivi diversi dalla porta seriale, potreste scoprire che dovete comunque configurare i driver manualmente visto che molti driver Linux non sono scritti per supportare un sistema operativo Linux PnP. Se usate isapnptools od il BIOS per configurare plug-and-play questi metteranno semplicemente i due valori nei registri della sezione della porta seriale della scheda del modem e probabilmente dovrete comunque impostare setserial. Nulla di tutto questo è facile o è molto ben documentato all'inizio del '99. Vedere il Plug-and-Play-HOWTO e la FAQ di isapnptools.

Usare un BIOS PnP per configurare IO e IRQ

Mentre la spiegazione su come usare un sistema operativo PnP o isapnp per configurare l'io-irq dovrebbe essere di corredo al relativo software, questo non è il caso se volete lasciare al BIOS PnP l'esecuzione di questa configurazione. Non tutti i BIOS PnP possono farlo. Il BIOS ha in genere un menù CMOS per impostare le prime due porte seriali. Questo menù potrebbe essere difficile da trovare e per un BIOS "Award" si trova sotto "chipset feautures setup". C'è spesso ben poco tra cui scegliere. A meno di indicazioni diverse nei menù, queste prime due porte vengono impostate agli indirizzi IO e IRQ standard. Vedere Nomi e numeri dei dispositivi di porte seriali.

Che vi piaccia o no, quando accendete un PC, un BIOS PnP inizia ad eseguire la configurazione PnP (io-irq) dei dispositivi hardware. Potrebbe eseguire il lavoro parzialmente e lasciare il resto al sistema operativo PnP (che voi probabilmente non avete) o, se pensa che voi non abbiate il sistema operativo PnP, potrebbe configurare tutti i dispositivi PnP ma non configurare i device driver. Questo è quello che volete ma non è sempre facile scoprire cosa ha fatto esattamente il BIOS PnP.

Se dite al BIOS che non avete un sistema operativo PnP, allora il BIOS PnP dovrebbe configurare tutte le porte seriali PnP, non solo le prime due. Un modo indiretto per controllare quello che fa il BIOS (se avete Windows 9x sullo stesso PC) è "forzare" una configurazione sotto Windows. Vedere il Plug-and-Play-HOWTO e cercare "forced". È più facile usare il menù CMOS BIOS che potrebbe ignorare quello che avete "forzato" sotto Windows. Potrebbe esserci un'opzione nel BIOS che può impostare o disabilitare questa capacità di ignorare.

Se aggiungete un nuovo dispositivo PnP, il BIOS dovrebbe cambiare la sua configurazione PnP per accoglierlo. Potrebbe anche cambiare gli io-irq di dispositivi esistenti, se necessario, per evitare qualsiasi conflitto. A questo scopo, tiene una lista dei dispositivi non PnP a patto che abbiate detto al BIOS che questo dispositivi non PnP sono configurati con io-irq. Un modo di dire questo al BIOS consiste nel lanciare un programma sotto DOS/Windows chiamato ICU.

Ma come scoprire cosa ha fatto il BIOS così che possiate impostare i device driver con queste informazioni? Il BIOS stesso può fornire alcune informazioni, sia nei suoi menù di setup o tramite messaggi sullo schermo quando accendete il computer. Vedere Cos'è impostato nell'hardware della mia porta seriale ?

6.9 Passare gli indirizzi IRQ e IO a setserial

Una volta che avete impostato gli indirizzi IO e IRQ nell'hardware (o fatto in modo che questo venga fatto dal PnP) avete bisogno anche di assicurarvi che il comando "setserial" venga lanciato ogni volta che viene lanciato Linux. Vedere la sottosezione Configurazione in fase di avvio

6.10 Altre configurazioni

Configurare il flusso di controllo hardware (RTS/CTS)

Vedere Controllo di flusso per una spiegazione. Si dovrebbe sempre usare il controllo di flusso hardware (ad eccezione di modem obsoleti che non l'hanno). Il vostro programma di comunicazione o "getty" dovrebbe avere una opzione per impostarlo (e se siete fortunati potrebbe già essere stato abilitato per default). Occorre che sia impostato sia all'interno del modem (tramite la stringa di inizializzazione o per default) che nel device driver. Il vostro programma di comunicazione dovrebbe mettere a posto entrambi (se lo configurate correttamente).

Se nessuna delle manovre sopradescritte consente l'attivazione del controllo di flusso hardware, dovete provvedere voi. Per il modem assicuratevi che esso sia impostato tramite stringa di inizializzazione o per default. Se dovete dire al device driver di farlo è meglio agire alla partenza mettendo un un file che viene lanciato in fase di avvio. Vedere la sottosezione Configurazione in fase di avvio. Dovete anche aggiungere quanto segue a tale file per ogni porta seriale (l'esempio è ttyS2) per la quale volete abilitare il flusso di controllo hardware:

 
stty crtscts < /dev/ttyS2 

Se volete vedere se il controllo di flusso è abilitato eseguite quanto segue: in minicom (o simile) digitate AT&V per vedere come è configurato il modem e cercate &K3 che vuol dire controllo di flusso hardware. Poi controllate se il device driver lo rileva digitando stty -a < /dev/ttyS2. Cercate "crtscts" (senza il segno meno che lo disabilita).


Avanti Indietro Indice

Hosting by: hurra.com
Generated: 2007-01-26 17:56:19