Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 657

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>The Linux Modem-HOWTO: Configurare la porta seriale</TITLE>
 <LINK HREF="Modem-HOWTO-7.html" REL=next>
 <LINK HREF="Modem-HOWTO-5.html" REL=previous>
 <LINK HREF="Modem-HOWTO.html#toc6" REL=contents>
</HEAD>
<BODY>
<A HREF="Modem-HOWTO-7.html">Avanti</A>
<A HREF="Modem-HOWTO-5.html">Indietro</A>
<A HREF="Modem-HOWTO.html#toc6">Indice</A>
<HR>
<H2><A NAME="s6">6. Configurare la porta seriale</A></H2>

<H2><A NAME="PCI_"></A> <A NAME="ss6.1">6.1 Supporto per il bus PCI in fase di completamento </A>
</H2>

<P> 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 
<A HREF="http://www.o2.net/~gromitkc/winmodem.html">http://www.o2.net/~gromitkc/winmodem.html</A> 
per le ultime informazioni sui modem PCI e relativi argomenti.
<P>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&agrave; 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 &egrave; l'ultima versione di questo
HOW-TO) allora inviategli quanto richiesto a: 
<A HREF="mailto:tytso@mit.edu">mailto:tytso@mit.edu</A>.
<P>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&ograve; aiutare a determinare se pu&ograve; 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
<P>
<P>
<H2><A NAME="irq_io_conf"></A> <A NAME="ss6.2">6.2 Introduzione alla configurazione </A>
</H2>

<P> 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 &egrave; questo il caso, dovete per prima cosa sapere
qualcosa circa le due parti necessarie per configurare la porta seriale sotto Linux.
<P>La prima parte (configurazione a basso livello) &egrave; 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". <CODE>setserial</CODE> 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 &egrave; poi
facile avere dei guai.
<P>La seconda parte (configurazione ad alto livello) consiste nell'assegnare una velocit&agrave;
(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&igrave; che altri possano collegarsi attraverso di essa). In ogni caso dovrete dire a 
questi programmi quale velocit&agrave; volete, ecc., usando un menu od un file di configurazione. 
Questa configurazione
di alto livello pu&ograve; essere fatta anche con il programma <CODE>stty</CODE>. <CODE>stty</CODE> &egrave; anche utile
per vedere lo stato corrente se avete dei problemi.
Vedere anche la sezione "Stty" del Serial-HOWTO.
<P>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 &egrave; diventata
pi&ugrave; complessa. Ecco i casi in cui occorre eseguire una configurazione a basso livello 
(impostare gli indirizzi IRQ e IO):
<P>
<UL>
<LI> Volete usare pi&ugrave; di due porte seriali</LI>
<LI> Installazione di una nuova porta seriale (come nel caso di un modem interno)</LI>
<LI> Avete problemi con la porta seriale(i)</LI>
</UL>
<P>Per i kernel 2.2+ dovreste essere capaci di usare pi&ugrave; 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 
<A HREF="#int_share-2.2">Condivisione di interrupt e i Kernel 2.2+</A><P>La configurazione a basso livello (impostare gli indirizzi IRQ e IO) sembra causare pi&ugrave; 
problemi (rispetto a quella ad alto livello), sebbene per la maggioranza sia completamente
automatica e nessuna configurazione si debba effettuare. Quindi la quasi totalit&agrave; di questa
sezione verte su questo argomento. A meno che il driver seriale sappia il corretto indirizzo
IRQ e IO la porta non funzioner&agrave; per niente. Probabilmente non sar&agrave; neanche 
individuata da Linux. Anche se essa fosse trovata, potrebbe lavorare in modo estremamente
lento se l'IRQ &egrave; sbagliato. Vedere 
<A HREF="Modem-HOWTO-16.html#slow_">Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi</A>.
<P>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&igrave; 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:
<P>
<OL>
<LI> nei registri di memoria dell'hardware della porta seriale stessa</LI>
<LI> nel device driver (spesso lanciando "<CODE>setserial</CODE>" in fase di boot)</LI>
</OL>
<P>Potreste dare un occhiata ai messaggi di avvio (fase di boot). Essi sono in genere 
corretti. Ma se state avendo problemi, c'&egrave; una buona probabilit&agrave; che alcuni di questi
messaggi non mostrino la corretta configurazione dell'hardware (e d'altronde non sono
deputati a farlo). Vedere 
<A HREF="#boot_mesgs">Indirizzi I/O e IRQ: Messaggi in fase di boot</A>.  
<P>
<H2><A NAME="ss6.3">6.3 Errori comuni commessi nel riconfigurare a basso livello</A>
</H2>

