Non usate mai setserial
con i Laptop (PCMCIA).
setserial
è un programma che vi permette di comunicare al software del device driver
l'indirizzio IO della porta seriale, quale interrupt (IRQ) è impostato nell'hardware
della porta quale tipo di UART avete, ecc. Può anche mostrare come il driver sia
attualmente impostato. In più può rilevare l'hardware (se sono state passate determinate
opzioni). A parte il manuale di setserial
, leggete anche le informazioni in
/usr/doc/setserial.../
o simile. Dovrebbe dirvi come setserial sia gestito nella
vostra distribuzione di Linux.
Setserial
è spesso lanciato automaticamente in fase di avvio da uno script di shell.
Funziona solo se il modulo seriale è caricato. Se doveste per qualche ragione scaricare il
modulo seriale più tardi, i cambiamenti precedentemente effettuati da setserial
saranno persi. Quindi setserial
deve essere lanciato di nuovo per reimpostarli.
Oltre ad essere lanciato da uno script di avvio, qualcosa di simile a setserial
viene lanciato quando il modulo seriale viene caricato. Quindi quando osservate i messaggi
di avvio sullo schermo potrebbe sembrare che sia stato lanciato due volte ed in effetti
si è verificato questo.
Con appropriate opzioni, setserial
può rilevare (ad un dato indirizzo I/O) una porta
seriale ma dovete indovinare l'indirizzo I/O. Se chiedete di rilevare /dev/ttyS2 ad
esempio, semplicemente verrà effettuata la rilevazione all'indirizzo nel quale pensa
ttyS2 si trovi. Se dite a setserial che ttyS2 è ad un indirizzo diverso, allora verrà fatta
la rilevazione per quell'indirizzo, ecc. Vedere
Rilevazione
Setserial non imposta né gli IRQ né gli indirizzi I/O nell'hardware della porta seriale stessa. Dovete passare a setserial gli identici valori che sono stati impostati nell'hardware. Nell'hardware sono impostati tramite ponticelli o dal plug-and-play. Non inventatevi dei valori che pensate possano andare bene da passare a sestserial. Comunque, se sapete l'indirizzo I/O ma non conoscete l'IRQ potere ordinare a setserial di tentare di determinarlo.
Potete vedere una lista di possibili comandi da usare (ma non le opzioni a una
lettera tipo -v per verbose -- che dovreste normalmente usare in fase di
risoluzione di problemi) digitando setserial
senza parametri. Notate che
setserial chiama un indirizzo IO "porta". Se digitate
setserial -g /dev/ttyS*vedrete alcune informazioni circa il modo in cui il device driver è configurato per le vostre porte. Aggiungete una "v" all'opzione "-g" per saperne di più. Ma questo non vi dice se l'harware ha questi valori impostati per se stesso. Infatti, potete lanciare setserial assegnando un indirizzo IO puramente fittizio, un qualsiasi IRQ e qualsiasi tipo di UART vi pare. Poi la prossima volta che digitate "setserial ... " verranno visualizzati questi falsi valori senza nessuna protesta. Notate che gli assegnamenti fatti da setserial sono persi quando il PC viene spento così che in genere esso viene lanciato ogniqualvolta Linux viene caricato.
Per cercare di scoprire se avete un certo tipo di hardware seriale dovete
prima sapere (o indovinare) il suo indirizzo I/O (o il device driver deve avere un
I/O per esso, presumibilmente impostato precedentemente da setserial).
Per cercare di identificare l'hardware fisico usate i parametri -v (verbose) e
il comando autoconfig
per setserial
. Se il messaggio che ne risulta mostra un
tipo di uart come 16550A, allora tutto è a posto. Se invece mostra
"unknown
" (sconosciuto)
per il tipo di uart, allora potrebbe non esserci una porta seriale a
quell'indirizzo I/O. Alcune porte seriali a buon mercato non si
autoidentificano correttamente cosi se vedete "unknown
" potreste comunque
avere qualcosa a quell'indirizzo.
A parte l'auto-rilevazione per il tipo di uart, setserial può anche auto-rilevare gli
IRQ ma questo non sempre funziona correttamente. In versioni di setserial 2.15 e
superiori, l'ultima prova di rilavazione può essere salvata e messa nel file di
configurazione /etc/setserial.conf
che verrà usato al prossimo avvio di Linux.
Lo script che lancia setserial
in fase di avvio non fa rilevazioni in genere, ma
potreste modificarlo in modo che questo avvenga. Vedere la prossima sezione.
Sì, ma ... Potete impostare Linux in modo che rilevi ed imposti i dispositivi seriali automaticamente in fase di avvio (probing). È facile da fare per setserial precedenti al 2.15. Semplicemente aggiungete alcune righe al file che lancia setserial all'avvio. Vedere Vecchi metodi di configurazione: modificare uno script Ad esempio, per ttyS3 dovreste aggiungere:
/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
al file che lancia setserial all'avvio.
Fate questo per ogni porta seriale che volete autoconfigurare. Assicuratevi di passare
un nome di dispositivo che effettivamente esiste sulla vostra macchina.
Per le versioni superiori alla 2.15 (a patto che la vostra distribuzione implementi la modifica, RedHat non l'ha fatto), è molto più difficile da fare visto che il file che lancia setserial in avvio, /etc/init.d/setserial o simile non è concepito per essere modificato dall'utente. Potrebbero mancare i commenti di aiuto che erano viceversa presenti nelle versioni precedenti.
Quando il kernel
carica il modulo seriale (o se il modulo è incorporato al kernel) allora solo
ttyS{0-3}
sono auto-rilevate ed il driver viene impostato ad IRQ 4 e 3 (a prescindere
dalle reali impostazioni dell'hardware). Potete vedere questo nei messaggi di avvio proprio
come se setserial
fosse stato lanciato. Se usate 3 o più porte, questo potrebbe
generare un conflitto di IRQ.
Per risolvere detti conflitti passando a setserial i veri IRQ (o per altre ragioni) potrebbe
esserci un file da qualche parte che lancia setserial
di nuovo.
Questo accade all'inizio della fase di avvio prima che qualsiasi processo usi la porta
seriale. In effetti, la vostra distribuzione potrebbe avere impostato le cose in modo che
il programma setserial venga lanciato automaticamente da uno script di avvio in fase di
boot. Ulteriori informazioni su come gestire questa situazione dovrebbero trovarsi in
/usr/doc/setserial .../ o simile.
A partire dalle versioni 2.15 (1999) di setserial
lo script di shell che parte
da un file in fase di avvio riceve i suoi dati da un file di configurazione: /etc/serial.conf.
Ma serial.conf in genere non viene mai modificato. Invece si usa semplicemente setserial
da riga comandi. In genere, quello che modificate con il comando setserial viene salvato
nel file di configurazione. Questo funziona solo se "###AUTOSAVE###" o simile si trova
sulla prima riga di serial.conf. Se doveste usare setserial
per sperimentare e la cosa
non va a buon fine, poi non dimenticate di reimmettere i valori originali così che le
impostazioni sperimentali non vengano salvate per errore.
Il file più comunemente usato per lanciare setserial in fase di avvio (in conformità con
il file di configurazione) è ora /etc/init.d/setserial (Debian) o /etc/init.d/serial
(RedHat), ecc. e non dovrebbe di norma essere modificato.
Per disabilitare una porta, usate setserial
per impostare "uart none". Il formato di
/etc/serial.conf sembra essere proprio uguale a quello dei parametri piazzati dopo
"setserial" sulla riga comandi con una riga per ogni porta. Se non usate autosave, potreste
modificare /etc/serial.conf manualmente. Per la 2.15, la distribuzione Debian installa il
sistema con autosave attivato, ma Redhat 6.0 ha semplicemente un file
/usr/doc/setserial-2.15/rc.serial che dovete spostare in /etc/init.d/.
BUG: A luglio 1999 c'è un errore/problema visto che con ###AUTOSAVE### solo i parametri di setserial visualizzati da "setserial -G /dev/ttyS?" (dove ? = 0, 1, 2, ...) vengono salvati ma gli altri parametri non lo sono. Questo si ripercuote solo su una piccola minoranza di utenti visto che i parametri non salvati sono comunque usati raramente. È stato riportato come un bug e potrebbe essere corretto.
Per fare sì che le impostazioni correnti impostate da setserial vengano salvate nel file
di configurazione (serial.conf) senza dovere spegnere, eseguite quello che normalmente
avviene quando spegnete: Lanciate lo script di shell /etc/init.d/{set}serial stop
.
Il comando "stop" salverà la configurazione corrente ma le porte seriali continueranno a
funzionare bene.
Prima della versione 2.15 (1999) o se la vostra distribuzione ha scelto di non usare /set/serial.conf, allora dovrete cercare un file che lancia setserial in fase di avvio. Se non esiste, dovete crearlo (o piazzare i comandi in un file che viene lanciato all'inizio della fase di avvio). Se questo file è attualmente usato probabilmente si trova da qualche parte nella directory /etc. Redhat lo ha fornito in /usr/doc/setserial sebbene dobbiate spostarlo nella directory /etc prima di usarlo. Potreste usare "locate" per cercare questo file. Ad esempio potreste digitare: locate "*serial*"
Quello che state cercando potrebbe chiamarsi rc.serial, oppure 0setserial (Debian). Se un
file di questo tipo viene fornito, dovrebbe contenere una serie di esempi "commentati".
Rendendo attivi e/o modificando questi esempi, dovreste essere in grado di impostare tutto
quanto correttamente. Assicuratevi di usare un percorso valido per setserial
ed un valido nome di dispositivo. Potreste eseguire un test mandando in esecuzione questo
file manualmente (basta digitare il suo nome da superuser) per vedere se funziona bene.
Test come questo è molto più veloce che eseguire ripetuti reboot. Naturalmente potete anche
testare un singolo comando di setserial
semplicemente digitandolo sulla riga comandi.
Lo script /etc/rc.d/rc.serial
era comunemente usato nel passato.
La distribuzione Debian usava /etc/rc.boot/0setserial
.
Un altro file un tempo usato era /etc/rc.d/rc.local
ma non è una buona idea
usarlo visto che potrebbe non essere lanciato sufficientemente presto.
È stato segnalato che altri processi potrebbero tentare di aprire la porta seriale prima
che rc.local venga eseguito, causando errori nella comunicazione seriale.
Per default, sia ttyS0 che ttyS2 condividono l'IRQ 4, mentre ttys1 e ttyS3 condividono l'IRQ 3. Ma non è permessa la condivisione degli interrupt seriali, a meno di: 1. avere un kernel 2.2 o superiore, 2. si è compilato il supporto per questa cosa, e 3. il vostro hardware seriale lo supporta. Vedere Condivisione di interrupt e i Kernel 2.2+ Se avete solo due porte seriali ttyS0 e ttyS1, siete comunque a posto, visto che non esistono conflitti di condivisione di IRQ per dispositivi che non esistono. Se aggiungete un modem interno e conservate ttyS0 e ttyS1, allora dovreste cercare di trovare un IRQ inutilizzato per assegnarlo al vostro device driver. Se IRQ 5 non è usato da una scheda audio, potrebbe essere adatto da usare per un modem. Per impostare l'IRQ nell'hardware potreste avere bisogno di usare isapnp, un BIOS PnP o modificare Linux per renderlo PnP. Per aiutarvi a determinare quale IRQ di "ricambio" potreste avere, digitate "man setserial" e cercate diciamo "IRQ 11".
-------------------------- Dal TT-HOWTO --------------------------
Setserial passa al driver della porta seriale sia il numero di interrupt (IRQ) che l'indirizzo IO della porta. Può dirvi quale tipo di chip UART avete se usate il parametro autoconfig. Perché la porta seriale funzioni, il modulo seriale (per il kernel Linux) deve essere caricato. Se usate più di 2 porte seriali e volete assegnare dei numeri di IRQ univoci (o usate più di 4 porte seriali), allora dovete usare setserial. Se la vostra porta seriale è plug-and-play dovreste leggere il Serial-HOWTO. Oltre allaa pagina di manual assicuratevi di guardare in /usr/doc/setserial se esiste. Potrebbe dirvi come setserial venga lanciato automaticamente in fase di avvio e come modificarne la configurazione. Non usate mai setserial coi Laptop (bus PCMCIA) .
A partire dalla versione 2.15 (1999) di setserial
le modifiche fatte a setserial sulla
riga comandi sono talvolta automaticamente salvate così che rimarrano valide dopo avere
spento il computer.
A partire dalla versione 2.15 (1999) di setserial
il metodo di configurazione
è cambiato. Prima della 2.15 la configurazione veniva effettuata modificando uno script
di shell che lanciava setserial
. Dopo la 2.15 c'è un file di configurazione:
/set/serial.conf che viene automaticamente modificato per adeguarsi a qualunque cosa
venga fatta con il comando setserial
.
Potreste scoprire di avere installati sia il vecchio che il nuovo sistema di configurazione. Se lo script di shell si chiama "...pre-2.15" o simile, probabilmente non viene più usato così dovrebbe andare bene per voi conservarlo.
Prima della 2.15 non c'era un file di configurazione per setserial
.
Si doveva modificare lo script di shell che lanciava setserial in fase di avvio.
Dovete cercarlo o creane uno se non esiste. Dove si trovi dipende dalla vostra
distribuzione. Potrebbe essere un file chiamato "rc.serial". Nella distribuzione
Debian era il file 0setserial in /etc/rc.boot. Un modo per cercarlo è
usare il comando "locate".
Non dovreste modificare né il file che lancia setserial né quello di configurazione.
Le modifiche effettuate usando setserial
da riga comandi sono "talvolta" salvate in
/etc/serial.conf durante il normale spegnimento. Questa particolarità viene detta autosave.
(auto salvataggio). Funziona solo se la prima riga di serial.conf contiene ###AUTOSAVE### o
simile.
C'è un bug che ho riscontrato nella 2.15 ed è stato corretto (ma voi potreste ancora averlo) : con tale bug le modifiche effettuate da setserial e riferite ad opzioni raramente usate non vengono salvate. Solo i parametri più importanti che vedete se date il comando "setserial -g /dev/ttyS?" vengono salvate.
Se autosave è abilitato, allora ogni volta che si avvia il PC, setserial viene lanciato da /etc/init.d/setserial (o "serial" ecc.) usando la configurazione salvata.
isapnp
è un programma per configurare i dispositivi Plug-and-Play
(PnP) sul bus ISA inclusi i modem interni. È incluso in un pacchetto chiamato
"isapnptools" ed include un altro programma, "pnpdump" che trova tutti i
vostri dispositivi ISA PnP e vi mostra le opzioni per configurarli in un
formato che potrebbe essere aggiunto al file di configurazione di PnP:
/etc/isapnp.conf. Potrebbe anche essere usato con l'opzione --dumpregs
per mostrare l'indirizzo IO e l'IRQ della porta seriale del modem correnti.
Il comando isapnp potrebbe essere incluso in un file di avvio così che esso
sia lanciato ogni volta che si accende il computer e quindi configuri i
dispositivi ISA PnP. Si può fare questa anche se il vostro BIOS non supporta
il PnP. Vedere il Plug-and-Play-HOWTO.
wvdialconf
cercherà di trovare quale porta seriale ha un modem su di essa.
Crea anche un programma di configurazione per il programma wvdial. wvdial
È usato per semplificare le chiamate in uscita verso un ISP (Internet provider)
usando il protocollo PPP. Ma non avete bisogno di installare PPP per potere usare
wvdialconf
. Esso rileverà solo modem che non sono in uso. Concepirà anche
automaticamente una
stringa di inizializzazione "adatta" ma talvolta la creerà sbagliata. Visto che
il comando non ha opzioni, è semplice da usare ma dovete passargli il nome di un
file nel quale mettere la stringa di inizializzazione (ed altri dati).
Ad esempio digitate: wvdialconf miofile.
stty
è come setserial ma imposta il baud rate ed altri parametri della porta
seriale. Digitando "stty -a < /dev/ttyS2" dovreste visualizzare come è configurata ttyS2.
La maggior parte delle impostazioni sono per cose che non dovreste mai avere bisogno
di usare coi modem (tipo cose usate solo per terminali degli anni '70). Il vostro
pacchetto di comunicazione dovrebbe automaticamente impostare tutta la corretta
configurazione per i modem. Ma stty è talvolta utile per risolvere dei problemi.
Due valori impostati da stty sono: 1. Flusso di controllo hardware tramite "crscts" e 2. Ignorare il segnale DCD da modem: "clocal". Se il modem non sta inviando segnali DCD e clocal è disabilitato (stty mostra -clocal), allora un programma potrebbe non essere in grado di aprire la porta seriale. Se la porta non si può aprire il programma potrebbe bloccarsi, attendendo (spesso vanamente) per un segnale DCD dal modem.
Minicom imposta clocal automaticamente quando viene lanciato quindi non ci sono problemi. Ma la versione 6.0.192 di Kermit si pianta quando imposto -clocal e provo "set line...". Se -clocal è impostato e non c'è segnale DCD allora anche il comando "stty" si pianterà e non c'è modo di impostare clocal (a meno di lanciare minicom). Ma minicom reimposterà -clocal laddove esista. Un modo di uscire da questo è usare minicom per inviare "AT&C" al modem (per ottenere il segnale DCD), quindi uscire da minicom senza resettare così che il segnale DCD rimanga attivo. Poi si può riusare stty.X