Avanti Indietro Indice

8. Degli interessanti programmi di cui dovreste essere a conoscenza

8.1 Cos'è setserial ?

Introduzione

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.

Rilevazione (probing)

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.

Può Linux configurare i dispositivi seriali "automagicamente"?

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.

Configurazione in fase di avvio

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.

Nuovi metodi di configurazione usando /etc/serial.conf

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.

Vecchi metodi di configurazione: modificare uno script

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.

IRQ

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.

Dove lanciare Setserial?

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.

Versioni precedenti a 2.15

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".

Versioni 2.15 e superiori

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.

8.2 Cos'è isapnp ?

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.

8.3 Cos'è wvdialconf?

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.

8.4 Cos'è stty?

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


Avanti Indietro Indice