<P> Ecco alcuni degli errori pi&ugrave; comuni che possono compiere:
<UL>
<LI>comando setserial: Viene lanciato (senza l'opzione "autoconfig") e si pensa 
che abbia controllato l'hardware (non l'ha fatto).</LI>
<LI>messaggi di setserial: Essi vengono visualizzati sullo schermo in fase di boot ed
erroneamente si crede che il risultato mostri come l'hardware sia veramente configurato.</LI>
<LI>/proc/interrupts: Quando il loro dispositivo seriale non &egrave; in uso essi non 
vedono l&igrave; i suoi interrupt ed erroneamente concludono che la porta seriale non pu&ograve;
essere trovata (o che non abbia un interrupt impostato).</LI>
<LI>/proc/ioports: Si pensa che questa mostri la configurazione dell'hardware mentre
mostra solo gli stessi dati (che possono anche essere errati) di setserial.</LI>
</UL>
<P>
<H2><A NAME="boot_mesgs"></A> <A NAME="ss6.4">6.4 Indirizzi I/O e IRQ: messaggi in fase di boot </A>
</H2>

<P> 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&ugrave; li scorrer&agrave; nel senso opposto.
Il comando <CODE>dmesg</CODE> 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&igrave; come nel tardo 1999). Notate che ttyS00
&egrave; lo stesso di /dev/ttyS0.
<P>
<BLOCKQUOTE><CODE>
<PRE>
Per prima cosa vedete quello che &egrave; stato rilevato (ma l'irq &egrave; 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&ugrave; tardi potete vedere quello che era stato salvato, ma anche questo
non &egrave; 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
</PRE>
</CODE></BLOCKQUOTE>
<P>Notate che qui vi &egrave; 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 &egrave; quello corretto.
Ma se state avendo problemi il messaggio potrebbe fuorviarvi. Prima di leggere la 
spiegazione di tutta questa complessit&agrave; nel resto di questa sezione, potreste 
semplicemente provare ad usare la vostra porta seriale e vedere se tutto va bene. Se &egrave; 
il caso, potrebbe non essere essenziale leggere oltre.
<P>Il secondo messaggio deriva dal programma <CODE>setserial</CODE> 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&agrave; impostato a irq=8
nell'hardware (entrambi i messaggi sono sbagliati). irq=5 potrebbere esistere  perch&eacute; 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 &egrave; necessariamente
corretto. Se il driver seriale ha l'IRQ sbagliato, la porta seriale &egrave; molto lenta o non 
funziona per niente.
<P>Il primo messaggio &egrave; 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&eacute; il farlo non &egrave; a prova di errore. Esso assume che gli IRQ sono 
come mostrato perch&eacute; questi sono i valori "standard". Potreste controllare manualmente
con <CODE>setserial</CODE> usando le opzioni <CODE>autoconfig</CODE> e <CODE>auto_irq</CODE>  ma non si garantisce che sia esatto.
<P>I dati mostrati nei messaggi del BIOS (che vedete per primi) &egrave; quello che &egrave; impostato nell'hardware. Se la porta seriale &egrave; Plug-and-Play PnP allora &egrave; possibile che <CODE>isapnp</CODE> venga
lanciato e modifichi queste impostazioni.
Cercate dei messaggi in questo senso dopo che Linux &egrave; partito. L'ultimo messaggio relativo
alla porta seriale mostrato nell'esempio di cui sopra dovrebbe coincidere con i messaggi
del BIOS (che &egrave; 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 &egrave; attualmente impostato nell'hardware.
<P>Inoltre, se avete porte seriali Plug-and-Play (PnP), Linux non le trover&agrave; a meno che 
l'IRQ e l'IO siano stati impostati all'interno dell'hardware dal software PnP. Questa &egrave;
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&agrave; spiegata pi&ugrave; avanti.
<P>
<H2><A NAME="what_is_io_irq"></A> <A NAME="ss6.5">6.5 Quali sono l'indirizzo IO e l'IRQ correnti della mia porta seriale?</A>
</H2>

<P> 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.
<P>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 &egrave; quello che
setserial in genere imposta e mostra). 2. Quello che in realt&agrave; &egrave; 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&agrave; di inviare dati ad una porta seriale
inesistente o, ancora peggio, 
ad un dispositivo esistente che non &egrave; una porta seriale. Se ha l'IRQ sbagliato il driver
non ricever&agrave; le richieste di interrupt dalla porta seriale, causando una risposta molto lenta
o mancante. Vedere
<A HREF="Modem-HOWTO-16.html#slow_">Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi</A>. 
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.
<P>
<H3>Cosa pensa il device driver?</H3>

<P> Questo &egrave; facile da scoprire. Basta guardare ai messaggi di avvio o digitare
"setserial -g /dev/ttyS*". Se tutto &egrave; a posto, allora quello che vedrete sar&agrave; 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 &egrave; 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 &egrave; impostato nell'hardware ma non &egrave; necessariamente cos&igrave;.
<P>/proc/ioports mostrer&agrave; 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 &egrave;
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&eacute; se vedete un gran numero di interrupt invocati significa che c'&egrave; 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.
<P>
<H3><A NAME="io-irq_in_hdw"></A> Cos'&egrave; impostato nell'hardware della mia porta seriale? </H3>

<P> 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&ograve; modificarla ma isapnp o pciutils s&igrave;.
<P>Un metodo brutale &egrave; cercare la rilevazione con setserial usando l'opzione "autoconfig". 
Avrete bisogno di indovinare gli indirizzi per poterli poi verificare. Vedere 
<A HREF="Modem-HOWTO-9.html#set_serial">Cos'&egrave; setserial</A>. Per una porta seriale PCI, usate il comando "lspci"
(per i kernel &lt;2.2 guardate in /proc/pci). Se la vostra porta seriale &egrave; Plug-and-Play 
leggete le successive due sottosezioni. 
<P>Per una porta impostata tramite jumper, ecco come essi sono impostati. Se la porta non &egrave;
Plug-and-Play (PnP) ma &egrave; stata impostata usando un programma DOS, allora &egrave; impostata secondo
quanto deciso da chi ha lanciato quel programma.
<P>
<H3>Cosa &egrave; impostato nell'hardware della mia porta seriale?</H3>

<P> Le porte PnP non mantengono la loro configurazione nell'hardware quando viene spento il
PC. Questo &egrave; 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 <CODE>pnpdump</CODE>.
<P>Per il Plug-and-Play (PnP) sul bus ISA si potrebbe tentare con il
programma <CODE>pnpdump</CODE> (che &egrave; parte di <CODE>isapnptools</CODE>). Se usate
l'opzione --dumpregs dovrebbe informarvi circa gli effettivi indirizzi
IO e IRQ impostati nella porta.  
<P>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.
<P>
<H2><A NAME="ss6.6">6.6 Scegliere gli IRQ seriali</A>
</H2>

<P> 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&agrave; 
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).
<P>
<H3>L'IRQ 0 non &egrave; un IRQ</H3>

<P>Sebbene IRQ 0 sia in realt&agrave; il timer (nell'hardware), esso ha uno speciale significato
nell'impostare una porta seriale con setserial. Esso dice al driver che non c'&egrave; un interrupt
per quella porta ed il driver allora user&agrave; metodi di polling. &Egrave; piuttosto 
inefficiente ma pu&ograve; essere tentato se c'&egrave; un conflitto di interrupt o degli interrupt sono
male impostati. Il vantaggio di assegnarlo &egrave; che non avete bisogno di sapere quale 
interrupt &egrave; impostato nell'hardware. Dovrebbe essere usato solo come espediente temporaneo
fino a che non siate in grado di trovare un vero interrupt da usare.
<P>
<H3><A NAME="int_share-2.2"></A> Condivisione di interrupt e i Kernel 2.2+ </H3>

<P> La regola generale &egrave; che ogni dispositivo dovrebbe usare un IRQ unico e non condividerlo.
Ma ci sono situazioni dove la condivisione &egrave; permessa come nella maggior parte delle schede
multi-porta. Anche quando &egrave; 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, &egrave; meglio attribuire ad ogni
dispositivo il proprio interrupt.
<P>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&igrave; 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&igrave; che se due seriali mettono due diversi
voltaggi nello stesso cavo di interrupt, solo il voltaggio che significa "questo &egrave; un interrupt"
prevarr&agrave;). Quindi anche se avete il 2.2, &egrave; meglio evitare la condivisione.
<P>
<H3>Quale IRQ scegliere?</H3>

<P> L'hardware seriale spesso ha solamente un numero limitato di IRQ che possono essere
impostati. Inoltre voi non volete dei conflitti di IRQ. Cos&igrave; non &egrave; che ci sia molta 
scelta. Il vostro PC di norma dovrebbe avere impostato <CODE>ttyS0</CODE> e <CODE>ttyS2</CODE> all'IRQ 4 e
<CODE>ttyS1</CODE> e <CODE>ttyS3</CODE> all'IRQ 3. <CODE>/proc/interrupts</CODE> mostrer&agrave; quali IRQ sono usati
da programmi attualmente in esecuzione. &Egrave; meglio non usare uno di questi. Prima che l'IRQ
5 venisse usato per le schede audio, era spesso usato per una porta seriale.
<P>Ecco come Greg (l'autore originale di Serial-HOWTO) ha impostato i suoi in 
/etc/rc.d/rc.serial. rc.serial &egrave; 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 &egrave; 
pi&ugrave; fatto in questo modo, ma questo esempio mostra la scelta di IRQ.
<P>
<BLOCKQUOTE><CODE>
<PRE>
 /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 
 
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Assegnazioni di IRQ standard:
<PRE>
        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
 
</PRE>
<P>
<P>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 &egrave; la stessa cosa
di IRQ 9. Potete invocare sia 2 che 9, il driver seriale &egrave; molto comprensivo. Se avete una
scheda seriale molto vecchia potrebbe essere incapace di usare gli IRQ 8 e superiori.
<P>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 <CODE>/proc/interrupts</CODE> mentre i programmi che usano
gli interrupt sono in esecuzione ed assicuratevi che non vi siano conflitti.
<P>
<H2><A NAME="ss6.7">6.7 Scegliere gli indirizzi -- Conflitti della scheda video con ttyS3</A>
 </H2>

<P> L'indirizzo IO delle schede video IBM 8514 (ed altre simili) &egrave; 0x?2e8 dove ? &egrave; 2, 4,
8 o 9. Questo pu&ograve; causare conflitto (ma non dovrebbe se la porta seriale &egrave; ben concepita)
con l'indirizzo IO di <CODE>ttyS3</CODE> in 0x02e8 se la porta seriale ignora lo 0 esadecimale 
iniziale (molte lo fanno). Queste sono cattive notizie se tentate di usare <CODE>ttys3</CODE> a
quell'indirizzo di IO.
<P>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&agrave; 3f8-3ff. Ogni dispositivo seriale (cos&igrave; 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:
<P>
<BLOCKQUOTE><CODE>
<PRE>
 ttyS0 indirizzo 0x3f8
 ttyS1 indirizzo 0x2f8
 ttyS2 indirizzo 0x3e8
 ttyS3 indirizzo 0x2e8
 
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="io-irq_methods"></A> <A NAME="ss6.8">6.8 Impostare gli indirizzi IO e IRQ nell'hardware (per lo pi&ugrave; per PnP)</A>
 </H2>

<P> Dopo che &egrave; impostato nell'hardware non dimenticate di assicurarvi che sia anche 
impostato nel driver usando <CODE>setserial</CODE>. 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:
<P>
<UL>
<LI> Usando un men&ugrave; di impostazioni CMOS per un BIOS PnP 
(in genere solo per i modem esterni su ttyS0 (Com1) e ttyS1 (Com2))</LI>
<LI> Lasciando che un BIOS PnP configuri automaticamente una porta seriale PnP
Vedere 
<A HREF="#bios_conf">Usare un BIOS PnP per configurare I0-IRQ</A></LI>
<LI> Non facendo nulla se avete sia una porta seriale PnP ed un sistema operativo Linux
PnP (vedere Plug-and-Play-HOWTO).</LI>
<LI> Usando <CODE>isapnp</CODE> per una porta seriale PnP non-PCI</LI>
<LI> Usando pciutils (pcitools) per il bus PCI</LI>
</UL>
<P>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 &egrave;
lasciare che il BIOS PnP sappia che voi non avete un sistema operativo PnP ed il BIOS
automaticamente lo far&agrave; ogni volta che si fa partire. Questo potrebbe causare problemi
sotto Windows (che &egrave; 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.
<P>Il Plug-and-Play era concepito per automatizzare la configurazione io-irq, ma per Linux,
allo stato attuale, ha reso la vita pi&ugrave; 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 
<CODE>isapnptools</CODE> 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 &egrave; facile o
&egrave; molto ben documentato all'inizio del '99. Vedere il Plug-and-Play-HOWTO e la FAQ di
isapnptools.
<P>
<H3><A NAME="bios_conf"></A> Usare un BIOS PnP per configurare IO e IRQ  </H3>

<P> 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 &egrave; 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&ugrave; CMOS per impostare le prime due porte seriali.
Questo men&ugrave; potrebbe essere difficile da trovare e per un BIOS "Award" si trova sotto 
"chipset feautures setup".
C'&egrave; spesso ben poco tra cui scegliere. A meno di indicazioni diverse nei men&ugrave;, queste prime
due porte vengono impostate agli indirizzi IO e IRQ standard.
Vedere 
<A HREF="Modem-HOWTO-8.html#dev_nos">Nomi e numeri dei dispositivi di porte seriali</A>.
<P>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 &egrave; quello che volete
ma non &egrave; sempre facile scoprire cosa ha fatto esattamente il BIOS PnP.
<P>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) &egrave; "forzare" 
una configurazione sotto Windows. Vedere il Plug-and-Play-HOWTO e cercare "forced".
&Egrave; pi&ugrave; facile usare il men&ugrave; CMOS BIOS che potrebbe ignorare quello che avete "forzato"
sotto Windows. Potrebbe esserci un'opzione nel BIOS che pu&ograve; impostare o disabilitare
questa capacit&agrave; di ignorare.
<P>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.
<P>Ma come scoprire cosa ha fatto il BIOS cos&igrave; che possiate impostare i device driver con 
queste informazioni? Il BIOS stesso pu&ograve; fornire alcune informazioni, sia nei suoi men&ugrave; 
di setup o tramite messaggi sullo schermo quando accendete il computer. Vedere
<A HREF="#io-irq_in_hdw">Cos'&egrave; impostato nell'hardware della mia porta seriale ? </A><H2><A NAME="ss6.9">6.9 Passare gli indirizzi IRQ e IO a setserial</A>
 </H2>

<P> 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
<A HREF="Modem-HOWTO-9.html#sets_boot_time">Configurazione in fase di avvio</A> 
 
<P>
<P>
<H2><A NAME="ss6.10">6.10 Altre configurazioni</A>
</H2>

<H3>Configurare il flusso di controllo hardware (RTS/CTS) </H3>

<P> Vedere 
<A HREF="Modem-HOWTO-4.html#flow_control">Controllo di flusso</A> 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 "<CODE>getty</CODE>" 
dovrebbe avere una opzione per impostarlo (e se siete fortunati potrebbe gi&agrave; 
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).
<P>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 &egrave; meglio agire alla partenza mettendo un 
un file che viene lanciato in fase di avvio. Vedere la sottosezione 
<A HREF="Modem-HOWTO-9.html#sets_boot_time">Configurazione in fase di avvio</A>.
Dovete anche aggiungere quanto segue a tale file per ogni porta 
seriale (l'esempio &egrave; ttyS2) per la quale volete abilitare il flusso di controllo hardware:
<P>
<BLOCKQUOTE><CODE>
<PRE>
 
stty crtscts &lt; /dev/ttyS2 
</PRE>
</CODE></BLOCKQUOTE>
 
<P>Se volete vedere se il controllo di flusso &egrave; abilitato eseguite quanto segue:
in minicom (o simile) digitate AT&amp;V per vedere come &egrave; configurato il 
modem e cercate &amp;K3 che vuol dire controllo di flusso hardware. Poi 
controllate se il device driver lo rileva digitando stty -a &lt; /dev/ttyS2. 
Cercate "crtscts" (senza il segno meno che lo disabilita).
<P>
<HR>
<A HREF="Modem-HOWTO-7.html">Avanti</A>
<A HREF="Modem-HOWTO-5.html">Indietro</A>
<A HREF="Modem-HOWTO.html#toc6">Indice</A>
</BODY>
</HTML>