The Linux Modem-HOWTO David S.Lawyer Aiuto per selezionare, connettere, configurare, risolvere problemi e comprendere i modem in un PC. Vedere il Serial-HOWTO per dispositivi seriali multiporta. 1. Introduzione 1.1. Modem DSL, Cable e ISDN in altri HOWTO Questo documento riguarda i modem convenzionali per PC, principalmente modem sul bus ISA (sebbene la maggior parte del contenuto si possa applicare anche al bus PCI) · modem DSL: vedere il mini-howto ADSL · Cable-Modems-HOWTO (un tempo un mini-Howto di LDP) · ISDN Howto (non è un HOWTO di LDP) : driver per "Modem" ISDN. La maggior parte delle informazioni correlate sono in tedesco. 1.2. Non compresi: Modem PCMCIA, PPP Per i modem sul bus PCMCIA vedere il PCMCIA-HOWTO: dispositivi PCMCIA seriali e modem. Questo HOWTO non tratta PPP (usato per connettersi ad Internet via modem) o programmi di comunicazione. Mostra però come usare programmi di comunicazione per verificare che il vostro modem funzioni bene e possa eseguire delle chiamate telefoniche. Se volete usare un modem per connettervi ad Internet allora dovete impostare PPP. C'è parecchia documentazione per PPP (incluso un PPP-HOWTO) ma potrebbe essere obsoleta o non applicabile alla vostra situazione. Parte di questa potrebbe essere trovata in /usr/doc/ppp o simile. 1.3. Copyright, Liberatoria, Marchi registrati e Crediti 1.3.1. Copyright (in lingua originale) Copyright (c) 1998-99 di David S. Lawyer Please freely copy and distribute (sell or give away) this document. You may create derivative works and distribute it provided: 1. For a translation just let the maintainer know about it. 2. For a non-translation, discuss it with the maintainer (if it is being maintained). If after due deliberation no agreement with the maintainer can be reached, then you may proceed with the derivative work without the maintainer's approval. 3. Send your derivative work to the LDP (or the like) for posting on the Internet. If not the LDP, then let the LDP know where it is available. 4. License the derivative work in the spirit of this license or use GPL. 5. Give due credit to previous authors and major contributors. 1.3.2. Liberatoria Sebbene non ho l'intenzione di mettervi fuori strada, probabilmente ci sono parecchi errori in questo documento. Vi invito a farmeli notare. Poiché questa è documentazione libera, dovrebbe essere ovvio che io non posso essere ritenuto legalmente responsabile per qualsiasi errore. 1.3.3. Marchi registrati Se certe parole sono dei marchi registrati, il contesto dovrebbe mettere in evidenza a chi appartengono. Per esempio "MS Windows" (o semplicemente "Windows") implica che "Windows" appartiene a Microsoft (MS). "Hayes" è un marchio registrato dalla Microcomputer Products Inc. Uso "winmodem" per indicare qualsiasi modem che richiede MS- Windows e non nel senso di un marchio. 1.3.4. Crediti Quanto segue è solamente una rozza approssimazione di come è stata creata la versione 0.0 di questo documento: circa 1/3 del materiale qui presente è stato preso tale quale dal Serial HOWTO versione 1.11 di Greg Hankins (con il suo permesso). Circa un'altro terzo è stato preso sempre dal Serial HOWTO e revisionato. Il restante terzo è stato creato ex-novo dall'autore David S. Lawyer . 1.4. Contattare l'Autore Per favore non mandatemi e-mail chiedendomi quale modem acquistare o se un certo modem funzionerà sotto Linux. Cercate nella vasta lista in ``Evitare: winmodem''. Inoltre, per favore non chiedetemi come configurare un modem a meno che abbiate già scorso questo HOWTO e non ci siate ancora riusciti. Per favore fatemi sapere circa qualsiasi errore in fatti, opinioni, logica, grammatica, chiarezza, link, ecc. Ma per prima cosa, se la data è più vecchia di un mese, controllate di avere l'ultima versione. Per cortesia inviatemi qualsiasi altra informazione che pensate possa appartenere a questo documento. 1.5. Nuove versioni di questo HOWTO Nuove versioni del Modem-HOWTO escono ogni mese o quasi visto che la situazione dei modem va rapidamente cambiando (e visto che sto ancora imparando). I vostri problemi potrebbero essere risolti nell'ultima versione. Sarà disponibile da consultare e/o scaricare nei siti mirror di LDP. Per una lista di tali siti vedere . Se volete solo controllare velocemente la data dell'ultima versione potreste non volere usare un sito mirror, così controllate: . 1.6. Cos'è un Modem ? Un modem è un dispositivo che consente di inviare segnali digitali attraverso una normale linea telefonica non predisposta per segnali digitali. Se le linee telefoniche fossero tutte digitali un modem non sarebbe necessario. Esso consente al proprio computer di connettersi e comunicare con il resto del mondo. Quando si usa un modem, in genere si usa un programma di comunicazione, un browser web (che include un programma di comunicazione) per utilizzare il modem ed immettersi nella linea telefonica. Utenti esperti possono fare in modo che altri utenti siano in grado di connettersi tramite linea telefonica al loro computer ed usarlo. Questa procedura si chiama "dial-in". Ci sono due tipi principali di modem per un PC: esterni ed interni. Quelli esterni si collocano all'esterno del PC mentre quelli interni sono inseriti all'interno e non si vedono. I modem esterni si collegano al PC tramite una "porta seriale" situata nel retro del PC. Il modem interno è una scheda che si inserisce dentro al computer ed ha una "invisibile" porta seriale incorporata. Per un confronto più dettagliato vedere ``Esterno contro Interno''. Quindi quando si dispone di un modem interno, si dispone anche di una porta seriale dedicata (detta porta può quindi essere usata solo con il modem e non con qualsiasi altro dispositivo tipo un altro modem od una stampante). In Linux, le porte seriali sono chiamate ttyS0, ttyS1, etc. (e corrispondono in genere rispettivamente a COM1, COM2, etc. in Dos/Windows). Non si deve confondere la porta seriale con l'"Universal Serial Bus" (USB) che usa uno speciale connettore modulare e potrebbe essere usato con i modem in futuro. Vedere ``Modem e Porte seriali: Nozioni di base'' per ulteriori dettagli sui modem e le porte seriali. I modem spesso includono la capacità di inviare fax (Fax Modem). Vedere ``Fax'' per una lista di software per i fax. I "Voice" modem possono funzionare come una segreteria telefonica e gestire voicemail. Vedere ``Voicemail''. 1.7. Installazione rapida 1.7.1. Installazione di modem esterni Con un cavo passante o modem, connettere il modem ad una porta seriale del PC. Assicurarsi di conoscere il nome della porta seriale: nella maggior parte dei casi COM1 è ttyS0, COM2 è ttyS1 ecc. Potrebbe essere necessario consultare il menù delle impostazioni del BIOS per determinarlo. Collegare il cavo di alimentazione per dare corrente al modem. Vedere ``Per tutti i modem'' per successive istruzioni. 1.7.2. Modem interni (su bus ISA ) (Per il bus PCI vedere ``Bus PCI non ancora ben supportati'' e ``Modem PCI''.) Se il modem dice che funzionerà solo sotto MS Windows, siete sfortunati. Se si hanno già due porte seriali, rendete il modem quale terza porta seriale (ttyS2 = COM3). Cercare un numero di IRQ libero da usare. Nel passato IRQ5 era spesso non usato ma oggi IRQ 5 è usato anche dalle schede audio. Poi impostare i ponticelli ("jumper") (o simili) del modem interno all'IRQ libero e all'indirizzo di IO 3E8 (ttyS2). "O simili" (nella frase precedente) può essere un poco più difficile. Se il modem ha un Plug and Play (PNP) per il bus ISA, possiamo ovviare usando il programma "isapnp" che è incluso negli "isapnptools". Vedere "man isapnp" o la FAQ per esso. Vedere anche "Plug-and-play HOWTO". Con un BIOS PnP, dovreste essere in grado di dire al menù di impostazione del CMOS che non avete un sistema operativo PNP e successivamente il BIOS potrebbe impostare un corretto IRQ e indirizzo di I/O nella scheda del modem. Una volta credevo che se si configurava il modem sotto Windows 9x, allora Windows sarebbe stato gentile ed avrebbe messo le informazioni di configurazione (IRQ ed indirizzo IO) nella memoria flash del BIOS, così che sarebbero potute essere usate dal BIOS ogniqualvolta si faccia partire Linux. Ma potrebbe non accadere questo, quindi provate a farlo solo come ultima risorsa. Potreste provare ad usare l'utilità ICU sotto Windows. Potrebbe esserci anche il modo di disabilitare PnP usando del software (sotto Windows) provvisto con il modem. Infine si deve anche cercare il file dove viene lanciato "setserial" ed aggiungere una riga che potrebbe essere qualcosa come: "setserial /dev/ttyS2 irq5". Eccetto che per setserial v2.15 e successivi potreste (se la vostra distribuzione ve lo consente) semplicemente lanciare "setserial" da riga di comando ed il risultato sarà salvato in un file di configurazione. Vedere ``Cos'è setserial'' per maggiori informazioni. Vedere la successiva sottosezione ``Per tutti i Modem'' per ulteriori istruzioni per una veloce installazione 1.7.3. Per tutti i modem Collegare il modem alla linea telefonica. Poi lanciare un programma di comunicazione tipo minicom ed aprire il menu di configurazione per la porta seriale. Assegnare una velocità di trasmissione (baud rate) alcune volte maggiore del bit rate del proprio modem. Vedere ``Tabella delle velocità'' per la velocità ideale da usare. Fornire il nome completo della porta seriale tipo /dev/ttyS1. Impostare il controllo di flusso hardware (RTS/CTS). Ora occorre salvare le impostazioni ed uscire da minicom. Poi rilanciare minicom, digitare AT per vedere se il vostro modem è lì e risponde con OK. Poi portarsi nell'elenco dei numeri da selezionare (dial directory) (o menu) e comporre un numero. 2. Modem e porte seriali: nozioni di base Non occorre capire le fondamenta per usare ed installare un modem. Ma esserne a conoscenza può aiutare a capire cosa c'è che non va quando sorgono dei problemi. Dopo avere letto questa sezione, se si vuole approfondire, conviene consultare la sezione ``Come funzionano i modem'' in questo documento (ancora incompleta). Maggiori dettagli sulla porta seriale (inclusa la maggior parte di questa sezione) potrà essere trovata in Serial-HOWTO. 2.1. Il Modem converte da digitale ad analogico (e viceversa) La maggior parte delle principali linee telefoniche sono già digitali ma le linee che portano presso la vostra abitazione (o posto di lavoro) sono generalmente analogiche, il che vuol dire che sono state predisposte per trasmettere un'onda elettrica che è l'esatta replica dell'onda sonora generata dalla vostra voce. Un'onda elettrica di questo tipo è chiamata "analogica". Se vista in un oscilloscopio sembra una curva sinusoidale di varia frequenza ed ampiezza. Un segnale digitale assume invece una forma squadrata. Ad esempio 3 v (volt) potrebbe essere un bit con valore 1, e 0 v potrebbe corrispondere ad un bit di valore 0. Per la maggior parte delle porte seriali (usate dai modem esterni) +12 v equivale ad un bit 0, e -12 v ad un bit 1 (alcune porte hanno valori di + o - 5 v). Per inviare dati dal proprio computer attraverso la linea telefonica, il modem acquisisce il segnale digitale dal computer e lo converte in "analogico". Lo fa prima creando un'onda sinusoidale analogica, quindi "MODulandola". Visto che il risultato rappresenta comunque un dato digitale, potrebbe anche chiamarsi segnale digitale invece che analogico. Ma assomiglia ad un segnale analogico e quasi tutti lo chiamano analogico. Dall'altro capo della linea telefonica un altro modem "DEModula" questo segnale recuperando il segnale puro digitale originale. Mettete insieme l'inizio delle due parole sopracitate: "mod" e "dem" ed ecco l'origine della parola "modem" (ovviamente dovete togliere una delle due "d"). Un "modem" è quindi un MODulatore- DEModulatore. Per sapere cos'è la modulazione occorre consultare la sezione ``La modulazione in dettaglio''. 2.2. Cos'è una porta seriale? 2.2.1. Introduzione alla seriale La porta seriale è un dispositivo di I/O (Input/Output). Visto che i modem hanno una porta seriale frapposta tra loro ed il computer, è necessario conoscere la porta seriale così come il modem. La porta seriale è un dispositivo di IO (Inupt/Output). La maggior parte dei PC hanno due porte seriali. Ciascuna ha un connettore a 9 pin (talvolta a 25 pin) sul retro del computer. I programmi per computer possono inviare dati (byte) al pin di trasmissione (output) e ricevere dati dal pin di ricezione (input). Gli altri pin servono per controlli e per la messa a terra. La porta seriale è molto di più che un semplice connettore. Essa converte i dati da paralleli a seriali e cambia la rappresentazione elettrica dei dati. All'interno del computer, i bit di dati scorrono parallelamente (usando diversi cavi allo stesso tempo). Il flusso seriale è uno scorrere di dati attraverso un solo cavo (così come sul pin di trasmissione e ricezione del connettore seriale). Perché la porta seriale possa creare un flusso di questo tipo, deve convertire i dati da paralleli (all'interno del PC) a seriali (e viceversa). La maggior parte dell'elettronica della porta seriale si trova in un chip del computer (o in una sezione di un chip) conosciuto come UART. Per maggiori dettagli sugli UART consultare la sezione ``Cosa sono gli UART? In che modo influenzano le prestazioni?'' Ma potreste volere prima finire questa sezione, così da poter meglio capire come l'UART si pone all'interno dello schema globale delle cose. 2.2.2. Pin e cavi I vecchi PC usavano connettori a 25 pin ma in realtà se ne usano circa 9, per cui la maggior parte dei connettori attuali sono di soli 9 pin. Ognuno dei quali è generalmente connesso ad un cavo. Oltre ai due cavi usati per ricevere e trasmettere i dati, un altro pin (cavo) è la messa a terra. Il voltaggio di ogni cavo è misurato in relazione al cavo di terra. Quindi il numero minimo di cavi da usare per una trasmissione bilaterale di dati è 3. È possibile anche fare a meno del segnale di terra ma con degradate prestazioni e talvolta con errori. Ci sono altri cavi che servono per effettuare solo dei controlli (invio di segnali) e non per inviare byte. Tutti questi segnali potrebbero essere condivisi da un unico cavo, ma, al contrario, esiste un cavo separato dedicato ad ogni tipo di segnale. Alcuni (o tutti) questi cavi di controllo sono chiamati "linee di controllo del modem". Questi cavi di controllo sono impostati (on) a +12 volt oppure nello stato negativo (off) a -12 v. Uno di questi cavi segnala al computer di interrompere l'invio di dati attraverso la porta seriale. Al contrario, un altro cavo segnala al dispositivo connesso alla porta seriale di interrompere l'invio di dati al computer. Se il dispositivo connesso è un modem, altri cavi possono segnalare al modem di appendere la comunicazione o dire al computer che la connessione alla linea telefonica è stata effettuata o che il telefono sta squillando (cioè qualcuno sta tentando di connettersi). Vedere il Serial-HOWTO: Pinout and Signals per ulteriori dettagli 2.2.3. Il modem interno contiene una porta seriale Per un modem interno non si sono connettori a 9 pin, ma il comportamento è quasi esattamente come se i cavi summenzionati esistessero. Invece di un segnale a 12 volt attraverso un cavo che porta lo stato di una linea di controllo del modem, il modem interno usa semplicemente un bit di stato nella propria memoria (un registro) per determinare lo stato di questo cavo "virtuale". La porta seriale dei modem interno è vista dal computer proprio come una porta seriale reale. Ivi inclusi anche i limiti di velocità che si possono impostare nelle porte seriali ordinarie come ad esempio 115200 bit per secondo. Sfortunatamente per Linux molti modem interni attuali non funzionano esattamente in questo modo ma invece usano un software MS Windows che li aiuta a svolgere il proprio compito. Essi non funzionaneranno sotto Linux. Vedere ``Modem interni da evitare: Winmodem, ecc. ''. 2.3. Indirizzi IO & IRQ Poiché il computer deve comunicare con ciascuna porta seriale, il sistema operativo deve sapere che ciascuna porta seriale esiste e dove essa si trovi (il suo indirizzo di I/O). Esso deve anche conoscere quale cavo (numero di IRQ) deve usare la porta seriale per richiedere i servizi della CPU del PC. Quindi ogni dispositivo di porta seriale deve immagazzinare nella propria memoria non volatile sia l'indirizzo di I/O che il suo Interrupt reQuest Number: IRQ. Vedere ``Interrupt''. Il bus PCI non funziona esattamente in questo modo visto che il bus PCI ha il suo proprio sistema di interrupt. Ma, visto che il BIOS che riconosce il PCI imposta i chip per mappare questi interrupt PCI come IRQ, praticamente si comporta proprio come descritto qui sopra ad eccezione del fatto che la condivisione degli interrupt è concessa (2 o più dispositivi possono usare lo stesso numero di IRQ). Gli indirizzi I/O non sono uguali agli indirizzi di memoria. Quando un indirizzo I/O viene immesso nel bus indirizzi (address bus) del computer, un altro cavo viene elettrificato. Questo dice sia alla memoria principale di ignorare l'indirizzo, che a tutti i dispositivi che hanno indirizzi I/O (come le porte seriali) di controllare quell'indirizzo per vedere se combacia con quello del dispositivo. Se c'è corrispondenza, allora il dispositivo di I/O legge il dato sul bus dati. 2.4. Nome: ttyS0, ttyS1, ecc. Le porte seriali sono etichettate come ttyS0, ttyS1, ecc. (generalmente corrispondenti a COM1, COM2, ecc. in DOS/Windows). La directory /dev ha un file speciale per ogni porta. Digitate "ls /dev/ttyS*" per vederli. Il fatto che possa esistere (ad esempio) un file ttyS3, non significa necessariamente che esista anche una corrispondente porta seriale fisica. Quale di questi nomi (ttyS0, ttyS1, ecc.) si riferisca a quale porta seriale viene determinato come segue. Il driver seriale (software) mantiene una tabella che mostra quale indirizzi I/O corrisponde a quale ttyS. Questa mappatura di nomi (tipo ttyS1) riferita a indirizzi I/O (e IRQ) può essere sia impostata che verificata dal comando "setserial". Vedere ``Cos'è Setserial''. Questo non imposta gli indirizzi di IO e di IRQ sull'hardware stesso (che è impostato invece dai ponticelli o tramite software plug-and- play). Quindi quale porta fisica corrisponda ad esempio a ttyS1 dipende sia da quello che il driver della seriale pensa (tramite setserial) che da quello che è impostato nell'hardware. Se viene fatto un errore, la porta fisica potrebbe non corrispondere ad alcun nome (tipo ttyS2) e quindi con può essere usata. Vedere ``Dispositivi di porta seriale /dev/ttyS2, ecc.'' per ulteriori dettagli. 2.5. Interrupt I byte entrano dalla linea telefonica al modem, sono converiti da analogico a digitale dal modem, quindi passati attraverso la porta seriale verso la loro destinazione all'interno del vostro computer. Quando la porta seriale riceve un certo numero di byte (potrebbe essere impostata a 1, 4, 8 o 14) nel suo buffer FIFO, segnala alla CPU di recuperarli inviando un segnale elettrico noto come interrupt su di certo cavo generalmente usato solo da quella porta. Quindi il FIFO attende un certo numero di byte quindi genera un interrupt. Comunque questo interrupt potrebbe anche essere inviato se c'è un inaspettato ritardo mentre si attende l'arrivo del prossimo byte (conosciuto come timeout). Quindi se i byte sono ricevuti lentamente (come ad esempio se qualcuno digita su una tastiera di terminale) potrebbe essere generato un interrupt per ogni byte ricevuto. Per alcuni chip UART la regola è questa: se si possono ricevere 4 byte di seguito, ma nessuno di questi 4 arriva, allora la porta smette di aspettare altri byte ed invia un interrupt per recuperare i byte attualmente nel FIFO. Naturalmente, se il FIFO è vuoto, non verrà inviato nessun interrupt. Ogni interrupt (all'interno del computer) è contraddistinto da un numero (IRQ) e la porta seriale deve sapere quale conduttore usare per inviare il segnale. Ad esempio, ttyS0 normalmente usa l'IRQ n. 4 conosciuto come IRQ4 (o IRQ 4). Una lista di questi interrupt ed altro può essere trovata in "man setserial" (cercare "Configuring Serial Ports"). Gli interrupt sono inviati ogniqualvolta la porta seriale necessiti di ricevere l'attenzione della CPU. È importante fare questo periodicamente poiché il buffer all'interno della porta seriale può trattenere solo 16 (1 nelle vecchie porte seriali) byte in arrivo. Se la CPU non riesce a rimuovere prontamente i byte ricevuti, poi non esiste più spazio libero per gli altri che stanno arrivando ed il piccolo buffer potrebbe sovraccaricarsi generando una perdita di byte di dati. Per un modem esterno non c'è nessun modo (tipo controllo di flusso) per interrompere il flusso abbastanza rapidamente da prevenire questo. Per un modem interno il buffer FIFO a 16 byte si trova sulla stessa scheda ed un buon modem non ci andrà a scrivere se questo è pieno. Quindi un buon modem interno non sovraccaricherà il buffer da 16 byte ma potrebbe avere bisogno di usare ``Controllo di flusso da modem a modem'' per evitare che il modem stesso vada in sovraccarico. Questo rappresenta un vantaggio del modem interno rispetto ad un esterno. Gli interrupt sono inviati anche quando la porta seriale ha appena mandato 16 dei suoi byte dal piccolo buffer di trasmissione verso il cavo esterno. In questo modo si fa spazio per 16 successivi byte da inviare all'esterno. L'interrupt notifica alla CPU il fatto così che si possano immettere ulteriori byte nel piccolo buffer di trasmissione per essere inviati. Ancora, quando una linea di controllo del modem cambia il proprio stato, viene inviato un interrupt. I buffer sopra menzionati sono tutti buffer hardware. La porta seriale ha anche degli ampi buffer nella memoria principale. Questo verrà spiegato più tardi. Gli interrupt veicolano molte informazioni ma solo indirettamente. L'interrupt propriamente detto semplicemente dice ad un chip chiamato interrupt controller che una certa porta seriale necessita attenzione. L'interrupt controller poi invia il segnale alla CPU. La CPU attiva uno speciale programma per servire la porta seriale. Il programma viene chiamato routine di servizio di interrupt (interrupt service routine) che è parte del software del dispositivo seriale. Esso cerca di scoprire cosa è successo alla porta seriale, quindi svolge il compito come ad esempio il trasferimento di byte da (per) il buffer hardware della porta. Questo programma può facilmente scoprire cosa è accaduto poiché la porta seriale ha dei registri che puntano indirizzi di I/O conosciuti dal software del driver seriale. Questi registri contengono informazioni sullo stato della porta seriale. Il software legge questi registri e ispezionandone il contenuto, scopre cosa è accaduto, quindi esegue l'azione appropriata. 2.6. Compressione di dati (da parte del Modem) Prima di continuare con le nozioni di base sulla porta seriale, occorre capire una certa cosa fatta dal modem: la compressione dei dati. In alcuni casi questo compito è in realtà svolto dal software gestito dalla CPU del computer ma, sfortunatamente, al momento attuale questo software funzione solamente in ambiente MS Windows. Ci occuperemo quindi del caso in cui il modem stesso esegue la compressione poiché questo è quello che accade così che il modem possa funzionare in ambiente Linux. Per inviare dati più velocemente attraverso le linee telefoniche uno potrebbero comprimere (codificare) i dati usando uno schema di codifica personalizzato, che esso stesso dipende dai dati. Il dato codificato è più piccolo dell'originale (meno byte) e può essere inviato attraverso Internet in minore tempo. Questo processo è chiamato "compressione di dati". Se scaricate file da Internet, essi sono probabilmente già compressi e non è possibile per il modem tentare di comprimerli ulteriormente. Il vostro modem può riconoscere che quelli che stanno transitando sono dati già compressi ed astenersi dal tentare di comprimerli ancora. Se state ricevendo dati che sono stati già compressi dall'altro modem, il vostro modem li decomprimerà e creerà molti più byte di quelli che sono stati spediti attraverso la linea telefonica. Quindi il flusso di dati dal vostro modem all'interno del vostro computer sarà maggiore di quello dalla linea telefonica verso di voi. Il rapporto di questo flusso viene chiamato rapporto di compressione. Rapporti di compressione superiori a 4 sono possibili, ma non molto probabili. 2.7. Correzione d'errore Analogamente alla compressione dati, i modem potrebbero essere impostati per eseguire una correzione d'errore. Sebbene questo comporti un abbassamento del flusso di byte/secondo, il fatto che questa correzione d'errore tolga i bit di inizio e fine in realtà accresce il flusso di bit/secondo. Per l'interfaccia della porta seriale con il mondo esterno, ogni byte composto da 8 bit ha 2 ulteriori bit aggiunti ad esso: un bit di inizio e un bit di stop. Senza la correzione di errore, questi bit di inizio e stop extra generalmente passano attraverso il modem verso la linea telefonica. Ma quando la correzione d'errore è attivata, questi bit extra sono eliminati e i byte di 8 bit sono composti in pacchetti. Questo è più efficiente e genera un flusso di bit/secondo più alto a dispetto del fatto che c'è qualche ulteriore byte aggiunto per l'intestazione dei pacchetti e per la correzione degli errori 2.8. Flusso di dati (velocità) I dati (byte che rappresentano caratteri, immagini, ecc.) passano dal vostro computer al vostro modem, quindi all'esterno verso la linea telefonica (e viceversa). I rapporti di flusso (come ad esempio 56k (56000) bit/secondo) sono chiamati (non correttamente) "velocità". Ma quasi tutti dicono "velocità" al posto di "rapporto di flusso". Se non c'è compressione di dati il rapporto di flusso dal computer al modem dovrebbe essere circa lo stesso di quello che passa attraverso la linea telefonica. In realtà ci sono due differenti velocità da considerare al vostro capo della linea telefonica. · La velocità della linea telefonica stessa (velocità DCE) da modem- a-modem · La velocità dalla porta seriale del vostro computer al vostro modem (velocità DTE) Quando si compone un numero per connettersi ad un altro modem all'altro capo della linea telefonica, il vostro modem spesso visualizza un messaggio tipo "CONNECT 28800" oppure "CONNECT 115200". Cosa significa?. Bè, potrebbe essere sia la velocità DCE che quella DTE. Se essa è maggiore di quella delle specifiche del modem, allora deve trattarsi della velocità da-modem-a-computer (DTE). Questo è l'esempio di "CONNECT 115200" mostrato in precedenza. 28800 deve trattarsi invece della velocità da-modem-a-modem (DCE) visto che la porta seriale non ha questa velocità. Si potrebbe configurare il modem perché possa visualizzare entrambe le velocità. Alcuni modem visualizzano entrambe le velocità e visualizzano la velocità da modem- a-modem come (ad esempio): CARRIER 28800 Se avete un modem interno non vi aspettereste che ci sia un limite di velocità DTE dal vostro modem al vostro computer visto che il modem risiede all'interno del computer ed è praticamente una parte di esso. Ma questo limite c'è visto che il modem contiene al suo interno una porta seriale dedicata. È importante capire che la velocità media è spesso minore di quella specificata, specialmente nella corta linea DTE (dal computer a modem). Attese (o tempi morti) generano una minore velocità media. Queste attese possono essere lunghe attese di forse un secondo a causa del ``Controllo di flusso''. Di contro le attese possono anche essere molto brevi (tempi morti) corrispondenti a diversi micro-secondi che separano la fine di un byte e l'inizio dell'altro. In più, i modem passano a velocità inferiori se le condizioni della linea telefonica sono meno che perfette. Per una discussione riguardo quale sia la migliore velocità DTE vedere la sezione ``Quale velocità dovrei usare''. 2.9. Controllo di flusso Il controllo di flusso è la capacità di fermare il flusso dei byte in un cavo. Deve anche provvedere a fare ripartire il flusso senza perdere byte. Il controllo di flusso è necessario ai modem per consentire un salto nei rapporti di velocità. 2.9.1. Esempio di controllo di flusso Ad esempio, consideriamo il caso in cui voi connettiate il vostro modem esterno a 36.6k tramite un corto cavo alla vostra porta seriale. Il modem invia e riceve byte attraverso la linea telefononica e 36.6k bit per secondo (bps). Non esegue nessuna compressione dati o correzione di errore. Voi avete impostato la velocità della porta seriale a 115,200 bit/secondo (bps) e state inviando dati dal vostro computer alla linea telefonica. Quindi il flusso dal vostro computer al vostro modem attraverso il corto cavo è di 115.2k bps. In ogni caso il flusso da modem verso la linea telefonica è solo di 33.6k. Visto che il flusso di dati (115.2k) sta entrando nel modem più velocemente del flusso di dati in uscita, il modem deve conservare il flusso in eccesso (115.2k -33.6k = 81.6k) in uno dei suoi buffer. Questo buffer andrebbe fatalmente in sovraccarico (esaurirebbe lo spazio a disposizione) a meno che il flusso a 115.2k venga interrotto. Ecco che il controllo di flusso viene in soccorso. Quando il buffer del modem è quasi pieno, il modem invia un segnale di stop alla porta seriale. La porta seriale passa il segnale di stop al device driver ed il flusso a 115.2k bps viene fermato. Intanto il modem continua ad inviare dati a 33.6k bps recuperando i dati precedentemente accumulati nei suoi buffer. Visto che ora non sta arrivando niente nel buffer, il livello di byte inizia a diminuire. Quando non sono rimasti che pochi byte nel buffer, il modem invia un segnale di partenza alla porta seriale ed il flusso a 115.2k dal computer al modem riprende. In effetti, il controllo di flusso crea un rapporto di flusso medio (in questo caso 33.6k) che è significativamente inferiore a quello in entrata di 115.2k bps. Questo è il controllo di flusso "start-stop". Quello di cui sopra è un semplice esempio di flusso di controllo per il flusso da computer al modem, ma esiste anche il controllo di flusso usato nella direzione opposta: dal modem (od altro dispositivo) al computer. Ogni direzione di flusso coinvolge 3 buffer: 1. quello nel modem 2. quello nel chip UART (detto FIFO) 3. nella memoria principale, gestito dal driver seriale. Il controllo di flusso protegge alcuni buffer dal rischio di sovraccarico. I piccoli buffer UART FIFO non sono protetti in questo modo ma dipendono invece da una veloce risposta agli interrupt che essi generano. FIFO significa "First In First Out" (il primo che entra è il primo che esce) e rappresenta quindi il modo in cui vengono gestiti i byte. Tutti e 3 i buffer usano la regola FIFO ma solo uno di essi si identifica anche con questo nome. Questa è l'essenza del controllo di flusso ma ci sono ancora ulteriori dettagli. Non dovreste averne bisogno spesso del controllo di flusso nella direzione modem - PC. Per un complesso esempio di un caso dove è richiesto vedere "Complex Flow Control Example" nel Serial-HOWTO. Ma se non avete una velocità impostata tra il modem ed il computer (velocità della porta seriale) sufficientemente alta, allora dovrete rallentare il flusso dal modem al PC. Per fare questo dovete fermare l'incombente flusso di byte dalla linea telefonica. Il vostro modem deve dire all'altro modem di interrompere l'invio. Vedere ``Controllo di flusso da-modem-a-modem'' 2.9.2. Controllo di flusso hardware contro il controllo di flusso software Se possibile, è meglio usare il flusso di controllo "hardware" che usa due linee dedicate di controllo del modem per inviare i segnali di "stop" e "start". I modem moderni usano quasi sempre il controllo di flusso hardware tra il modem e la porta seriale Il controllo di flusso software usa le linee principali di ricezione e trasmissione per inviare i segnali di start e stop. Usa i caratteri di controllo ASCII DC1 (start) e DC3 (stop) a questo scopo. Essi sono semplicemente inseriti nel regolare flusso di dati. Il controllo di flusso software è non solo più lento nel reagire ma anche non consente l'invio di dati binari a meno di prendere speciali preacauzioni. Visto che è probabile che dati binari possano contenere DC1 e DC3, particolari accorgimenti devono essere presi per distinguere tra un DC3 che significa uno stop del controllo di flusso ed un DC3 che è parte del codice binario. La stessa cosa per DC1. Per far funzionare il controllo di flusso software con i dati binari occorre il supporto sia del modem (hardware) che del software. 2.9.3. Sintomi della mancanza di un controllo di flusso Conoscere la teoria del controllo di flusso può essere di uso pratico. Per esempio usavo il mio modem per accedere ad Internet e tutto sembrava funzionare bene. Ma dopo alcuni mesi ho provato ad inviare un grosso file dal mio PC al ISP ottenenendo un grande numero di errori e ritrasmissioni (ma alla fine con Kermit sono riuscito a spedire un grosso file dopo parecchi tentativi). La ricezione nell'altra direzione (dal ISP a me) funzionava bene. Il problema risultò essere nella disabilitazione del controllo di flusso. Il buffer del mio modem si sovraccaricava durante l'invio di grossi file visto che nessun segnale di "stop" era mai inviato al computer per interrompere l'invio di dati al modem. Non c'erano problemi nella direzione dal modem al mio computer visto che la capacità (diciamo 115.2k) era sempre superiore del flusso attraverso la linea telefonica. La risoluzione consistette nell'abilitare il controllo di flusso inserendo un comando di attivazione del controllo di flusso nella stringa di inizializzazione del modem (avrebbe dovuto essere abilitato per default ma qualcosa era andato storto). 2.9.4. Controllo di flusso da-modem-a-modem Questo è il controllo di flusso dei dati inviati attraverso le linee telefoniche tra due modem. In pratica, esso esiste solo quando è attivata la correzione di errori. In verità, anche senza correzione di errore è possibile attivare il controllo di flusso software tra modem, ma esso potrebbe interferire con l'invio di dati binari così non viene usato spesso. 2.10. Il percorso del flusso di dati; Buffer Sebbene sia stato detto molto in proposito, tra cui il controllo di flusso, un paio di buffer FIFO a 16 byte nelle porte seriali (nell'hardware) ed un paio di buffer più ampi all'interno del modem, esistono ancora un altro paio di buffer. Essi sono degli ampi buffer (forse di 8k) nella memoria principale conosciuti anche come buffer di porta seriale. Quando un programma applicativo invia byte alla porta seriale (e al modem), essi vengono posti prima nel buffer di trasmissione della porta seriale nella memoria principale. La coppia consiste in questo buffer di trasmissione ed in quello di ricezione per il flusso di byte dalla parte opposta. Il device driver seriale estrae diciamo 16 byte dal buffer di trasmissione, un byte alla volta e li mette nel buffer di trasmissione da 16 byte della porta seriale per la trasmissione. Una volta in questo buffer, non c'è modo di impedire che essi vengano trasmessi. Essi sono poi inviati al modem che dispone anch'esso di un buffer di dimensioni adeguate (diciamo 1k). Quando il device driver (che riceve ordini dal controllo di flusso) interrompe il flusso dei byte in uscita dal computer, interrompe in realtà il flusso di byte in uscita dall'ampio buffer di trasmissione della memoria principale. Anche dopo che questo è accaduto ed il flusso verso il modem è stato fermato, un programma applicativo può continuare a spedire i byte presenti nel buffer da 8k fino a che esso non si riempie. Quando è pieno, il programma applicativo non può inviargli ulteriori byte (un istruzione di scrittura "write" in un blocco di programma in C) e l'applicazione si interrompe temporaneamente ed attende fino a che si libera un poco di spazio nel buffer. Quindi uno stop esercitato dal controllo di flusso è in definitiva capace di fermare il programma che sta inviando i byte. Anche se questo programma si interrompe il computer non smette necessariamente di elaborare. Potrebbe passare ad eseguire altri processi mentre sta aspettando causa lo stop del controllo di flusso. Quello suindicato era un esempio ultrasemplificato visto che un'altra alternativa è quella di fare sì che il programma applicativo stesso faccia qualcosa d'altro mentre sta attendendo di "scrivere" 2.11. I comandi del modem I comandi al modem sono inviati ad esso dal programma di comunicazione attraverso lo stesso conduttore usato per inviare dati. I comandi sono delle brevi stringhe ASCII. Esempi sono "AT&K3" per abilitare il controllo di flusso hardware (RTS/CTS) tra il computer ed il modem; e "ATDT5393401" serve per comporre il numero 5393401. Notate che tutti i comandi sono prefissati da "AT". Alcuni comandi come l'attivazione del controllo di flusso aiutano a configurare il modem. Altri comandi come il comporre un numero fanno veramente qualcosa. Ci sono circa un centinaio di differenti possibili comandi. Quando il vostro software di comunicazione parte, lancia una stringa di inizializzazione "init string" composta da comandi al modem per configurarlo. Tutti i comandi sono inviati sulla linea ordinaria dei dati prima che il modem componga un numero (o riceva una chiamata). Una volta che il modem è connesso ad un altro modem (modo on-line), tutto quello che il vostro computer manda al vostro modem va direttamente verso l'altro modem e non è interpretato dal modem come un comando. C'è un modo per "fuggire" da questo modo operativo e tornare al modo comandi dove tutto quello che viene inviato al modem viene interpretato come un comando. Il computer invia semplicemente "+++" con un determinato periodo di tempo prima e dopo questo "+++". Se lo spazio temporale è corretto, il modem si pone in modo comandi. Un altro modo di fare questo è tramite un segnale ad una certa linea di controllo del modem. Ci sono svariate liste dei comandi modem su Internet. La sezione ``Siti Web'' ha dei collegamenti ad un paio di questi siti. Diversi modelli e marche di modem non usano esattemente lo stesso gruppo di comandi. Così quello che va bene per un modem potrebbe non andare bene per un altro. Alcuni comandi comuni (non si garantisce che funzionino su tutti i modem) sono elencati in questo HOWTO nella sezione ``Altri comandi modem'' 2.12. Software seriale: il modulo del device driver Il device driver per la porta seriale è il software che fa funzionare la porta seriale. Viene ora fornito come modulo seriale. Questo modulo viene generalmente caricato automaticamente se necessario. Il kernel 2.2+ farà questo. Nei kernel precedenti, dovete avere kerneld in esecuzione per far sì che i moduli si autocaricano su richiesta. Altrimenti il modulo seriale necessita di essere esplicitamente elencato in etc/modules. Prima che i moduli divenissero popolari con Linux, il driver seriale era generalmente costruito all'interno del kernel. Se esso è ancora incorporato nel kernel (potreste avere selezionato questa opzione quando avete compilato il kernel) non lasciate che il modulo seriale venga caricato. Se lo fate finirete con avere due driver, viene rilevato che non potete usare le porte seriali ed otterrete un errore "I/O error" se tentate di aprirle. Quando il modulo seriale è caricato, visualizza un messaggio sullo schemo circa l'esistenza di porte seriali (spesso mostrando un IRQ errato). Ma una volta che il modulo è usato da setserial per dire al device driver qual'è l'IRQ corretto, allora dovreste vedere una seconda schermata con il corretto IRQ, ecc. Vedere ``Cos'è Setserial'' per ulteriori informazioni su setserial. Si potrebbe modificare il driver modificando il codice sorgente del kernel. La maggior parte del driver seriale si trova nel file serial.c. Per dettagli inerenti la scrittura di programmi per la porta seriale vedere Serial-Programming-HOWTO (attualmente in fase di revisione da parte di Vern Hoxie). 3. Configurare i Modem (inclusa la porta seriale) Se volete usare il modem solo in ambiente MS Windows/Dos, allora potete installare praticamente qualsiasi modem e tutto andrà bene. In un ambiente Linux non è in genere così facile a meno di usare un modem esterno. Tutti i modem esterni dovrebbero funzionare bene (anche se sono etichettati come "Plug and Play"), Ma anche la maggior parte dei nuovi modem interni sono Plug-and-Play (PnP) ed hanno porte seriali PnP. Potreste avere bisogno di usare il programma Linux "isapnp" per configurarle. Vedere il Plug-and-Play HOWTO per ulteriori informazioni. 3.1. Configurazione: introduzione Visto che ogni modem ha associata una porta seriale ci sono due parti da configurare in un modem: · Configurazione del modem stesso: eseguita dal programma di comunicazione · Configurazione della porta seriale del modem: eseguita solo in parte dal programma di comunicazione La maggior parte delle configurazioni di cui sopra (ma non necessariamente la maggior parte dello sforzo) sono svolte dal programma di cumunicazione che si usa con il modem come ad esempio minicom o seyon o dal PPP (in genere richesto se si usa un web browser). Se usate il modem per rendere disponibile il vostro computer dall'esterno, allora il programma getty che usate per presentare a chi si collega il prompt di login, sarà di aiuto nella configurazione. Vale a dire che per configurare il modem (e la maggior parte della porta seriale) dovete configurare il programma di comunicazione (o PPP o getty). Notate che non tutta la configurazione della porte seriale è fatta dal programma di comunicazione (o getty). La restante parte di configurazione è piuttosto semplice a dirsi (ma talvolta difficile a farsi). Consiste principalmente nell'impostazione dell'indirizzo IO della porta e del suo numero di IRQ. In effetti, il plug-and-play potrebbe impostare questi valori senza che voi dobbiate fare nulla. Ma c'è un serio problema: Linux (almeno fino ad inizio 1999) non supporta il plug-and-play molto bene. Questo può essere un difficile problema per voi. La prossima sezione riguarda la configurazione della porta seriale. 4. Configurare la porta seriale 4.1. Bus PCI non ancora supportati Il driver seriale del kernel 2.2 non contiene un supporto per il bus PCI. Ma gli attuali 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. 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: . I modem PCI sono ben standardizzati. Alcuni usano la memoria principale per l'I/O con il PC (ISA usa lo spazio di indirizzo di I/O per questo). Alcuni richiedono particolari abilitazioni dell'IRQ. L'output di "lspci" può aiutare a determinare se può essere supportato. Se i dettagli non sono troppo complessi, potrei cercarli e metterli qui in una successiva revisione. 4.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). 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 e per reimpostare l'interfaccia del terminale vicino al "normale" digitando qualcosa tipo ''stty sane''. Vedere anche il Serial-HOWTO sezione: "Stty". 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, così per questo possono pensarci loro. Con le porte seriali Plug-and-Play (spesso inserite in un modem interno), la situazione diventa più complessa. Ecco i casi in cui occorre eseguire una configurazione a basso livello (impostare gli indirizzi IRQ e IO): · Volete usare più di due porte seriali · Installazione di una nuova porta seriale (come nel caso di un modem interno) · Avete problemi con la porta seriale(i) Per i kernel 2.2+ dovreste essere capaci di usare più di due porte seriali senza configurare a basso livello, condividendo gi interrupt ma questo potrebbe essere altrettanto complicato 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 probabilmente 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. 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''. 4.3. Errori comuni commessi nel riconfigurare a basso livello Ecco alcuni degli errori più comuni che possono compiere: · comando setserial: Viene lanciato (senza l'opzione "autoconfig") e si pensa che abbia controllato l'hardware (non l'ha fatto). · 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. · /proc/interrupts: Quando il loro dispositivo seriale non è in uso essi non vedono lì i suoi interrupt ed erroneamente concludono che la porta seriale non può essere trovata (o che non abbia un interrupt impostato). · /proc/ioports: Si pensa che questa mostri la configurazione dell'hardware mentre mostra solo gli stessi dati (che possono anche essere errati) di setserial. 4.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). Usate shift-PagSu per vedere i messaggi dopo che sono passati sullo schermo. 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 esiste perché qualcuno ha incorrettamente impostato questo valore nel file di configurazione (o cose del genere). 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. 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 l'opzione autoconfig 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. 4.5. Quali sono l'indirizzo IO e l'IRQ correnti della mia porta seri­ ale? La sezione precedente indica come tentare di fare questo guardando i messaggi di avvio. Un titolo alternativo per questa sezione potrebbe essere "Altri modi di scoprire i vostri indirizzi IO e IRQ). Se disponete di informazioni sufficienti, allora potrebbe non essere necessario leggere 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 imposta e mostra). 2. Quello che in realtà è impostato nell'hardware. Potrebbe essere gli stessi. Se state avendo problemi (ed anche il programma di comunicazione non funziona) potrebbe significare che questi due valori non sono impostati allo stesso modo. In altre parole, questo significa 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 un possibile sovraccarico del buffer della porta seriale e in una risposta molto lenta. Vedere ``Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi''. Se ha tipo sbagliato di UART potrebbero esserci problemi. Per determinare se la coppia di IRQ-IO è identica dovreste cercare le risposte alle domande poste nelle seguenti due sottosezioni: 4.5.1. 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. 4.5.2. 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, guardate in /proc/pci o in /proc/bus/pci/devices. 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. 4.5.3. 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. 4.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). 4.6.1. 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. 4.6.2. 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. 4.6.3. 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. 4.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 4.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: · Usando un menù di impostazioni CMOS per un BIOS PnP (in genere solo per i modem esterni su ttyS0 (Com1) e ttyS1 (Com2)) · Lasciando che un BIOS PnP configuri automaticamente una porta seriale PnP Vedere ``Usare un BIOS PnP per configurare I0-IRQ'' · Non facendo nulla se avete sia una porta seriale PnP ed un sistema operativo Linux PnP (vedere Plug-and-Play-HOWTO). · Usando isapnp per una porta seriale PnP non-PCI · Usando pciutils (pcitools) per il bus PCI 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. 4.8.1. 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 ? '' 4.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'' 4.10. Altre configurazioni 4.10.1. 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). 5. Configurazione del modem (esclusa la porta seriale) 5.1. Comandi AT Così come per la porta seriale nella quale risiede un modem, anche il modem stesso richiede di essere configurato. Il modem si configura inviandogli dei comandi AT (o simili) sulla stessa linea seriale usata per inviare dati. Essi sono brevi e criptici comandi ASCII, tutte le stringhe di comando sono prefissate dalle lettere AT. Ad esempio: ATZ&K3. Qui ci sono due comandi: Z e &K3. Sfortunatamente ci sono molte diverse variazioni nel gruppo di comandi AT, così che quello che funziona per un modem potrebbe non funzionare per un altro. Quindi non vi è garanzia che i comandi AT dati in questa sezione funzioneranno per tutti i modem. Altro punto è che per far sì che il modem reagisca alla stringa di comando AT, deve essere inviato un carattere di ritorno a capo alla fine della stringa. Dette stringhe di comando vengono automaticamente inviate al modem dai programmi di comunicazione o sono inviate direttamente da voi. La maggior parte dei programmi di comunicazione forniscono una schermata nella quale potete digitare i comandi direttamente al vostro modem. Questo è comodo per impostare il modem com'è prima di spegnerlo senza dover ricordare ogni volta come lo si era impostato. Se avete un manuale per il vostro modem potrete probabilmente dare una scorsa al gruppo di comandi AT ivi indicati. Altrimenti potrete cercate di trovarli su Internet. Potreste usare un motore di ricerca ed includere alcuni reali comandi nella stringa di ricerca per evitare di cercare siti che parlano semplicemente di questi comandi ma dei quali non offrono una lista. Potreste anche provare alcuni dei siti riportati nella sottosezione ``Siti Web'' 5.2. Stringhe di inizializzazione: salvarle e richiamarle Gli esempi dati in questa sottosezione sono tratti dal gruppo di comandi AT Hayes. Tutte le stringhe di comando devono essere prefissate dalle due lettere AT (ad esempio: AT&C1&D3). Quando un modem viene acceso, si autoconfigura automaticamente con una delle configurazioni che ha salvate nella sua memoria non volatile. Se la configurazione è soddisfacente, non c'è altro da fare. Se non risulta soddisfacente, si potrebbe sia alterare la configurazione memorizzata o configurare il modem ogniqualvolta venga usato inviandogli un stringa di comandi nota come "init string" (stringa di inizializzazione). Generalmente un programma di comunicazione fa questo. Quello che invia dipende da come avete configurato il programma di comunicazione o quale script avete scritto per esso se usate Kermit. Potete in genere modificare la init string che il vostro programma di comunicazione usa e cambiarla come vi pare. Talvolta il programma di comunicazione vi consente di selezionare il modello del vostro modem, quindi userà una init string che pensa sia la più adatta per quel modem. La configurazione che il modem usa quando viene acceso per la prima volta potrebbe essere rappresentata da una init string. Potreste pensare a questa come una stringa di default (chiamata profilo). Se il vostro programma di comunicazione invia al modem un'altra stringa (l'init string), allora questa stringa modificherà la configurazione predefinita. Ad esempio se la init string contiene solo due comandi, allora solo queste due voci verranno cambiate. Comunque, alcuni comandi richiamano un profilo memorizzato all'interno del modem così che un singolo comando di questo tipo nella init string può di conseguenza cambiare tutta quanta la configurazione. I modem moderni hanno alcuni profili diversi memorizzati tra i quali scegliere che si trovano nella memoria non-volatile (rimangono lì anche quando spegnete il modem). Nel mio modem ci sono due profili impostati dalla ditta costruttrice (0 ed 1, nessuno dei quali può essere cambiato) e due profili definiti dall'utente (0 ed 1) che l'utente può impostare e memorizzare. Il vostro modem potrebbe averne di più. Quale di questi profili definiti dall'utente venga usato all'accensione depende da un altro valore memorizzato nel profilo. Se viene impartito il comando &Y0 allora verrà usato il profilo 0 alla prossima accensione. Se invece troviamo un 1 invece che uno 0 allora il profilo 1 sarà usato all'accensione. Ci sono anche comandi per richiamare (riusare) ciascuno dei 4 profili memorizzati. Uno potrebbe mettere un comando di questo tipo nella init string. Naturalmente se verrà richiamato lo stesso profilo così come è stato automaticamente caricato all'accensione, non cambia nulla a meno che il profilo attivo sia stato modificato dopo l'accensione. Visto che potrebbe essere stato modificato, è una buona idea usare una specie di init string anche se non fa null'altro che richiamare un profilo memorizzato. Per richiamare un profilo salvato (usate 1 invece che 0 per il profilo 1): Z0 recupera il profilo utente 0 e reimposta il modem (riappende, ecc.) &F0 recupera il profilo impostato dalla ditta costruttrice 0 Una volta inviati i comandi al modem per configurarlo nel modo che volete (incluso richiamare il profilo della casa costruttrice per poi modificarlo un poco), potreste volere salvare questo come profilo definito dall'utente: &W0 salva la configurazione corrente nel profilo utente La maggior parte della gente non si preoccupa di salvare una buona configurazione nei propri modem ma, invece, inviano al modem una stringa più lunga ogni volta che il modem viene usato. Un altro metodo consiste nel riprisitinare la configurazione di default della casa costruttrice all'inizio della stringa di inizializzazione, quindi modificarla leggermente aggiungendo qualche altro comando alla fine della init string. Agendo in questo modo, non c'è pericolo di modificare il profilo definito dall'utente che viene caricato all'accensione Si può anche scegliere una stringa di inizializzazione fornita da qualcun altro che sostenga che sia buona per il vostro modem ecc. Alcuni programmi di comunicazione hanno una libreria di stringhe di inizializzazione dalla quale scegliere. Il metodo più difficile (e quello che vi insegnerà di più riguardo ai modem) è studiare il manuale del modem e scrivere una stringa da soli. Potrete poi salvare questa configurazione all'interno del modem così che una stringa di inizializzazione non sarà necessaria. Una terza alternativa è iniziare con una stringa di inizializzazione che qualcun altro ha scritto, poi modificarla per adattarla alle vostre esigenze. Ora se guardate le init string usate dai programmi di comunicazione potreste vedere simboli che non sono comandi modem validi. Questi simboli sono comandi al programma di comunicazione stesso (tipo ~ che significa effettuare una breve pausa) e non sono inviati al modem 5.3. Altri comandi modem Una prossima edizione di questo HOWTO potrebbe contenere anche qualcosa di più su questo ma il resto di questa sezione è per la maggior parte quello che si trova nel vecchio Serial-HOWTO. Tutte le stringhe devono iniziare con AT. Ecco alcuni codici AT Heyes che dovrebbero essere nella stringa (se non sono stati impostati usando le impostazioni predefinite del costruttore o da una configurazione salvata) E1 eco comandi ON Q0 riporta i codici di risposta V1 verbose ON S0=0 non rispondere mai (uugetty fa questo con l'opzione WAITFOR) Ecco alcuni altri codici riguardanti il controllo delle linee DCD e DSR del modem: &C1 DCD attivato solo dopo la connessione &S0 DSR sempre attivato Questi riguardano quello che fa il vostro modem quando inizia o finisce una comunicazione. Si potrebbe impostare anche quallo che fa DTR ma è più complicato. Se il vostro modem non supporta un profilo salvato, lo potete impostare attraverso una stringa INIT in un file di configurazione (o simile). Alcuni vecchi modem hanno degli interruttori DIP che variano le impostazioni dei registri. Assicuratevi che siano impostati anch'essi correttamente. Greg Hankins ha una libreria di impostazioni modem per diversi tipi. Se volete inviargli la vostra configurazione di lavoro fatelo a: . Potete recuperare queste impostazioni a ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs. Note: perché il suo USR Courier V.34 si reinizializzi correttamente dopo che cade DTR, Greg Hankins ha dovuto impostare &D2 and S13=1 (questo imposta il bit 0 del registro S13). È confermato che la cosa vale anche per gli USR Sportster V.34. Nota: alcuni Supra trattano DCD in modo diverso rispetto agli altri modem. Se state usando un Supra, provate ad impostare &C0 e not &C1. Dovrete anche impostare &D2 per gestire DTR correttamente 6. Modem per un PC con Linux 6.1. Esterni contro interni Un modem per PC può essere sia esterno che interno. Quello interno è installato all'interno del vostro PC (dovete svitare viti ecc. per installarlo) e l'esterno semplicemente si attacca ad un connettore di porta seriale del vostro PC. I modem interni sono più economici, è meno probabile che vadano in sovraccarico, in genere consumano meno corrente e non occupano spazio sulla scrivania. I modem esterni sono molto più facili da installare, richiedono una configurazione minore ed hanno delle luci che possono darvi un'idea di quello che sta accadendo. I modem esterni sono facilmente spostabili da un PC all'altro. La maggior parte dei modem esterni non hanno un interruttore che spenga l'alimentazione quando non sono in uso e quindi probabilmente consumano corrente anche quando sono spenti (a meno di togliere la spina dalla presa di corrente nel muro). Ogni watt che consumano costa circa $1 per anno. Un altro possibile svantaggio di un modem esterno è che sarete forzati ad usare una porta seriale esterna già presente che magari non supporta velocità superiori ai 115.200k (sebbene nel tardo 1998 neanche la maggior parte dei modem interni lo fanno - ma alcuni sì). Se un nuovo modem interno ha una UART 16650 dovrebbe impegnare di meno la CPU (ma quasi nessuno lo fa a questo tempo - tardo 1998) I modem interni presentano un problema particolare per Linux, ma funzioneranno bene come quelli esterni a patto che voi evitiate quella grossa percentuale di essi che lavora solo sotto MS-WINDOWS ed anche a patto che poi usate un poco del vostro tempo (a volte molto tempo) per configurarli correttamente. Alcuni dei modem che funzionano solo sotto MS Windows sono, sfortunatamente, non etichettati come tali. Se ne comprate uno nuovo assicuratevi di poterlo restituire ed essere rimborsati se non funzionerà sotto Linux Visto che la maggior parte dei nuovi modem sono plug-and-play esistono diversi modi di "domarli": · Usare il programma "isapnp" · Far fare la configurazione al BIOS PnP · Modificare il kernel per creare un Linux PnP Ognuno dei metodi sopraindicati ha dei difetti. La documentazione di isapnp è difficile da comprendere sebbene la lettura del Plug-and-play HOWTO (attualmente incompleta), aiuti la comprensione. Se volete che la configurazione venga fatta dal BIOS PnP, tutto quello di cui avete bisogno è assicurarvi che esso sappia che non avete un sistema operativo PnP. Ma potrebbe non eseguire la configurazione correttamente. Per scoprire quello che ha fatto vedere ``Cos'è impostato nell'hardware della mia porta seriale ?'' Modificare il kernel potrebbe essere anch'esso complicato e potrebbe non esserci un patch per i kernel recenti. Ci sono diversi utenti Linux che dicono che è molto più semplice prendersi un modem esterno e collegarlo. Ma visto che la maggioranza delle nuove periferiche odierne è PnP, potreste alla fine comunque doverci mettere le mani, perché quindi non farlo subito? Comunque la soluzione di un modem esterno rimane la più conveniente (e più costosa), se avete una porta seriale libera. 6.2. Modem esterni 6.2.1. Modem esterni PnP Diversi modem esterni sono etichettati come "Plug and Play" (PnP) ma dovrebbero funzionare bene anche come modem non PnP. Visto che generalmente si attacca il modem ad una porta seriale che ha il suo numero di IRQ ed indirizzo IO, il modem non abbisogna di capacità PnP per impostarli. Comunque, la porta seriale stessa potrebbe dovere essere configurata (numero IRQ ed indirizzo IO) a meno che la configurazione predefinita non sia OK. Come si può definire un modem esterno PnP visto che non può essere configurato tramite PnP? Beh, c'è una speciale identificazione PnP al suo interno che può essere letta (attraverso la porta seriale) da un sistema operativo PnP. Un sistema operativo di questo genere dovrebbe quindi sapere che voi avete un modem e dovrebbe anche conoscere il numero di modello. Quindi non dovrete avere l'esigenza di configurare i programmi applicativi informandoli su quale porta risiede il modem (come /dev/ttyS2 o COM3). Ma se non avete uns sistema operativo PnP dovrete configurare la vostra applicazione manualmente fornendogli l'identificativo /dev (come ad esempio ttyS2). 6.2.2. Cablaggio ed installazione Connettere un modem esterno è semplice a confronto alla maggior parte degli altri dispositivi che si connettono ad una porta seriale e che necessitano di vari tipi di cavi "null modem". I modem usano cavi diretti, senza pin incrociati. La maggioranza dei negozi di computer ne sono forniti. Assicuratevi di avere il genere giusto. Se state usando delle seriali DB9 o DB25 sul vostro computer, il cavo sarà sempre maschio il che significa che il connettore sul cavo dovrebbe essere femmina. Attaccate il modem ad una delle vostre porte seriali. Se volete accettare l'IRQ e l'indirizzo IO predefiniti della porta alla quale lo connettete, allora siete pronti per lanciare il vostro programma di comunicazione e configurare il modem stesso 6.2.3. Cosa significano le luci? (LED) · TM Test Modem (prova modem) · AA Auto Answer (Se attivata, il vostro modem risponderà ad una chiamata in arrivo · RD Receive Data line = RxD (linea di ricezione dati) · SD Send Data line = TxD (linea di trasmissione dati) · TR Data Terminal Ready = DTR (impostatato da vostro PC) · RI Ring Indicator (indicatore di squillo - se attivato, qualcuno sta facendo "suonare" il vostro modem) · OH Off Hook (se disattivato, il vostro modem ha interrotto la comunicazione) · MR Modem Ready = DSR ?? (Modem pronto) · EC Error Correction (Correzione di errore) · DC Data Compression (Compressione dati) · HS High Speed (for this modem) (Alta velocità - per questo modem) 6.3. Modem interni Un modem interno viene installato in un PC togliendo il coperchio del PC ed inserendo la scheda modem in un alloggiamento libero della scheda madre. Ci sono modem per gli slot ISA ed altri per quelli PCI. Mentre i modem esterni si collegano attraverso la porta seriale (tramite un corto cavo), i modem interni hanno la porta seriale costruita al loro interno. In altre parole, la scheda modem è sia un modem che una porta seriale. Un tempo l'impostazione degli indirizzi IO e IRQ era effettuata con ponticelli sulla scheda. Essi erano dei "cubetti" neri rettangolari di circa 5x4x2 mm di dimensione che si attaccavano alla scheda tramite dei pin. I modem plug-and-play (in realtà la porta seriale che fa parte del modem) non usano ponticelli per impostarsi ma sono invece configurati inviando ad essi dei comandi di configurazione (tramite uno spazio di indirizzo IO sul bus ISA all'interno del computer). Tali comandi di configurazione possono essere inviati tramite il BIOS PnP, il programma isapnp (per i bus ISA solamente) o tramite un sistema operativo PnP. La configurazione dei modem è già all'interno di Windows 95/98. In Linux si ha una scelta di opzioni (nessuna delle quali è sempre facile) per configurare l'io-irq: 1. Usare "isapnp" che può essere lanciato automaticamente ad ogni avvio 2. Usare un BIOS PnP (che viene eseguito ad ogni accensione) 3. Modificare Linux per renderlo un sistema operativo PnP 6.4. Modem interni da evitare: Winmodem, ecc. La maggior parte dei modem interni prodotti dopo la metà del 1988 non funzionano con Linux visto che essi sono dei "Windows Modem" o simile. I nomi usati includono: HSP, HCF, e soft-... modem. Questi modem demandano molto (o quasi tutto il) lavoro del modem al chip del processore principale (CPU) del vostro computer (come ad esempio un chip Pentium). Visto che il software ad essi corredato è solo per Windows (e non per Linux), non funzioneranno sotto Linux. Una lista dei modem che funzionano e non funzionano sotto Linux si trova in Linux modem list Un termine migliore di "winmodem" potrebbe essere "software modem" oppure "soft-modem". Ma visto che questo software è solo per MS Windows, il termine "winmodem" è buono visto che implica anche che è "solamente per Windows". Ecco una più precisa terminologia relativa ai "winmodem": HSP (Host Signal Processor) significa che il processore ospitante (la vostra CPU) crea il codice necessario a produrre il segnale elettrico sulla linea telefonica. Il modem in sè crea semplicemente l'onda elettrica che la CPU gli dice di generare. Al contrario, un modem "controllerless" (senza controller) può creare le onde elettriche da solo (ma non può controllare il modem). Non include capacità per interagire con i byte che gli vengono inviati o che riceve. Non può comprimere stringhe di byte; non può controllare se esistono errori; non può confezionare i byte in pacchetti. In altre parole non può controllare il modem ed è la CPU che deve fare tutto il lavoro usando un programma per Windows. Il Rockwell HCF (Host Controlled Family) fa questo. Se il software che fa tutto ciò potrebbe essere portato sotto Linux, allora non dovrebbe esserci questo problema. Come determinare se un modem interno funzionerà sotto Linux? Se non conoscete il modello del modem ed avete anche Windows nel vostro PC Linux, fate click sull'icona del "Modem" nel "Pannello di Controllo". Prima verificate se il modem si trova nella lista nel Web menzionata 3 paragrafi sopra. Se questo non è possibile, potreste guardare la documentazione o il manuale cercando la sezione che dice qualcosa tipo "Minimum System Requirements" (Requisiti minimi di sistema) o semplicemente "System requirements" (Requisiti di sistema). Potrebbe essere scritta molto in piccolo. Leggetela attentamente. Se viene elencato Windows come uno dei requisiti allora molto probabilmente non funzionerà sotto Linux Altrimenti, probabilmente funzionerà sotto Linux se non è esplicitamente scritto che dovete avere Windows. La dicitura "studiato per Windows" potrebbe semplicemente significare che supporta pienamente il PnP Microsoft quindi va bene anche per Linux visto che usa le stesse specifiche PnP. "Studiato per Windows" quindi non fornisce nessun indizio sul fatto che non funzioni sotto Linux. Potreste controllare sul sito Web del produttore o chiedere informazioni via posta elettronica. Una volta ho visto una pagina web che esplicitamente affermava che un modello funzionava sotto Linux sottointendendo che un altro modello non lo faceva. Perciò che è a conoscenza dell'autore, non c'è nessun progetto attalmente in corso di supportare i "winmodem" sotto Linux. Potreste chiedere che i produttori di modem adattino il loro codice a Linux (o simile) 6.5. Che modem interni è meglio evitare? · ``Evitare winmodem'' o simili. NON funzionano assolutamente con Linux · ``Modem PCI'' raramente funzionano sotto Linux · ``Modem MWave e DSP'' potrebbero funzionare ma solo se lanciate per primo Windows/Dos ogni volta che accendete il computer · Modem con driver ``RPI (Rockwell)'' funzionano ma con prestazioni ridotte 6.5.1. Modem MWave e DSP Questi modem usano DSP (Processori di Segnale Digitale) che sono programmati con algoritmi che devono essere scaricati dall'hard disk alla memoria DSP appena prima di usare il modem. Sfortunatamente lo scarico viene fatto da programmi Dos/Windows che in Linux non girano. I modem normali che lavorano sotto Linux spesso hanno anche un DSP (e potrebbe essere specificato nella confezione) ma il programma che lo lancia risiede all'interno del modem. Questo non è un modem DSP nel senso inteso da questa sezione e dovrebbe funzionare sotto Linux. Un esempio di modem DSP è l'IBM Aptiva MWAVE. Se un modem DSP simula una porta seriale, allora si può usare con Linux che comunica col modem tramite porta seriale. Se avete anche dos/Windows sullo stesso PC, dovreste essere in grado di usare il modem: Per prima cosa installate il driver sotto DOS (usando i driver DOS e non Windows) Poi lanciate Dos/Windows (assicuratevi che il modem venga inizializzato) e poi senza spegnere il computer, passate a Linux. Per fare questo si potrebbe usare loadlin.exe che è un programma DOS che fa partire Linux da DOS (vedere il Config-HOWTO). Un altro modo è semplicemente premere CTRL-ALT-DEL. Il modem rimane sulla stessa porta com (stesso indirizzo IO) che è stato usato sotto DOS 6.5.2. Driver Rockwell (RPI) I modem che voglono i driver Rockwell RPI non sono completamente usabili visto che il software per i driver non gira sotto Linux. RPI esegue la compressione e la correzione degli errori usando il software MS Windows nella CPU del computer. Se vi va bene usare il modem senza RPI (non avere quindi compressione e correzione di errori), allora potreste disabilitare RPI inviando al modem (tramite stringa di inizializzazione) un comando per fare questo ogni volta che si accende il modem. Sul mio modem questo comando è +H0 Non avere la compressione dati potrebbe essere uno svantaggio abbastanza lieve visto che la maggior parte dei file che si scaricano da Internet sono già compressi e tentare di comprimerli ulteriormente rallenterebbe semplicemente le operazioni. 6.5.3. Modem PCI Una scheda modem PCI è quella che si inserisce in un alloggiamento bus PCI sulla scheda madre del PC. Sfortunatamente, sembra che la maggior parte dei modem PCI non funzioni sotto Linux ma sono in corso sforzi per supportare alcuni di essi vedere ``Bus PCI non ancora ben supportati'' 7. Dispositivi di porta seriale /dev/ttyS2, ecc. Per creare dispositivi nella directory dei dispositivi vedere il Serial-HOWTO: "Creating Devices In the /dev directory". 7.1. Nomi e numeri dei dispositivi di porta seriali I dispositivi in Linux hanno numeri primari e secondari. Ogni porta seriale può avere due possibili nomi, nella directory /dev: ttyS e cua. I loro driver si comportano in modo leggermente differente. Il dispositivo cua è disapprovato e potrebbe non essere più usato in futuro. Vedere ``Il device cua''. Dos/Windows usano il nome COM mentre il programma setserial usa tty00, tty01 ecc. Non confondete questi con dev/tty0, /dev/tty1, ecc. che sono usati per le console (il monitor del vostro PC) ma non sono porte seriali. I nomi dos (COM1, ecc.) e gli indirizzi IO sono mostrati sotto per i casi "standard" (ma i vostri potrebbero essere diversi). set- indirizzo dos serial prim. second. prim. second. IO COM1 tty00 /dev/ttyS0 4, 64; /dev/cua0 5, 64 3F8 COM2 tty01 /dev/ttyS1 4, 65; /dev/cua1 5, 65 2F8 COM3 tty02 /dev/ttyS2 4, 66; /dev/cua2 5, 66 3E8 COM4 tty03 /dev/ttyS3 4, 67; /dev/cua3 5, 67 2E8 Notate che tutte le distribuzioni dovrebbero avere dei dispositivi ttyS (e dispositivi cua fino a che cua venga definitivamente abolito). Potreste verificarlo digitando linux% ls -l /dev/cua* linux% ls -l /dev/ttyS* 7.2. Collegare con link ttySN a /dev/modem ? In alcune installazioni, saranno creati due dispositivi extra, /dev/modem per il vostro modem e /dev/mouse per il vostro mouse. Entrambi sono dei link simbolici agli appropriati dispositivi in /dev che avete specificato durante l'installazione (a meno che non abbiate un bus mouse, allora /dev/mouse punterà al dispositivo del bus mouse). Ci sono state alcune discussioni riguardo a /dev/mouse e /dev/modem. L'uso di questi link è sconsigliato. In particolare, se state pensando di usare il vostro modem per ricevere chiamate potreste avere problemi perché i file di lock potrebbero non funzionare correttamente se usate /dev/modem. Usateli se volete, ma siate sicuri che puntino al dispositivo giusto. Comunque, se cambiate o eliminate questi link, alcune applicazioni potrebbero necessitare di una riconfigurazione. 7.3. Creare dispositivi nella directory /dev Se non avete un dispositivo, potrete crearlo con il comando mknod. Ad esempio, supposto che dobbiate create dispositivi per ttyS0: linux# mknod -m 666 /dev/cua0 c 5 64 linux# mknod -m 666 /dev/ttyS0 c 5 64 Potete poi usare lo script MAKEDEV che si trova in /dev. Vedere per questo la pagina di manuale. Questo semplifica la creazione dei dis­ positivi. Ad esempio. Se volete create dispositivi per ttyS0 digitate: linux# cd /dev linux# ./MAKEDEV ttyS0 Questo gestisce la creazione dei dispositivi e dovrebbe impostare i permessi correttamente 7.4. Il dispositivo cua Ad ogni dispositivo ttyS corrisponde un dispositivo cua. Ma il dispositivo cua sta per essere abolito così è meglio usare ttyS (a meno che cua sia richiesto). C'è differenza tra cua e ttyS ma un programmatore previdente può fare sì che una porta ttyS si comporti esattamente come una porta cua, così non c'è più realmente bisogno di cua. A meno che alcuni vecchi programmi non richiedano l'uso di cua. Qual'è la differenza? La differenza principale tra cua e ttyS si riferisce a quanto succede in un programma C quando un normale comando "open" cerca di aprire la porta. Se una porta cua è stata impostata per controllare i segnali di controllo del modem, la porta potrebbe essere aperta anche se il segnale di controllo DCD del modem dice che non è vero. Una astuta programmazione (aggiungendo lineee addizionali al programma) può forzare una porta ttyS a comportarsi anch'essa in questo modo. Ma una porta cua può essere ancora più facilmente programmata per aprirsi per comporre una chiamata in uscita anche quando il modem non riesce ad identificare DCD (visto che nessuno ci ha chiamato e non c'è portante). Ecco perché cua era una volta usata per chiamate in uscita e ttyS era usata per chiamate in entrata. A partire dal kernel 2.2, un messaggio di avvertimento verrà immesso nel log del kernel quando si usa cua. Questo è il presagio che cua fra un poco sparirà. 8. Degli interessanti programmi di cui dovreste essere a conoscenza 8.1. Cos'è setserial ? 8.1.1. 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 val­ ori impostati per se stesso. Infatti, potete lanciare setserial asseg­ nando 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 ogni­ qualvolta Linux viene caricato. 8.1.2. 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. 8.1.3. 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. 8.1.4. 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. 8.1.4.1. 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. 8.1.4.2. 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. 8.1.5. 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. 8.1.6. 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. 8.1.6.1. 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". 8.1.6.2. 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 9. Provare il modem (Effettuare una chiamata) 9.1. Siete pronti per effettuare una chiamata? Una volta che avete collegato il vostro modem e sapete quale porta seriale è attiva, siete pronti ad usarlo. Prima di provare ad accedere ad Internet o consentire che altri si colleghino al vostro computer, provate prima qualcosa di più semplice come chiamare alcuni numeri per vedere se il vostro modem funziona bene. Se non sapete che numero chiamare, chiedete nei negozi di computer dei numeri di banche dati, ecc. oppure vedete se una libreria locale ha un numero di telefono per il suo catalogo in linea. Poi assicuratevi di essere pronti a telefonare. Sapete su quale porta seriale (tipo ttyS2) si trova il vostro modem? Avreste dovuto scoprirlo quando avete configurato l'io-irq della vostra porta seriale. Avete deciso quale velocità userete per questa porta? Vedere ``Tabella delle velocità '' per una scelta rapida oppure ``Che velocità dovrei usare con il mio modem?'' per ulteriori dettagli. Se non avete idea di quale velocità impostare, impostatela un po' superiore a quella certificata del vostro modem. Ricordate anche che se vedete un menù dove un opzione è "hardware flow control" (controllo di flusso hardware) e/o "RTS/CTS" o simili, selezionatela. È un cavo telefonico attivo quello collegato al vostro modem? Potreste connettere il cavo ad un vero telefono per controllare che produca il segnale di linea. Ora dovete selezionare un programma di comunicazione da usare per chiamare il numero. Fra questi programmi includiamo minicom, seyon (X- windows) e kermit. Vedere la sezione ``Programmi di comunicazione'' per notizie circa alcuni programmi di comunicazione. Un paio di esempi sono presentati più avanti: ``Chiamare con Minicom'' e ``Chiamare con Kermit''. 9.2. Chiamare con Minicom Minicom viene incluso nella maggior parte delle distribuzioni di Linux. Per configurarlo dovete esser collegati come root. Digitate "minicom -s" per configurarlo. Verranno direttamente visualizzati i menù di configurazione. Oppure potete anche digitare "minicom", poi digitare ^A per vedere la riga di stato in fondo. Essa invita a digitare ^A Z per un aiuto (se avete già digitato ^A digitate solo z). Dal menù di aiuto (help menù) andate al menù di Configurazione (Configuration menu). Non occorre impostare la maggior parte delle opzioni se si vuole semplicemente effettuare una chiamata. Per la configurazione dovete fornire due semplici voci: il nome della porta seriale connessa al modem (tipo /dev/ttyS2) e la velocità (tipo 115200). Questi valori si impostano nel menù serial port. Apritelo ed impostate i valori. Poi (se possibile) impostate il controllo di flusso hardware (RTS/CTS). Poi salvate. Quando digitate la velocità, dovreste anche vedere qualcosa tipo "8N1" che dovreste lasciare stare. Vuole dire: Byte da 8 bit, Nessuna parità, 1 bit di stop aggiunto ad ogni byte. Se non trovate la velocità che desiderate, una velocità minore funzionerà comunque per una prova. Uscite (digitando return) quando avete finito e salvate la configurazione come default (dfl) usando il menù. Potreste uscire da minicom e poi rilanciarlo per controllare se adesso trova la porta seriale ed inizializza il modem, oppure potete tornare all'help e dire a minicom di inizializzare il modem. Ora siete pronti per chiamare. Ma prima, dalla videata principale che ottenete dopo avere digitato "minicom", assicuratevi che ci sia un modem presente digitando AT poi premendo il tasto . Dovreste vedere un "OK". Se questo non accade c'è qualcosa di sbagliato e sarà impossibile tentare una chiamata. Se ricevete "OK" tornate all'help e selezionate l'elenco telefonico. Potete modificarlo e digitare un numero di telefono, ecc. nell'elenco, poi scegliete "dial" (componi) per chiamare. In alternativa, potete digitare il numero manualmente (selezionando "manual" poi digitando il numero sulla tastiera). Se non funziona annotate accuratamente ogni messaggio di errore visualizzato e cercate di scoprire cosa non va. Per vedere se minicom ha trovato il modem, semplicemente lanciatelo e digitate direttamente qualcosa. Tutti i comandi al modem devono essere prefissati da "AT". Scrivendo quindi semplicemente "AT" dovreste ricevere in risposta un "OK" dal modem. 9.3. Effettuare una chiamata con Kermit Trovate l'ultima versione di kermit in http://www.columbia.edu/kermit/. Ad esempio, diciamo che il vostro modem si trova in ttyS3 e la velocità è 115200 bps. Dovreste fare questo: linux# kermit C-Kermit 6.0.192, 6 Sep 96, for Linux Copyright (C) 1985, 1996, Trustees of Columbia University in the City of New York. Default file-transfer mode is BINARY Type ? or HELP for help. C-Kermit>set line /dev/ttyS3 C-Kermit>set carrier-watch off C-Kermit>set speed 115200 /dev/ttyS3, 115200 bps C-Kermit>c Connecting to /dev/ttyS3, speed 115200. The escape character is Ctrl-\ (ASCII 28, FS) Type the escape character followed by C to get back, or followed by ? to see other options. ATE1Q0V1 ; digitate questo poi Enter OK ; il modem dovrebbe rispondere così Se il modem risponde correttamente ai comandi AT allora si deve supporre che il vostro modem funziona correttamente per quanto riguarda Linux. Ora provate a chiamare un altro modem digitando: ATDT7654321 dove 7654321 è un numero di telefono. Usate ATDP in luogo di ATDT se avete una linea ad impulsi. Se la chiamata esce, il modem sta funzio­ nando. Per tornare al prompt di kermit, tenete premuto il tasto Ctrl, premete la barra rovesciata, quindi rilasciate il tasto Ctrl, quindi premete il tasto C: Ctrl-\-C (Back at linux) C-Kermit>quit linux# Questo è stata una semplice prova usando un primitivo metodo di chiamata "a mano". Il metodo abituale è lasciare che kermit componga il numero per voi con il suo database di modem interno e le sue capacità di composizione automatica, ad esempio usando un modem US Robotics (USR) linux# kermit C-Kermit 6.0.192, 6 Sep 1997, for Linux Copyright (C) 1985, 1996, Trustees of Columbia University in the City of New York. Default file-transfer mode is BINARY Type ? or HELP for help C-Kermit>set modem type usr ; Seleziona il tipo di modem C-Kermit>set line /dev/ttyS3 ; Seleziona il dispositivo di comunicazione C-Kermit>set speed 115200 ; Imposta la velocit... di connessione C-Kermit>dial 7654321 ; Compone Number: 7654321 Device=/dev/ttyS3, modem=usr, speed=115200 Call completed. Connecting to /dev/ttyS3, speed 115200 The escape character is Ctrl-\ (ASCII 28, FS). Type the escape character followed by C to get back, or followed by ? to see other options. Welcome to ... login: 10. Dial-in - Ricevere chiamate 10.1. Introduzione Il dial-in è quando impostate il vostro PC così che altri possano chiamare il vostro numero di telefono ed usare il vostro PC. Il "punto di vista" è il vostro PC. Quando componete un numero esterno dal vostro PC state nel contempo facendo un dial-in in un altro computer (ma non potete fare il dial-in nel vostro proprio computer). Il dial-in funziona così. Qualcuno con un modem compone il vostro numero telefonico. Il vostro modem risponde alla chiamata e si connette. Una volta che il chiamante è connesso, il vostro PC invia un prompt di login al chiamante. Poi il chiamante si collega ed usa il vostro PC. Usare il vostro PC significa che il chiamante ha un account di shell e può usare il vostro PC proprio come se si fosse collegato tramite console (o terminale di testo). Potrebbe anche significare che il collegamento è avvenuto tramite Internet. Il programma che usate nel vostro PC per gestire il dial-in è chiamato getty. Spesso, dopo il login, viene lanciato un altro programma, inclusi programmi per connettere il chiamante ad Internet. Questo HOWTO non tratta detti programmi che vengono lanciati dopo il login. Per connettersi ad Internet, viene in genere lanciato il programma PPP (vedere il PPP-HOWTO, di cui una nuova revisione è imminente). Il login può essere automatizzato in modo che il programma di comunicazione automaticamente digiti un "name" e "password" ogni volta. 10.2. Getty getty è il programma che lanciate per il dial-in. Non ne avete bisogno per chiamate verso l'esterno (dialout). Oltre a presentare un prompt di login, risponde anche al telefono. Originariamente getty veniva usato per il login verso un computer da un terminale stupido. È attualmente usato per il login verso una console Linux. Ci sono alcuni programmi getty differenti con nomi leggermente diversi. Solo alcuni funzionano con i modem per il dialin. Questo programma getty viene in genere lanciato in fase di boot. Deve essere chiamato dal file /etc/inittab. Potreste trovare un esempio in questo file di una chiamata a getty nel quale potreste avere bisogno di fare qualche piccola modifica. Se usate un programma getty diverso da quello mostato nell'esempio, allora dovreste apportare delle modifiche importanti visto che le opzioni hanno diversi formati. Ci sono quattro diversi programmi getty tra cui scegliere che possono essere usati coi modem per il dialin: mgetty, uugetty, getty_em e agetty. Alcuni dettagli vengono forniti nelle sottosezioni seguenti. getty è il più semplice (e più debole) dei quattro ed alcuni lo considerano principalmente da usarsi con terminali di testo collegati direttamente. mgetty supporta fax e voice mail, invece uugetty no. mgetty si afferma manchi di alcune delle caratteristiche di ugetty. getty_em è una versione semplificata di ugetty. Quindi mgetty è probabilmente la vostra scelta migliore a meno che abbiate già familiarità con ugetty (o troviate difficile reperire mgetty). La sintassi per questi programmi getty differisce, così assicuratevi di stare usando la sintassi corretta in /etc/inittab per qualsiasi getty usiate. 10.2.1. Mgetty mgetty fu scritto come rimpiazzo di uugetty che esisteva molto prima di mgetty. Entrambi si possono usare con i modem. Sebbene mgetty possa anche essere usato per terminali direttamente connessi, la documentazione per questa cosa è difficile da trovare e mgetty (a metà 1999) non supporta il controllo di flusso software ( usato da molti terminali) senza ricompilarlo. Questo difetto viene classificato come un bug. Oltre a consentire login in dialup, mgetty fornisce supporto FAX ed autoriconoscimento del PPP. C'è un programma addizionale chiamato vgetty che gestisce le caselle vocali per alcuni modem. La documentazione per mgetty è buona (eccetto per le caselle vocali), e non necessita di supplementi. Per cortesia riferitevi ad essa per le istruzioni di installazione. Potete trovare le ultime informazioni su mgetty a http://www.leo.org/~doering/mgetty/ e 10.2.2. uugetty getty_ps contiene due programmi: getty viene usato per le console ed i terminali, e ugetty per i modem. Greg Hankins (già autore del Serial- HOWTO) usava ugetty così le sue considerazioni circa questo sono là incluse. Vedere ``Uugetty''. Gli altri getty sono ben trattati dalla documentazione che li accompagna. 10.2.3. getty_em Questa è una versione semplificata di "uugetty". Fu scritta da Vern Hoxie dopo che fu completamente confuso dai complessi file di supporto che occorrono a getty_ps e uugetty. Fa parte della raccolta di utilità ed informazioni relative alla porta seriale di Vern Hoxie reperibili tramite ftp da . Il nome della raccolta è "serial_suite.tgz". Quando eseguite il login in "scicom" come anonimi, dovete usare il vostro indirizzo e-mail completo come password. Ad esempio: greg.hankins@cc.gatech.edu 10.2.4. agetty e mingetty agetty è una semplice e completamente funzionale implementazione di getty che meglio si adatta alle console virtuali od ai terminali piuttosto che per i modem. Ma, date determinate condizioni favorevoli, funziona bene anche con i modem (a meno che voi non eseguiate una chiamata quando agetty è in esecuzione in fase di attesa di chiamate). agetty nella distribuzione Debian viene semplicemente chiamata getty. mingetty è un piccolo getty che funzionerà solo per le console (monitor), quindi non si può usare con i modem per il dialin. 10.3. Cosa succede quando qualcuno ci chiama? (dial-in) Il chiamante lancia un certo programma di configurazione che compone il vostro numero di telefono ed il vostro telefono squilla. Ci sono due differenti modi nei quali il vostro PC può rispondere al telefono. Un modo è che il modem risponda automaticamente alla chiamata. L'altro modo è che getty rilevi lo squillo ed invii un comando al modem che gli imponga di rispondere alla chiamata. Una volta che viene risposto alla chiamata, il vostro modem invia dei toni all'altro modem (e viceversa). I due modem negoziano il modo con il quale essi comunicheranno e quando finiscono il vostro modem invia un messaggio di "CONNECT" (connessione) o simile a getty. Quando getty riceve questo messaggio invia un prompt di login attraverso la porta seriale. Qualche volta getty invoca semplicemente un programma chiamato login per gestire il login. getty in genere viene lanciato in fase di boot ma deve aspettare fino a quando viene effettuata una connessione prima di fare partire il prompt di login. Ora ulteriori dettagli sui due modi di rispondere ad una chiamata. Impostando il registro S0 del modem a 3, il modem automaticamente risponde al terzo squillo. Se è impostato a 0 allora il modem risponderà alla chiamata solo se getty gli invia il comando "A" (Risposta) mentre il telefono sta squillando. In realtà il comando è "ATA" visto che tutti i comandi modem devono essere prefissati da "AT". Potreste pensare che sia meglio utilizzare la capacità del modem di rispondere automaticamente alla chiamata, ma in verità è meglio fare sì che sia getty a rispondere. Se il modem non risponde automaticamente, si parla di risposta manuale (anche se getty la gestisce in modo automatico). Per il caso di risposta manuale, getty apre la porta in fase di boot e resta in ascolto. Quando il telefono squilla, un messaggio "RING" viene inviato a getty che sta ascoltando. Poi se getty vuole rispondere allo squillo, invia al modem il comando "ATA". Il modem poi esegue la connessione ed invia il messaggio "CONNECT ..." a getty che invia un prompt di login al chiamante. Nel caso della risposta automatica, viene usata la linea CD "Carrier detect" (Portante rilevata) che va dal modem alla porta seriale per rilevare quando viene fatta una connessione. Funziona così. In fase di boot, getty cerca di aprire la porta seriale, ma fallisce visto che in genere non c'è segnale CD dal modem. Allora il programma getty si ferma all'istruzione di apertura (open) nel programma fino a che il segnale CD compare. Quando un segnale CD arriva (forse ore dopo), allora la porta viene aperta e getty invia il prompt di login. Mentre getty sta aspettando all'altezza dell'istruzione di apertura, altri processi possono essere lanciati visto che Linux è un sistema operativo multiprocessing. Quello che fa "svegliare" getty è un interrupt che viene generato quando la linea CD dal modem pone il suo stato ad on. Potreste chiedervi come getty sia capace di aprire la porta seriale nel caso della risposta manuale visto che non vi è segnale CD. Bene, si può scrivere un programma per forzare l'apertura della porta anche se non è presente un segnale CD. 10.4. Perché la risposta manuale è meglio La differenza tra i due modi di risposta si palesa quando il computer è spento ma il modem sta ancora lavorando. Nel caso manuale, il messaggio "RING" viene inviato a getty ma visto che il computer è spento, getty non è pronta, quindi non ci sarà mai risposta al telefono. Non ci sono addebiti telefonici quando non si risponde alla chiamata. Nel caso della risposta automatica, c'è risposta alla telefonata ma non verrà mai inviato un prompt di login visto che il computer è spento. La bolletta cresce mentre l'attesa continua. Se la chiamata è gratuita, non fa molta differenza, sebbene possa essere frustrante attendere per un prompt di login che mai arriverà. mgetty usa la risposta manuale. uugetty può fare questo tramite uno script di configurazione. 10.5. Callback Si definisce callback quando qualcuno per primo chiama il vostro modem. Poi voi ottenete un po' di informazioni dal chiamante e lo richiamate. Perché si vuole fare questo? Una ragione è risparmiare sulla bolletta se voi potete telefonare al chiamante con tariffe più convenienti rispetto alle sue. Un altro è assicurarvi che il chiamante sia davvero colui che sostiene di essere. Se un chiamante vi contatta e dice di chiamare dal suo abituale numero telefonico, un modo per verificarlo è di effettuare una nuova chiamata a quel numero. C'è un programma per Linux chiamato "callback" che funziona con mgetty. Si trova in . Istruzioni passo-passo su come installarlo (e PPP) si trovano a 10.6. Casella vocale (Voice Mail) La casella vocale è come una segreteria telefonica eseguita da un computer. Per fare questo dovete avere un modem con il supporto "voice" ed il relativo software. Invece di incidere i messaggi su nastro, essi vengono salvati in forma digitale sul disco. Quando qualcuno vi chiama, ascolterà un messaggio di benvenuto e poi può lasciare un messaggio per voi. Sistemi più avanzati possono avere caselle postali selezionabili dal chiamante e messaggi da fare ascoltare selezionabili dall'utente. Software gratuito è disponibile in Linux per la semplice risposta, ma non sembra essere ancora a disposizione per capacità più avanzate. So di due diversi pacchetti di voicemail per Linux. Uno è minimale (vedere ``Voicemail Software''). L'altro, più avanzato, ma attualmente scarsamente documentato, è vgetty. È una aggiunta opzionale al ben documentato e largamente distribuito programma mgetty. Supporta i comandi modem vocali tipo ZyXEL. Nella distribuzione Debian potete ottenere il pacchetto mgetty-voice in aggiunta al pacchetto mgetty e mgetty-doc. La documentazione obsoleta è stata rimossa da mgetty, ma quella messa al suo posto è latitante (a meno che voi usiate l'opzione -h (aiuto) quando lanciate certi programmi, ecc). Ma si potrebbero consultare i messaggi circa l'uso che vengono inviati nel newsgroup di mgetty. Vedere ``About mgetty'' e >. Sembra che vgetty sia attualmente non molto stabile ma che venga usato con successo e che il suo sviluppo continui. Se questa è l'ultima versione di questo HOWTO qualcuno che è familiare con vgetty mi faccia cortesemente sapere lo stato attuale delle cose. 11. Uugetty per Dial-in (dal vecchio Serial-HOWTO) Sappiate che potreste usare mgetty come (migliore?) alternativa a uugetty. mgetty è più nuovo e più famoso di uugetty. Vedere ``Cos'è getty?'' per un breve confronto tra questi 2 getty. 11.1. Installare getty_ps Visto che uugetty è parte di getty_ps dovete prima installare getty_ps. Se non lo avete procuratevi l'ultima versione da metalab.unc.edu:/pub/Linux/system/serial. In particolare, se volete usare alte velocità (57600 and 115200 bps), dovete procurarvi la versione 2.0.7j o superiore. Dovrete anche avere libc 5.x o superiore. Per default, getty_ps sarà configurato come Linux FSSTND (File System Standard) compatibile, il che significa che si troverà in /sbin, ed i file di configurazione saranno chiamati /etc/conf.{uu}getty.ttySN. Questo non è ben chiaro dalla documentazione! Si aspetta che i file di lock vadano in /var/lock. Assicuratevi di avere una directory /var/lock. Se non volete la compatibilità FSSTND, i file binari andranno in /etc, quelli di configurazione in /etc/default/{uu}getty.ttySN ed i file di lock in /usr/spool/uucp. Vi raccomando di agire in questo modo se state usando UUCP, visto che UUCP avrà problemi se spostate i file di lock in posti dove non sa di doverli cercare. getty_ps può anche usare syslogd per registrare messaggi. Vedere le pagine di manuale per syslogd(1) e syslog.conf(5) per impostare syslogd, se già non è in esecuzione. I messaggi sono registrati con priorità LOG_AUTH, gli errori usano LOG_ERR e per il debugging si usa LOG_DEBUG. Se non volete usare syslogd potete modificare tune.h nei file sorgente di getty_ps per usare invece un file di registrazione di messaggi, diciamo /var/adm/getty.log per default. Decidete se volete la compatibilità FSSTND e la capacità di syslog. Potrete anche scegliere una combinazione dei due. Modificate Makefile, tune.h e config.h per adeguarli alle vostre decisioni. Poi compilate ed installate in base alle istruzioni incluse nel pacchetto. Da questo punto in poi, tutti i riferimenti a getty faranno capo a getty_ps. I riferimenti a uugetty si riferiranno a uugetty che viene incluso nel pacchetto getty_ps. Queste istruzioni non funzioneranno per mgetty o agetty. 11.2. Impostare uugetty Con uugetty potreste chiamare l'esterno con il vostro modem mentre uugetty sta controllando la porta per eventuali login. L'autore originale di questo HOWTO dice di usare /dev/cuaN per le chiamate in uscita (con uugetty in esecuzione su /dev/ttyN). Ma altri dicono che si deve usare /dev/ttyN sia per le chiamate all'esterno che per il dial-in ?? uugetty esegue degli importanti controlli di file lock. Aggiornate /etc/gettydefs per includere un riferimento al vostro modem. Mentre state modificando /etc/gettydefs, potrete verificare l'esattezza della sintassi facendo: linux# getty -c /etc/gettydefs 11.2.1. I modem moderni Se avete dei modem con velocità di 9600 bps e superiori con compressione dati potete bloccare la vostra porta seriale con una sola velocità. Ad esempio: # 115200 fixed speed F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200 Se avete impostato il modem per un controllo di flusso hardware RTS/CTS dovete aggiungere a CRTSCTS alle voci: # 115200 fixed speed with hardware flow control F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200 11.2.2. Vecchi e lenti modem Se avete un modem lento (sotto i 9600 bps), allora invece di una sola riga per una singola velocità, avrete bisogno di parecchie righe per tentare velocità diverse. Notate che queste righe sono legate tra loro dalla ultima "parola" della riga come ad esempio #38400. Le righe vuote sono richieste dopo ogni voce # Voci Modem 115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600 57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400 38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200 19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600 9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400 2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200 11.2.3. Messaggio di login Se volete, potete far stampare a uugetty delle cosette interessanti nel messaggio di login. Negli esempi di Greg, egli ha il nome del sistema, la linea seriale, la velocità in bps corrente. Potete aggiungere altre cose: @B La velocità in bps corrente (determinato quando viene visto @B) @D La data corrente nel formato MM/GG/AA. @L La linea seriale alla quale uugetty è attaccato @S Il nome del sistema @T L'ora corrente nel formato HH:MM:SS (24 ore). @U Il numero degli utenti attualmente collegati. Si tratta del conteggio del numero di voci nel file /etc/utmp file che hanno un campo ut_name non vuoto @V Il valore di VERSION, così come risulta nei file di default Per visualizzare un singolo carattere '@' usate '\@' o '@@'. 11.3. Personalizzare uugetty Ci sono molti parametri da affinare per ogni porta che avete. Essi sono implementati in file di configurazione separati per ogni porta. Il file /etc/conf.uugetty verrà usato da tutte per tutti i riferimenti a uugetty e /etc/conf.uugetty.ttySN sarà usato solo da quella porta. Esempi di file di configurazione possono essere trovati con i file sorgente di getty_ps, che sono inclusi in diverse distribuzioni di Linux. Per motivi di spazio non sono elencati qui. Notate che se state usando vecchie versioni di uugetty (inferiori a 2.0.7e) o non state usando FSSTND, allora il file di default sarà /etc/default/uugetty.ttySN. Il /etc/conf.uugetty.ttyS3 di Greg si presenta come segue: # configurazione di esempio di uugetty per un modem Hayes compatibile # per consentire chiamate modem dall'esterno # # file lock sostitutivo da controllare ... se questo file esiste, # allora uugetty viene fatto ripartire così che il modem sia # reinizializzato ALTLOCK=cua3 ALTLINE=cua3 # linea da inizializzare INITLINE=cua3 # timeout per disconnettere se inattivo ... TIMEOUT=60 # stringa di inizializzazione del modem ... # formato: ... (chat sequence) INIT="" AT\r OK\r\n WAITFOR=RING CONNECT="" ATA\r CONNECT\s\A # questa riga imposta il tempo da far trascorrere prima di inviare il # messaggio di login DELAY=1 #DEBUG=010 Aggiungete la seguente riga al vostro /etc/inittab, così che uugetty sia eseguito sulla vostra porta seriale (sostituendo le informazioni corrette per il vostro ambiente - run-level (2345 o 345 ecc.) posizione del file di configurazione, porta, velocità e tipo di terminale predefinito) S3:2345:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100 Rilanciate init: linux# init q Per i parametri di velocità in /etc/inittab, usate la più alta velocità in bps che il vostro modem può supportare. Ora Linux controllerà la vostra porta seriale per individuare delle connessioni. Componete il numero da un'altra macchina ed entrate nel vostro sistema Linux. uugetty ha molte altre opzioni, controllate la pagina di manuale per uugetty (spesso chiamato semplicemente getty) per una completa descrizione. Tra le altre, c'è la capacità di scheduling ed anche di ringback automatica. 12. Che velocità dovrei usare con il mio modem? Per velocità si intende in verità il rapporto di flusso dei dati ("data flow rate") ma quasi tutti lo chiamano velocità. Per tutti i modem moderni non si ha la possibilità di scegliere la velocità che il modem usa sulla linea telefonica visto che viene scelta automaticamente come la più alta possibile date le circostanze. Ma voi avete la possibilità di scegliere che velocità sarà usata nelle comunicazioni tra il modem e il vostro computer. Questa viene chiamata velocità "DTE" che è l'acronimo di Data Terminal Equipment (il vostro computer è un DTE). Dovete impostare questa velocità ad un valore abbastanza alto in modo che questa parte del tragitto compiuta dal segnale non costituisca un collo di bottiglia. L'impostazione per la velocità DTE è la velocità massima. La maggior parte delle volte probabilmente opererà ad una velocità inferiore. Per un modem esterno, la velocità DTE è la velocita (in bit per secondo) del flusso che scorre nel cavo tra il modem ed il PC. Per un modem interno, è concettualmente lo stesso, visto che il modem emula anche una porta seriale. Può sembrare ridicolo avere un limite di velocità nella comunicazione tra un computer ed una scheda modem che è direttamente collegata all'interno del computer ad bus con una velocità notevolmente superiore. Ma sarà così fino a quando i modem interni includeranno una porta seriale dedicata che ha limiti di velocità (e velocità impostabili). 12.1. Velocità e compressione dati Che velocità scegliere? Se non fosse per la compressione dati si potrebbe scegliere una velocità DTE esattamente uguale a quella del modem. La compressione dati prende i byte inviati dal computer al modem e li codifica in un numero minore di byte. Ad esempio, se il flusso (velocità) dal PC al modem era di 20,000 byte/secondo (bps) ed il rapporto di compressione è di 2 a 1, allora solo 10,000 byte/secondo usciranno verso la linea telefonica. Quindi per un rapporto di compressione di 2:1 occorre impostare una velocità doppia rispetto alla velocità massima del modem sulla linea telefonica. Se il rapporto di compressione è di 3 a 1, occorre impostarla tre volte più veloce. 12.2. Dove imposto la velocità? La velocità DTE è normalmente impostata da un menù nel vostro programma di comunicazione o da un'opzione data al comando getty se qualcuno vi chiama. Non potete impostare la velocità DCE modem-a- modem. 12.3. Non posso impostare una velocità sufficientemente elevata Dovete scoprire la velocità più alta supportata dal vostro hardware. Alla fine del 1998 la maggior parte dell'hardware supportava velocità fino a 115.2 bps. Pochi modem interni a 56K supportano i 230.4K bps. Recenti kernel di Linux supportano le alte velocità (superiori a 115.2K) ma potreste avere difficoltà nell'usarle per una delle seguenti ragioni: 1. Il programma applicativo (o stty) non accetta l'alta velocità. 2. Setserial ha una velocità di default di 115,200 (ma questo default si può cambiare facilmente) 12.3.1. Com'è impostata la velocità nell'hardware: il divisore e il baud_base Ecco un'elenco dei divisori più comunemente usati e delle loro velocità corrispondenti (assumendo una velocità massima di 115.200): 1 (115.2K), 2 (57.6K), 3 (38.4K), 6 (19.2K), 12 (9.6K), 24 (4.8K), 48 (2.4K), 96 (1.2K), ecc. Il driver seriale imposta la velocità nell'hardware inviando al medesimo solamente un "divisore" (un numero intero positivo). Questo "divisore" divide la velocità massima dell'hardware, la velocità quindi risulta più lenta (eccetto che per divisore 1 che ovviamente dice all'hardware di lavorare a velocità massima). In genere, se specificate una velocità di 115.2K (nel vostro programma di comunicazione o tramite stty) allora il driver seriale imposta l'hardware della porta a divisore 1 che ovviamente imposta la velocità massima. Se disponete di hardware con velocità massima di diciamo 230.4K, allora specificando 115.2K risulterà un divisore 1, quindi in realtà avrete la velocità di 230.4K. Che è la velocità doppia di quanto avete impostato. In effetti, per qualsiasi velocità che impostate, la velocità reale sarà raddoppiata. Se avete hardware che potrebbe andare a 460.8K, allora la velocità reale sarebbe il quadruplo di quella impostata. 12.3.2. Trucchetti per impostare la velocità Per correggere questi valori (ma non sempre il problema verrà risolto) potreste usare "setserial" per modificare il baud_base alla vera velocità massima della vostra porta tipo 230.4K. Quindi se impostate la velocità (tramite la vostra applicazione o da stty) a 230.4K, verrà usato un divisore 1 ed otterrete la stessa velocità di quella da voi impostata. PROBLEMA: stty e molti programmi di comunicazione (alla metà del 1999) presentano ancora 115.2K quale velocità massima impostabile e non vi lasceranno impostarla a 230.4K, ecc.. Quindi in questi casi uno soluzione potrebbe essere non cambiare nulla con setserial, ma tenersi in mente che la velocità reale è sempre il doppio di quella che avete impostata. C'è un altro trucco che non è molto meglio. Per usarlo impostate il baud_base (con setseria) alla velocità massima del vostro hardware. Questo corregge il conteggio così che se impostate 115.2K avrete effettivamente quella velocità. Ora dovete però ancora scoprire come impostare una velocità più alta se il vostro programma di comunicazione (o simile) non ve lo consente. Fortunatamente, setserial ha un modo per farlo: usate il parametro "spd_cust" con "divisor 1". Poi quando impostate la velocità a 38400 nel programma di comunicazione, il divisore verrà impostato ad 1 nella porta ed opererà alla massima velocità. Ad esempio: setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1 Non cercate di usare "divisor" per altri scopi diversi dallo speciale uso illustrato qui sopra (con spd_cust). Se ci sono due o più alte velocità che volete usare che il vostro programma di comunicazione non riesce ad impostare, allora non è così facile come sopra descritto. Ma si applicano gli stessi principi. Potreste mantenere la baud_base di default e tenere presente che quando impostate una velocità in realtà impostate solo il divisore. Così la vostra velocità reale sarà sempre la vostra velocità massima divisa da qualunque divisore sia impostato nel driver seriale. Vedere ``Com'è impostata la velocità nell'hardware: il divisore ed il baud_base'' 12.3.3. La frequenza del cristallo non è il baud_base Notate che l'impostazione del baud_base è in genere molto inferiore rispetto a quella dell'oscillatore di cristallo nel hardware viste la frequenza del cristallo spesso si ottiene dividendo per 16 nell'hardware per ottenere la vera velocità massima. La ragione per la quale la frequenza del cristallo deve essere più altà è che può essere usata per ottenere diversi campioni di ogni bit per determinare se è un 1 o uno 0. 12.4. Tabella delle velocità Conviene avere almeno una UART a 16650 per modem a 56K. ma pochi modem la supportano. Un'alternativa è avere una 16550 che è stata "truccata" per dare 230400 bps. Ecco alcune velocità consigliate per impostare la vostra linea seriale se la velocità del vostro modem è: · 56K (V.90) usate 115200 bps o 230400 bps (percentualmente di poco più veloce?) · 28.8K (V.34), 33.6K (V.34) usate 115200 bps · 14400 bps (V.32bis), con compressione dati V.42bis usate 57600 bps · 9600 bps (V.32), con compressione dati V.42bis usate 38400 bps · modem minori di 9600 bps (V.32), impostate la velocità più alta che il modem supporta. 13. Programmi di comunicazione ed utilità PPP è di gran lunga il più usato. È usato per accedere ad Internet. Per chiamare librerie pubbliche, BBS, ecc. minicom è il più popolare seguito da Seyon (solo per X-Windows) e Kermit. 13.1. Minicom contro Kermit Minicom è solo un programma di comunicazione mentre Kermit è sia un programma di comunicazione che un protocollo di trasferimento file. Qualcuno potrebbe usare il protocollo Kermit in Minicom (a patto che si abbia installato Kermit sul PC). Minicom è basato sui menù mentre Kermit è basato sulla riga comando (interattiva nello speciale prompt di Kermit). Mentre Kermit è un programma libero, la documentazione non è tutta libera. Non c'è un manuale dettagliato fornito e viene suggerito di acquistare un libro come manuale. Comunque Kermit ha un aiuto in linea interattivo che dice tutto, ma manca di spiegazioni che guidino il principiante. I comandi possono essere messi in un file script così che non si debbano ripetere ogni volta. Kermit (inteso come programma di comunicazione) è più potente di Minicom. Sebbene tutta la documentazione di Minicom sia libera, non è così esaustiva come quella di Kermit. Visto che occorre un permesso per includere Kermit in una distribuzione commerciale e visto che la documentazione non è totalmente libera, alcune distribuzioni non includono Kermit. La mia opinione è che è più facile impostare Minicom e c'è meno da imparare. 13.2. Lista di programmi Ecco una lista di alcuni software di comunicazione dalla quale potrete scegliere, disponibili via FTP se non si trovano inclusi nella vostra distribuzione. Gradirei commenti che paragonino i programmi di comunicazione. Quelli meno popolari sono obsoleti? 13.2.1. I meno popolari · ecu - un programma di comunicazione · pcomm - programma di comunicazione tipo procomm con zmodem · xc - pacchetto di comunicazione xcomm 13.2.2. I più popolari · minicom - programma di comunicazione tipo telix. Supporta gli script, zmodem, kermit · C-Kermit - portabile, supporta gli script, comunicazioni seriali e TCP/IP incluso il trasferiemnto di file, la trascodifica del set di caratteri e supporta zmodem · seyon - programma di comunicazione in ambiente X · xc - programma di comunicazione in ambiente X 13.2.3. Fax · efax un piccolo programma fax · hylafax un programma fax basato sul modello client-server · mgetty+fax gestisce quanto concerne il fax e il login per chiamate in entrata 13.2.4. Software per Voicemail · mvm è un VoiceMail minimale for Linux · vgetty è un'estensione di mgetty che gestisce voicemail per alcuni modem. Dovrebbe essere compreso in recenti release di mgetty. 13.2.5. Chiamate in entrata (Dial-in) (usa getty) · mgetty+fax è per i modem ed è ben documentato (eccetto che per voicemail alla metà del 1999). Gestisce anche i fax e risulta un'alternativa a uugetty. Sta includendo capacità di voicemail (usando vgetty). Vedere ``mgetty'' · uugetty è anch'esso per i modem. È parte del pacchetto ps_getty. Vedere ``getty_ps'' 13.2.6. Altri · callback voi chiamate un modem remoto, poi quel modem riappende e vi richiama (per risparmiare sulla bolletta). · SLiRP e term forniscono un servizio tipo PPP che potete lanciare nello spazio utente su di un computer remoto con uno shell account Vedere ``term e SLiRP'' per ulteriori dettagli. · ZyXEL è un programma di controllo per i modem ZyXEL U-1496. Gestisce chiamate, connessioni, richiamate di sicurezza, FAX e funzioni vocali di mailbox · Software SLIP e PPP può essere trovato in: ftp://metalab.unc.edu/pub/Linux/system/network/serial. · Altre cose si possono trovare in: ftp://metalab.unc.edu/pub/Linux/system/serial e ftp://metalab.unc.edu/pub/Linux/apps/serialcomm o in uno dei molti mirror. Queste sono le directory dove sono archiviati i programmi. 13.3. SLiRP e term SLiRP e term sono programmi che servono solo se avete un account shell in dial-up su di una macchina tipo Unix e volete avere l'equivalente di un account PPP (o simile) senza essere autorizzati ad averlo (forse perché non volete pagare per questo, ecc.). SLiRP è più popolare di term che è praticamente obsoleto. Per usare SLiRP installatelo nel vostro account nel computer remoto. Poi chiamate l'account e lanciate SLiRP sul remoto e PPP sul vostro PC locale. Ora avete una connessione PPP attraverso la quale potete lanciare un browser web sul vostro PC tipo Netscape, ecc. Potrebbero esserci alcuni problemi visto che SLiRP non è così valido come un vero account PPP. Alcuni account potrebbero fornire SLiRP visto che esso fa risparmiare sugli indirizzi IP (non avete indirizzo IP mentre usate SLiRP). term è qualcosa di simile a SLiRP solo che dovete eseguire term sia sul computer locale che quello remoto. Non c'è PPP sulla linea telefonica visto che term usa il suo proprio protocollo. Per usare term dal vostro PC vi occorrerà una versione "term-aware" di ftp per eseguire ftp, ecc. Quindi è più facile usare SLiRP visto che la versione normale di ftp funziona bene con SLiRP. C'è un Term HOWTO non aggiornato. 14. Cosa sono le UART? In che modo influenzano le prestazioni? 14.1. Introduzione alle UART (Questa sezione è anche nel Serial-HOWTO) UART (Universal Asynchronous Receiver Transmitter) - ricevitore/trasmettitore asincrono universale - sono chip seriali sulla scheda madre del vostro PC (o su una scheda modem interna). La funzione della UART può anche essere svolta da un chip che fa anche altre cose. Sui computer più vecchi come la maggior parte dei 486, i chip erano sulla scheda del controller I/O. Alcuni computer più vecchi hanno schede seriali dedicate. Scopo della UART è convertire i byte dal bus parallelo del PC in un flusso seriale di bit. Il cavo che esce dalla porta seriale è seriale ed ha solo un cavo per ogni direzione di flusso. La porta seriale invia un flusso di bit, un bit alla volta. Al contrario, il flusso di bit che entra dalla porta seriale via cavo esterno viene convertito in byte paralleli che il computer può comprendere. Le UART trattano dati divisi in pezzi della dimensione di un byte, che per convenienza è anche la dimensione dei caratteri ASCII. Diciamo che avete un terminale collegato al vostro PC. Quando digitate un carattere, il terminale consegna quel carattere al proprio trasmettitore (anche questo una UART). Il trasmettitore invia quel byte alla linea seriale, un bit alla volta ad una velocità specifica. Dalla parte del PC, l'UART ricevente prende tutti i bit e ricostruisce (parallelizza) il byte e lo mette in un buffer. Oltre alla conversione tra seriale e parallelo, la UART esegue alcune altre cose come derivazione (effetto collaterale) dei suoi compiti primari. Il voltaggio usato per rappresentare i bit viene anch'esso convertito (cambiato). I bit extra (chiamati bit di start e stop) sono aggiunti ad ogni byte prima che venga trasmesso. Vedere la sezione "Voltage Waveshapes" del Serial HOWTO per dettagli. Inoltre, mentre il rapporto di flusso (in byte per secondo) sul bus parallelo all'interno del computer è molto alto, il rapporto di flusso in uscita dalla UART dalla parte della porta seriale è molto più basso. L'UART ha un elenco fisso di rapporti (velocità) che può usare come interfaccia per la sua porta seriale. 14.2. Due tipi di UART Ci sono due tipi principali di UART: UART "stupide" (dumb) e UART FIFO. Le UART "stupide" sono le 8250, 16450, le prime 16550 e le prime 16650. Esse sono obsolete ma se imparate come lavorano, è poi facile comprendere come funzionano le moderne UART FIFO (le ultime 16550, 16550A, 16c552, le ultime 16650 e 16750 e 16C950). Esiste un poco di confusione per quanto riguarda le 16550. I primi modelli avevano un bug e lavoravano correttamente solo come 16450 (non FIFO). I modelli più recenti con questo bug corretto, vennero chiamate 16550A, ma la maggior parte dei costruttori non fecero proprio il cambiamento di nome e continuarono a chiamarle 16550. La maggior parte delle 16550 in uso oggi sono come le 16550A. Linux la rileverà come 16550A anche se il manuale dell'hardware (o l'etichetta) dicono che si tratta di una 16550. Una situazione simile esiste per le 16650 (solo che è peggio visto che il costruttore sembra che non ammetta che c'è qualcosa di sbagliato). Linux rileverà un'ultima 16650 come una 16650V2. Se esso la rileva come una 16650 ci sono cattive notizio e verrà usata come se avesse un buffer da un byte. 14.3. FIFO Per comprendere la differenza tra "stupide" (dumb) e FIFO (First In, First Out - Il primo che entra è il primo che esce) esaminiamo prima cosa succede quando una UART ha inviato o trasmesso un bute. La UART stessa non può fare nulla con i dati che passano attraverso di essa, semplicemente li riceve e li spedisce. Nella UART "stupide" originali, la CPU riceveva un interrupt dal driver seriale ogniqualvolta un byte veniva ricevuto o trasmesso. La CPU poi spostava il byte ricevuto dal buffer della UART in una qualche parte della memoria, oppure dava alla UART un altro byte da spedire. Le UART 8250 e 16450 hanno un buffer di 1 byte. Ciò significa che ogni volta che 1 byte viene inviato o ricevuto, la CPU riceveva un interrupt. A basse velocità di trasferimento, questo andava bene. Ma ad alte velocità di trasferimento la CPU diventava così impegnata a gestire la UART, che non aveva il tempo per soddisfare adeguatamete gli altri compiti. In alcuni casi, la CPU non era pronta a servire le richieste di interrupt in tempo ed il byte era sovrascritto perché arrivava troppo velocemente. Questo viene chiamato "overrun" o "overflow" (sovraccarico). Ecco dove le UART FIFO sono utili. I chip delle 16550A (o 16550) hanno un buffer FIFO di 16 byte. Questo significa che può ricevere fino a 14 byte (od inviarne 16) prima che debba inviare un interrupt alla CPU. Non solo essa può attendere ulteriori byte, ma la CPU può poi trasferirli tutti e 14 (o più) in un colpo solo. Sebbene la soglia di interrupt (trigger level) possa essere impostato ad 8 invece che a 14, c'è comunque un vantaggio significativo rispetto alle altre UART, che hanno solo un byte di buffer. La CPU riceve interrupt, ed è libera di fare altre cose. I dati non sono persi, e tutti sono contenti. Mentre la maggior parte dei PC hanno delle 16550 con 16 byte di buffer, le UART migliori hanno buffer ancora più grandi. Notate che l'interrupt viene inviato leggermente prima che il buffer si riempia del tutto (diciamo ad un "trigger level" di 14 byte per un buffer da 16 byte). Questo consente di fare spazio a qualche alto byte da ricevere durante il tempo che trascorre mentre la richiesta di interrupt viene esaudita. Il trigger level può essere impostato a diversi valori consentiti dal software kernel. Il trigger level di 1 sarà quasi come una UART "stupida" (a parte il fatto che comunque ha ancora spazio per altri 15 byte prima che venga inviato l'interrupt). Se digitate qualcosa mentre state visitando una BBS, i caratteri che digitate escono attraverso la porta seriale. I vostri caratteri digitati che si vedono sullo schermo sono quelli che sono stati riecheggiati dalla linea telefonica attraverso il vostro modem, quindi attraverso la vostra porta seriale verso lo schermo. Se si ha un buffer a 16 byte sulla porta seriale che trattiene i caratteri fino a che ne ha 14, dovrete digitare parecchi caratteri prima di poter vedere quello che avete digitato in precedenza. (prima che essi appaiono sullo schermo). Questo può creare confusione ma esiste un "timeout" per prevenire ciò. Quindi normalmente si vede un carattere sullo schermo non appena lo si digita. Il "timeout" lavora in questo modo per il buffer della UART che riceve: se i caratteri arrivano uno di seguito all'altro, allora una richiesta di interrupt viene inviata solo quando il 14° carattere raggiunge il buffer. Ma se un carattere arriva ed il successivo non arriva subito dopo, viene richiesto un interrupt. Questo succede anche se non ci sono 14 caratteri nel buffer (potrebbe anche essercene solo uno). Quindi quando quello che si digita passa attraverso questo buffer, esso si comporta come un buffer da 1 byte anche se in realtà è un buffer da 16 byte (a meno che la velocità di battitura non sia centinaia di volte superiore al normale). Vi è un timeout anche per il buffer di trasmissione. 14.4. Numeri di modello di UART Ecco un elenco di UART. TL è il Trigger Level · 8250, 16450, prime 16550: Obsolete con buffer da 1 byte · 16550, 16550A, 16c552: buffer da 16 byte TL=1,4,8,14 · 16650: buffer da 32-byte. Velocità fino a 460.8 Kbps · 16750: buffer da 64-byte per trasmissione, 56-byte per ricezione. Velocità fino a 921.6 Kbps · Hayes ESP: buffer da 1K Quelle obsolete vanno bene solo per modem non superiori a 14.4.k (DTE con velocità fino a 38400 bps). Per i modem moderni occorre almeno una 16550 (e non una delle prime 16550). I modem V.90 56k potrebbero essere percentualmente di molto piu' veloci con una 16650 (specialmente se si scaricano file non compressi). Il vantaggio principale della 16650 è la maggiore dimensione del suo buffer visto che una velocità extra non è necessaria a meno che il rapporto di compressione del modem sia alto. Alcuni modem interni a 56k potrebbero essere provvisti di una 16550 ?? Schede multiporta intelligenti e senza UART usano chip DSP per il buffering e il controllo addizionale, liberando la CPU ancora di più. Ad esempio, le schede Cyclades Cyclom e Stallion EasyIO usano una Cirrus Logic CD1400 RISC UART, e molte schede usano CPU 80186 od anche CPU RISC speciali per gestire l'IO seriale. La maggioranza dei PC più nuovi (486, Pentium o superiori) hanno una 16550A (generalmente chiamata solo 16550). Se avete un qualcosa di veramente vecchio il chip può essere scollegato in modo che ci si possa aggiornare acquistando un chip 16550A rimpiazzando la UART 16450 esistente. Se le funzionalità sono state immesse in un altro tipo di chip, allora siete sfortunati. Se la UART è agganciata ad incastro, allora l'aggiornamento è facile (se siete in grado di trovare un rimpiazzo). Le nuove e le vecchie hanno i pin compatibili. Potrebbe essere più praticabile acquistare semplicemente una nuova scheda seriale su Internet (alcuni negozi al dettaglio ne hanno a disposizione oggi). 15. Risoluzione di problemi 15.1. Non posso ottenere 56K dal mio modem a 56K Deve esserci un livello di disturbo molto basso sulla linea perché il modem possa solo avvicinarsi ai 56K. Alcune linee telefoniche sono così cattive che le velocità ottenibili sono molto più lente di 56K (tipo 26.6 od anche meno). Alcune volte telefoni supplementari connessi alla stessa linea possono causare problemi. Per controllare questo potreste cercare di connettere il vostro modem direttamente nel punto dove la linea telefonica si immette nell'edificio, disconnettendo qualsiasi altra cosa che quella linea alimenti (se nessuno ha qualcosa in contrario). 15.2. L'invio o lo scarico di file è lento o interrotto. Il controllo di flusso (per il PC e/o per il modem) potrebbe non essere abilitato. Se avete impostato un'altra velocità DTE (tipo 115.2K) allora il flusso dal vostro modem al vostro PC funziona bene ma molto del flusso nell'altra direzione non passerà completamente a causa del collo di bottiglia della linea telefonica. Questo risulterà in molti errori e nel reinvio dei pacchetti. Potrebbe anche volerci un tempo oltremodo lungo per spedire un file. In alcuni casi, i file non arrivano neppure. Se state scaricando dei grandi file non compressi o delle pagine web, (ed il vostro modem usa la compressione dei dati) oppure se avete impostata una bassa velocità DTE, allore lo scarico potrebbe essere interrotto a causa della mancanza del controllo di flusso. 15.3. Ricevendo una chiamata continuo a ricevere "line NNN of inittab invalid" Ovvero: riga NNN di inittab non valida Assicuratevi di usare la sintassi corretta per la vostra versione di init. I diversi init esistenti usano sintassi differenti nel file /etc/inittab. Assicuratevi di usare la sintassi corretta per la vostra versione di getty. 15.4. Quando cerco di chiamare l'esterno, ottengo ``/dev/ttySN: Device or resource busy" Ovvero: /dev/ttySN: Dispositivo o risorsa occupata Questo problema può sorgere quando DCD o DTR non sono implementati correttamente. DCD dovrebbere attivarsi solo quando esiste una vera connessione (ad esempio qualcuno ci ha chiamati), non quando getty sta "osservando" la porta. Controllate che il vostro modem sia configurato per attivare una DCD solo quando c'è una connessione. DTR dovrebbe essere attivato ogniqualvolta qualcuno stia usando o "osservando" la linea, come getty o kermit o qualche altro programma di comunicazione Un'altra comune causa di errori "device busy" (dispositivo occupato) è quando si imposta la porta seriale con un interrupt che è già preso da qualcosa d'altro. Quando ogni dispositivo si inizializza, chiede a Linux il permesso di usare i suoi interrupt hardware. Linux mantiene traccia di quale interrupt ha assegnato ed a chi, e se il vostro interrupt è gia stato occupato, il vostro dispositivo non sarà in grado di inizializzarsi correttamente. Il dispositivo non ha molti modi per informarvi che questo è capitato, ad eccetto di quando si tenta di usarlo, allora restituisce un errore di "device busy". Controllate gli interrupt di tutte le vostre schede (seriali, ethernet, SCSI, ecc.). Cercate i conflitti di IRQ. 15.5. Continuo a ricevere ``Id "S3" respawning too fast: disabled for 5 minutes'' Id "S3" è solo un esempio. In questo caso cercate la riga che inizia con "S3" in /etc/inittab. Questa è la causa del problema. Assicuratevi che la sintassi per questa riga sia corretta, che il dispositivo (ttyS3) esista e che possa essere trovato. Assicuratevi che il vostro modem sia configurato correttamente. Guardate i registri E e Q. Questo può capitare quando il vostro modem sta "chiaccherando" con getty. Per uugetty, verificate che la sintassi del vostro /etc/gettydefs sia corretta eseguendo il seguente comando: linux# getty -c /etc/gettydefs Questo può anche capitare quando l'inizializzazione di uugetty fallisce. Vedere la sezione ``uugetty non funziona ancora''. 15.6. Il mio modem è bloccato dopo che qualcuno ha agganciato, oppure uugetty non riparte Questo può capitare quando il vostro modem non effettua il reset dopo che è caduto il DTR. Greg Hankins ha visto i suoi led RD e SD impazzire quando questo è successo. Dovete fare resettare il vostro modem. Molti modem Hayes compatibili fanno questo con &D3, ma sul suo USR Courier, ha dovuto impostare &D2 e S13=1. Controllate il manuale del modem (se ne avete uno). 15.7. uugetty non funziona ancora Esiste un'opzione DEBUG all'interno di getty_ps. Modificate il vostro file di configurazione /etc/conf.{uu}getty.ttySN e aggiungete DEBUG=NNN. Dove NNN è una delle seguenti combinazioni di numeri a seconda di quello che state cercando di debuggare: D_OPT 001 impostazione opzioni D_DEF 002 elaborazione file di default D_UTMP 004 elaborazione di utmp/wtmp D_INIT 010 inizializzazione della linea (INIT) D_GTAB 020 elaborazione del file gettytab D_RUN 040 altre diagnostiche di runtime D_RB 100 ringback debugging D_LOCK 200 elaborazione del lockfile di uugetty D_SCH 400 elaborazione schedule D_ALL 777 tutto Impostare DEBUG=010 è un buon punto da cui partire. Se avete in esecuzione syslogd, le informazioni di debugging appariranno nei vostri file di log. Se non avete in esecuzione syslogd le informazioni appariranno in /tmp/getty:ttySN per il debugging getty e /tmp/uugetty:ttySN per uugetty ed in /var/adm/getty.log. Controllate la informazioni di debugging e vedete cosa sta succedendo. Molto probabilmente, dovrete regolare alcuni parametri nel vostro file di configurazione e riconfigurare il modem. Potete anche provare mgetty. Alcune persone hanno avuto miglior fortuna con quest'ultimo. 15.8. Il mio modem è fisicamente al suo posto ma non può essere trovato Se conoscete le porte seriali esistenti prima di avere installato un modem interno, allora il problema è cercare la nuova porta seriale. Di questo ci si occupa nella successiva sezione. Questa sezione riguarda come scoprire quale porta seriale ha un modem su di essa. C'è un programma che cerca i modem sulle porte seriali comunemente usate chiamato "wvdialconf". Digitate semplicemente "wvdialconf ". Verrà creato il nuovo file come file di configurazione ma non avrete bisogno di esso a meno che non andiate ad usare "wvdial" per telefonare. Vedere ``Cos'è wvdialconf ?''. Il vostro problema potrebbe essere dovuto ad un winmodem (o simile) che non può essere usato con Linux. Vedere ``Evitare: winmodem''. Il programma "setserial" potrebbe essere usato per identificare le porte seriali ma non rileverà se ci sono modem collegati ad esse. Quindi è meglio usare prima "wvdialconf". Un altro modo di vedere se c'è un modem su una porta è lanciare "minicom" sulla porta (andate nei menù di setup con ^AO). Poi digitate "AT" e dovreste vedere OK (o 0 se è impostato per restituire codici numerici di risultato ("digit result codes")). Se ci vogliono parecchi secondi per ottenere una risposta (incluso anche solo il cursore che si sposta di una riga) allora vedere ``Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi'' 15.9. Le seguenti sottosezioni sono sia nel Serial che nel Modem HOWTO: 15.10. La mia porta seriale è fisicamente lì ma non può essere trovata Controllate i menù ed i messaggi del BIOS. Se c'è una porta seriale PnP od un bus ISA provate "pnpdump --dumpregs" e/o consultate il Plug- and-Play HOWTO. Per il bus PCI guardate in /proc/pci. Potreste provare a rilevarla con setserial. Vedere ``Probing''. Se nulla sembra passare la porta potrebbe esserci ma avere un interrupt sbagliato. Vedere ``Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi'' 15.11. Estremamente lento: il testo appare sullo schermo lentamente e dopo lunghi ritardi È probabilmente un conflitto od una errata impostazione di interrupt. Ecco alcuni sintomi di quello che potrebbe succedere la prima volta che cercate di usare un modem, terminale o stampante. In alcuni casi digitate qualcosa ma sullo schermo non appare nulla se non dopo parecchi secondi (e potrebbe anche essere solo un invisibile carattere di ma notate che il cursore scende di una riga) In altri casi dove dovrebbero comparire molti dati sullo schemo, sono un gruppo di circa 16 caratteri compare. Poi c'è un'attesa di parecchi secondi per il prossimo gruppo di caratteri. Potreste anche ricevere messaggi di errore di "input overrun" (o trovarli nei file di log) Per ulteriori dettaglio sui sintomi e perché questo accade vedere il Serial-HOWTO sezione "Interrupt Problems Details". Come controllo finale per vedere se veramente si tratta di un problema di interrupt, impostate l'IRQ a zero con "setserial". Questo dice al driver di non usare gli interrupt ma un metodo di polling inefficiente (ma più veloce). Se sembra che questo risolva i problemi di "lentezza", allora si tratta di un problema di interrupt ma dovreste comunque cercare di risolverlo visto che il polling usa eccessive risorse del computer. Cercare di trovare il conflitto di interrupt potrebbe non essere semplice visto che guardare nella directory /proc potrebbe essere fuorviante. Assicuratevi che nessun IRQ sia condiviso illegalmente. Controllate tutte le vostre schede (seriali ethernet, SCSI, ecc...). Assicuratevi di avere impostato correttamente i ponticelli (o il PnP) ed i parametri di setserial per tutti i vostri dispositivi seriali. Controllate anche /proc/ioports e /proc/interrupts e /proc/pci alla ricerca di conflitti. Per ulteriori dettagli vedere il Serial-HOWTO: Interrupt Problem Details. Se riguarda i dispositivi Plug-and-Play, vedere anche il Plug-and-Play- HOWTO 15.12. Abbastanza lento: Mi aspettavo che fosse 2-4 volte più veloce Una ragione potrebbe essere che qualunque cosa sia sulla porta seriale (tipo un modem, un terminale, una stampante) non funziona così veloce come pensate che dovrebbe. Un modem a 56k raramente funziona a 56k ed Internet spesso è congestionata ed ha colli di bottiglia che rallentano le cose. Un'altra possibile ragione è che il driver seriale pensa che abbiate una porta seriale obsoleta (UART 8250, 16450, o le prime 16550). Vedere ``Cosa sono le UART?''. Usate "setserial -g /dev/ttyS*". Se mostra qualsiasi cosa meno di 16550A, allora è probabilmente proprio questo il problema. Se invece "setserial" lo identifica così sbagliando, modificatela. Vedere ``Cos'è Serial?'' per maggiori informazioni. Naturalmente se avete veramente una porta obsoleta, mentire a setserial su questo non farà altro che peggiorare le cose. 15.13. La schermata di avvio mostra IRQ sbagliati per le porte seri­ ali. Linux non esegue nessuna identificazione di IRQ in avvio. Quando il modulo di setserial si carica esegue semplicemente una rilevazione del dispositivo seriale. Quindi non fate caso a quello che dice circa l'IRQ, perché sta semplicemente assumendo gli IRQ standard. Così è fatto, perché l'identificazione degli IRQ è inaffidabile e potrebbe essere ingannevole. Ma se e quando setserial viene lanciata da uno script di avvio, cambia gli IRQ e visualizza il nuovo (ed auspicabilmente corretto) stato nella schermata di partenza. Se l'IRQ sbagliato non viene corretto da una seguente visualizzazione sullo schermo, allora avete un problema. Quindi, anche se ho la mia ttyS2 impostata ad IRQ 5, continuo a vedere ttyS02 at 0x03e8 (irq = 4) is a 16550A all'inizio quando parte Linux (i vecchi kernel potrebbero mostrare "ttyS02" come "tty02") Dovete usare setserial per dire a Linux che IRQ state usando. 15.14. "Cannot open /dev/ttyS?: Permission denied" Ovvero: Impossibile aprire /dev/ttyS?: Permesso negato Controllare i permessi su questa porta con "ls -l /dev/ttyS?". Se siete i proprietari di questa ttyS? allora dovete avere i permessi di lettura e scrittura: crw con il c (Character device) in colonna 1. Se non siete i proprietari dovreste invece vedere rw- nelle colonne 8 e 9 che significa che tutti hanno diritti di lettura e scrittura su di esso. Usate "chmod" per cambiare i permessi. Ci sono modi più complicati per ottenere accessi tipo appartenere ad un "gruppo" che ha permessi di gruppo. 15.15. "Operation not supported by device" (messaggio di errore) per ttySx Ovvero: Operazione non supportata dal dispositivo Questo vuol dire che un operazione richiesta da setserial, stty, ecc. non può essere effettuata perché il kernel non la supporta. In precedenza questo era spesso causato dal fatto che il modulo seriale non era stato caricato. Ma con l'avvento del PnP, potrebbe più probabilmente dire che non c'è un modem (od altro dispositivo seriale) all'indirizzo dove il driver (e setserial) pensa che sia. Se non c'è un modem lì, i comandi inviati a quell'indirizzo ovviamente non vengono eseguiti. Vedere ``Cos'è impostato nell'hardware della mia porta seriale?''. Se il modulo seriale non era caricato ma "lsmod" mostra che ora è caricato potrebbe essere il caso che sia stato caricato adesso ma non lo era quando si è ricevuto il mesasggio di errore. In molti casi il modulo verrà automaticamente caricato quando necessario (se si riesce a trovare). Per forzare il caricamento del modulo seriale si potrebbe elencarlo nel file /etc/modules.conf o /etc/modules. Il vero modulo dovrebbe risiedere in /lib/modules/.../misc/serial.o. 15.16. "Cannot create lockfile. Sorry" (messaggio di errore) Ovvero: Spiacente, impossibile creare il file di lock. Quando viene "aperta" una porta da un programma viene creato un file di lock in /var/lock. Errati permessi per la directory lock non consentiranno la creazione di un file di lock. Usare "ls -ld /var/lock" per vedere se i permessi sono a posto: in genere rwx per tutti (ripetuto 3 volte). Se è sbagliato, usate "chmod" per mettere a posto lo cose. Naturalmente, se non esiste una directory di lock nessun file di lock potrà esservi creato. Vedere la sottosezione del Serial-HOWTO: "What Are Lock Files". 15.17. "Device /dev/ttyS? is locked." Ovvero: Il dispositivo dev/ttyS? è bloccato./ Questo vuol dire che qualcun altro (o qualche altro processo) sta presumibilmente usando la porta seriale. Usate "ps -alx" per scoprirlo. Cercate qualsiasi programma che usi la porta seriale. Potreste anche controllare il file di lock che si trova in /var/lock tipo /var/lock/LCK..ttyS2 (contiene il numero identificativo del processo che sta usando la porta). Potrebbe essere un processo "ribelle" che dovrete eliminare. Se il processo non esiste, potreste rimuovere il file di lock. La maggior parte delle applicazioni fanno questo automaticamente così è raro che dobbiate ancora rimuovere dei file di lock manualmente. 15.18. Software che può essere d'aiuto · modemstat e statserial mostrano lo stato corrente delle varia linee di segnale (tipo DTR, CTS, ecc) · irqtune darà agli interrupt della porta seriale una priorità maggiore per migliorare le prestazioni. · hdparm per la messa a punto dell'hard-disk potrebbe fornire un ulteriore aiuto 16. Aggiornamenti delle memorie Flash Molti modem possono essere aggiornati riprogrammando la loro memoria flash tramite un programma di aggiornamento che si ottiene da Internet. Inviando questo "programma" dal PC tramite la porta seriale al modem, il modem immagazzinerà il programma nella sua memoria non volatile (quella che rimane anche quando il modem viene spento). Le istruzioni di installazione vertono generalmente su quanto occorre fare sotto Windows così dovrete scoprire come fare l'equivalente sotto Linux (a meno che si voglia installare l'aggiornamento sotto Windows). L'invio di un programma al modem viene spesso chiamato "download". Se l'ultima versione di questo HOWTO contiene ancora questa richiesta (vedere ``Nuove versioni di questo HOWTO'') per favore illustratemi la vostra esperienza installando questi aggiornamenti, che potrebbe essere utile ad altri. Ecco l'idea di base per eseguire un aggiornamento (upgrade). Per prima cosa, potrebbe esserci un comando che dovete inviare al vostro modem per dirgli che quello che segue è un aggiornamento della flash ROM. In un caso questo comando era AT**. Per fare questo lanciano un programma di comunicazione (tipo minicom) e digitare. Prima digitate AT per vedere se vostro modem è lì e risponde "OK". Poi, dovete inviare un file (talvolta due file) direttamente al modem. I programmi di comunicazione (come minicom) spesso usano zmodem o kermit per inviare file al modem (e oltre) ma essi mettono il file dentro dei pacchetti ai quali aggiungono delle intestazioni, mentre voi volete che sia inviato il file esatto, non uno modificato. Ma il programma kermit ha un comando "transmit" che invierà il file direttamente (senza usare i pacchetti kermit), così questo è un modo di inviare un file direttamente. Minicom al 1998 non ha questa capacità. Un altro modo di inviare il(i) file potrebbe essere uscire dal programma di comunicazione aprendo una shell (in minicom si usa ^AJ) poi: cat nome_file_aggiornamento > /dev/ttyS2 (se la vostra porta seriale è ttyS2). Poi tornare al programma di comunicazione (digitando fg al prompt della riga comandi in minicom) per vedere cosa è successo. Ecco una sessione di esempio per un determinato modem Rockwell (C-a è ^A): - Lanciare minicom - Digitare AT** : vedere "Download initiated .." - C-a J - cat FLASH.S37 > /dev/modem - fg : vedere "Download flash code .." - C-a J - cat 283P1722.S37 > /dev/modem - fg : vedere "Device successfully programmed" 17. Altre fonti di informazione 17.1. Varie · pagine di manuale per: agetty(8), getty(1m), gettydefs(5), init(1), isapnp(8), login(1), mgetty(8), setserial(8) · Il vostro manuale del modem (se esiste). Alcuni modem vengono rilasciati senza manuale. · Serial Suite di Vern Hoxie è una collezzioni di trucchi sulla cura e l'alimentazione delle porte seriali in Linux più alcuni semplici programmi. · La Linux serial mailing list. Per essere inclusi, inviate una email a majordomo@vger.rutgers.edu, con ``subscribe linux-serial'' nel corpo del messaggio. Se inviate '`help'' nel corpo del messaggio, riceverete un messaggio di aiuto. Il server gestisce anche molte altre liste di Linux. Inviate il comando ``lists'' per un elenco delle mailing list. 17.2. Libri Non stato capace di trovare un buon libro aggiornato sui modem. · The Complete Modem Reference by Gilbert Held, 1997. Contiene troppe informazioni che riguardano argomenti superati. Maggiori informazioni aggiornate possono essere trovate su Internet. · Modems For Dummies by Tina Rathbone, 1996. (Non l'ho mai visto.) · Ultimate Modem Handbook di Cass R. Lewart, 1998. 17.3. HOWTO · Cable-Modem mini-howto · ISDN Howto (non è un Howto di LDP) : drivers per ISDN "Modems". La maggior parte delle informazioni è in tedesco · Modems-HOWTO: In Francese (non usato nel creare questo Modem-HOWTO) · NET-3-HOWTO: tutto sul networking, incluso SLIP, CSLIP, e PPP · PPP-HOWTO: aiuto sul PPP incluso il set-up del modem. · Serial-HOWTO ha informazioni sulle schede seriali multiporta usate sia per terminali che per i banchi di modem. Tratta la porta seriale più dettagliatamente di questo HOWTO. · Serial-Programming-HOWTO: per certi aspetti della programmazione delle porte seriali · Text-Terminal-HOWTO: (incluso la connessione con modem) · UUCP-HOWTO: per informazioni sull'impostazione di UUCP 17.4. newsgroup Usenet · comp.os.linux.answers: FAQ, How-To, README, ecc. su Linux. · comp.os.linux.hardware: Compatibilità hardware con il sistema operativo Linux. · comp.os.linux.setup: Installazione di Linux e amministrazione del sistema. · comp.dcom.modems: Modem per tutti i sistemi operativi. 17.5. Siti Web · Comandi AT per modem Hayes: Technical Reference for Hayes (tm) Modem Users · Comandi per modem basati sul chip Rockwell · Un white paper che tratta la comunicazione seriale e le schede seriali multiporta è disponibile da Cyclades a http://www.cyclades.com. · Modem FAQ: Navas 28800 Modem FAQ · Curt's High Speed Modem Page · Molte informazioni sui modem a 56k 56k Modem = v.Unreliable · Links to modem manufacturers · Identifying modems by FCC ID · Lista parziale dei modem che funzionano/non funzionano sotto Linux modem list 18. Appendice A: Come funzionano i Modem (tecnica) (non finita) 18.1. La modulazione nei dettagli 18.1.1. Introduzione alla modulazione La modulazione è la conversione di un segnale digitale rappresentato da bit binari (0 o 1) in un segnale analogico che potrebbe assomigliare ad un onda sinusoidale. Il segnale modulato consiste in un segnale di un onda sinusoidale pura "portante" che è modificata per veicolare informazioni. Un'onda portante sinusoidale pura, non cambiando in frequenza e voltaggio, non genera un flusso di informazioni (ad eccezione del fatto che sia presente una portante). Per fare convogliare le informazioni modifichiamo (o moduliamo) questa portante. Ci sono 3 tipi principali di modulazione: frequenza, ampiezza e fase. Verranno di seguito spiegate. 18.1.2. Modulazione di frequenza Il più semplice metodo di modulazione è la modulazione di frequenza. La frequenza è misurata in cicli per secondo (di un'onda sinusoidale). È il conto del numero di volte in cui la forma dell'onda sinusoidale ripete se stessa in un secondo. È la stessa cosa del numero di volte che raggiunge il valore più alto in un secondo. La parola "Hertz" (abbreviato Hz) viene usato per intendere "cicli per secondo". Un semplice esempio di modulazione di frequenza è dove una frequenza significa uno 0 binario ed un'altra significa 1. Ad esempio, per alcuni modem obsoleti da 300 baud, 1070 Hz significa uno 0 binario mentre 1270 Hz significa un 1 binario. Questo viene chiamato "Frequency shift keying". Invece di solo due possibili frequenze, se ne potrebbero usare di più per consentire la trasmissione di più informazioni. Se abbiamo 4 differenti frequenze (che chiameremo A, B, C, e D), allora ognuna di queste potrebbe supportare un paio di bit. Ad esempio per inviare 00 si dovrebbe usare la frequenza A. Per inviare un 01, usiamo la frequenza B, per 10 usiamo C, per 11 usiamo D. In questo modo, usando 8 frequenze differenti potremo inviare 3 bit per ogni cambiamento di frequenza. Ogni volta che raddoppiamo il numero delle frequenze possibili, incrementiamo il numero di bit che possiamo rappresentare di 1. 18.1.3. Modulazione di ampiezza Una volta capito l'esempio della modulazione di frequenza sopra indicato, incluso le possibilità di rappresentare alcuni bit tramite un singolo spostamento nella frequenza, è facile capire sia la modulazione di ampiezza e la modulazione di fase. Per modulazione di ampiezza basta cambiare l'altezza (voltaggio) dell'onda sinusoidale equivalente per cambiare la frequenza dell'onda sinusoidale. Per un caso semplice ci potrebbero essere solo 2 livelli di ampiezza consentiti, una rappresentato da un bit 0 e l'altro rappresentato da un bit 1. Come spiegato per il caso della modulazione di frequenza, l'avere diverse possibili ampiezze risulterà in maggiori informazioni che si trasmettono per cambiamento in ampiezza. 18.1.4. Modulazione di fase Per cambiare la modulazione di fase di un onda sinusoidale in un certo perido di tempo, dobbiamo smettere di inviare questa vecchia onda sinusoidale ed immediatamente iniziare ad inviare una nuova onda sinusoidale della stessa frequenza ed ampiezza. Se iniziamo ad inviare la nuova onda sinusoidale allo stesso livello di voltaggio (e con la stessa pendenza) presente quando abbiamo interrotto l'invio della vecchia onda sinusoidale, non ci sarà nessun cambio di fase (e nessun cambio identificabile in assoluto). Ma supponiamo di avere iniziato la nuova onda sinusoidale ad un differente punto della curva dell'onda sinusoidale. Si dovrebbe probabilmente verificare un improvviso sbalzo di voltaggio al punto temporale dove la vecchia onda sinusoidale si è fermata ed è iniziata la nuova. Questo è uno spostamento di fase ed è misurato in gradi (deg.) Uno spostamento di fase di deg 0 (o di deg 360) significa nessun cambiamento in assoluto, mentre uno spostamento di fase di 180 inverte il voltaggio (e pendenza) dell'onda sinusoidale. Rendendolo in altri termini, uno spostamento di fase di 180 deg semplicemente salta in avanti di un mezzo periodo (180 deg) al punto di transizione. Naturalmente si potrebbe saltare di, diciamo, 90 deg o 135 deg. Così come nell'esempio della modulazione di frequenza, maggiori sono i possibili spostamenti di fase, maggiori bit possono essere rappresentati da un singolo spostamento di fase. 18.1.5. Modulazione combinata Invece di selezionare semplicemente sia la frequenza, l'ampiezza o la modulazione di fase, possiamo scegliere di combinare i metodi di modulazione. Supponiamo di avere 256 frequenze possibili, quindi possiamo trasmettere un byte (8 bit) per ogni spostamento di frequenza (visto che 2 elevato alla 8 equivale a 256). Supponiamo anche di avere altre 256 differenti ampiezze così che ogni spostamento in ampiezza rappresenti un byte. Supponiamo anche che ci siano 256 spostamenti di fase possibili. Poi in un certo momento vogliamo fare uno spostamento in tutte e 3: frequenza, ampiezza e fase. Questo significherebbe spedire 3 byte per ognuna di queste transazioni. Nessun metodo di modulazione in uso oggi fa veramente questo. Non è pratico a causa del tempo relativamente lungo che occorrerebbe per rilevare tutti i 3 tipi di cambiamento. Il problema principale è che frequenti cambi di fase possono far sembrare che sia accaduto un cambio in frequenza laddove in realtà non è successo. Per evitare questi problemi si potrebbe cambiare simultaneamente solo la fase e l'ampiezza (senza nessun cambio di frequenza). Questa viene chiamata modulazione di fase-ampiezza (qualche volta chiamata anche "quadrature amplitude modulation" = QAM). Questo metodo è usato per le comuni velocità dei modem di 14,4k, 28.8k, e 33.6k. Il solo caso significativo dove questo metodo di modulazione non viene oggi usato è per i modem a 56k. Ma anche i modem a 56k usano esclusivamente QAM (modulazione di fase-ampiezza) nella direzione dal vostro PC in uscita verso la linea telefonica. Qualche volta anche nell'altra direzione si ritorna alla modulazione QAM quando le condizioni della linea non sono sufficientemente buone. Quindi QAM (modulazione di fase-ampiezza ) rimane ancora il metodo più largamente usato nelle ordinarie linee telefoniche. 18.1.6. Modem 56k (v.90) Il metodo di modulazione usato sopra i 33.6k è completamente diverso dalla comune modulazione fase-ampiezza. Visto che le chiamate telefoniche ordinarie sono convertite in segnali digitali nelle centraline locali della compagnia telefonica, la velocità più elevata con la quale si possono spedire dati digitali tramite una ordinaria chiamata telefonica è la stessa di quella che la compagnia telefonica usa lungo la sua porzione digitale della trasmissione della chiamata telefonica. Qual'è questa velocità? Beh, è vicina ai 64Kbps. Dovrebbe essere 64k ma talvolta alcuni bit sono "rubati" per scopi di segnalazione. Ma se la compagnia telefonica sa che il collegamento è digitale, i bit potrebbero non essere rubati. Verrà presentato il caso dei 64k, quindi verrà spiegato perché la velocità reale è più bassa (56k o meno -- in genere significativamente meno). Quindi 64k è la maggiore velocità possibile per una chiamata telefonica ordinaria usando la porzione digitale del circuito che era stata concepita per inviare le codifiche digitali della voce umana. Per potere usare 64k, il modem deve sapere esattamente come la compagnia telefonica faccia la sua codifica digitale del segnale analogico. Questo compito è troppo complicato se entrambi gli estremi di una chiamata telefonica hanno un'interfaccia analogica alla compagnia telefonica. Ma se da una parte si ha una interfaccia digitale, allora è possibile (almeno in una direzione). Quindi se il vostro ISP ha una interfaccia digitale con la compagnia telefonica, l'ISP può inviare un certo segnale digitale attraverso la linea telefonica verso il vostro PC. Il segnale digitale dall'ISP viene convertito in analogico alla centralina telefonica vicina alla locazione fisica del vostro PC (forse vicino a casa vostra). Poi è compito del vostro modem cercare di capire esattamente che cos'era quel segnale digitale. Se può fare questo, allora la trasmissione a 64k (la velocità del segnale digitale della compagnia telefonica) è possibile in questa direzione. Che metodo usa la compagnia telefonica per decodificare in digitale i segnali analogici? Usa il metodo di campionare l'ampiezza del segnale analogico alla velocità di 8000 campioni per secondo. Ogni ampiezza campione è codificata come un byte a 8 bit (tipo ASCII). (Notare: 8 x 8000 = 56k). Questa viene chiamata "Pulse Code Modulation" = PCM. Questi byte sono poi inviati digitalmente sui circuiti digitali della compagnia telefonica dove diverse chiamate condividono un singolo circuito, usando uno schema di time-sharing chiamato "time division multiplexing". Poi finalmente nella locale centralina telefonica vicina a casa vostra, il segnale digitale viene demultiplexato risultando nello stesso segnale digitale così come originariamente creato da PCM. Questo segnale viene poi riconvertito in analogico ed inviato a casa vostra. Ogni byte da 8-bit crea una certa ampiezza del segnale analogico. Il vostro modem deve determinare cosa era quel byte PCM a 8 bit basandosi sulla ampiezza che rileva. Questa è (in un certo senso) una "demodulazione di ampiezza" ma non realmente. Non si tratta di "demodulazione di ampiezza" perché non vi è portante. In verità, viene chiamata "conversione di modulo" ("modulus conversion") che è l'inverso di PCM. Per determinare il segnale digitale che la compagnia telefonica ha usato per creare il segnale analogico, il modem deve campionare questo segnale di ampiezza analogica esattamente agli stessi punti temporali che la compagnia telefonica ha usato quando ha creato il segnale analogico. Per fare questo viene un generato un segnale temporizzato dal segnale residuo di 4k Hz sulla linea telefonica. I campioni di ampiezza che escono dalla vostra casa/ufficio ad 8k campioni/sec circa creano un segnale di 4k. Supponete che ogni altra ampiezza era di polarità opposta. Allora dovrebbe essere stata creata un'onda simile al seno di 4k Hz. Ogni ampiezza è in un certo senso un simbolo ad 8 bit e quando si campionano le ampiezze è conosciuto come "symbol timing". Ora la codifica di queste ampiezze in PCM non è lineare ed a basse ampiezza le differenze tra le ampiezze adiacenti sono molto piccole. Così per facilitare la distinzione delle ampiezze che sono ravvicinate tra loro, alcune ampiezze non sono usate nello schema di modulazione. Questo dà un delta più ampio tra le possibili ampiezze e fa sì che il modem le riconosca correttamente con più facilità. Se la metà dei livelli di ampiezza non fossero usati dal v.90 e se volesse essere equivalente ad ogni simbolo (livello di ampiezza consentito) che rappresenta 7 bit invece di 8. Ecco da dove proviene il 56k: 7 bit/simboli x 8k simboli/secondo = 56k bps. Naturalmente ogni simbolo genera in realtà 8 bit ma solo 128 byte dei possibili 256 sono effettivamente usati. C'è una tavola di codici che mappa questo 128 byte a 8 bit con quelli a 7 bit. Ma è un poco più complicato di questo. Se le condizioni della linea non rasentano la perfezione, allora sono usati anche meno livelli (simboli), risultando in velocità sotto i 56k. Anche a causa di regole governative che proibiscono gli alti voltaggi sulle linee telefoniche, certi alti livelli di ampiezza non posssono essere usati, risultando quindi in soli 53.3k circa al massimo per i modem a 56k. Notate che la parte digitale della rete telefonica è bi-direzionale. Questi due circuiti sono usati per una chiamata telefonica, uno in ciascuna direzione. Nella direzione dalla casa/ufficio verso l'ISP usa lo schema convenzionale di modulazione fase-ampiezza con un massimo di 36.6k (e non 53.3K) 19. Appendice B: "baud" contro "bps" 19.1. Un semplice esempio "baud" e "bps" sono forse due dei termini più abusati nel campo dei computer e delle telecomunicazioni. Molte persone usano questi due termini indifferentemente, quando in realtà essi sono diversi! bps è semplicemente il numero dei bit trasmessi per secondo. Il baud rate è la misura di quante volte per secondo un segnale cambia (o potrebbe cambiare). Per una comune porta seriale il bit 1 è -12 volt e il bit 0 è +12 v (volt). Se 38.400 bps sono una sequenza di 010101 ... dovrebbero essere anche 38.400 baud visto che il voltaggio cambia avanti e indietro da positivo a positivo a negativo ... e ci sono 38400 cambiamenti per secondo. Per un'altra sequenza, diciamo 111000111... ci saranno minori cambiamenti di voltaggio visto che per i tre 1 in sequenza il voltaggio rimane a -12 volt, eppure diciamo che abbiamo ancora 38.400 baud visto che esiste la possibilità che il numero di cambiamenti per secondo raggiunga quel valore. Vista in altro modo, mettiamo un immaginario marcatore che separi ogni bit (anche se il voltaggio potrebbe non cambiare). 38.400 baud quindi significa 38.400 marcature per secondo. La marcatura scatta all'istante del cambiamento permesso e sono in realtà marcati da un segnale di un clock sincronizzato generato dall'hardware ma non inviato attraverso il cavo esterno. Supponiamo che un "cambiamento" possa avere più dei 2 possibili risultati dell'esempio precedente (di +- 12 volt). Supponiamo che abbia 4 possibili risultati, ognuno rappresentato da un diverso livello di voltaggio. Ogni livello potrebbe rappresentare un paio di bit (come 01). Per esempio, -12 v potrebbe essere 00, -6v 01, +6b 10 e +12v 11. Ecco che la velocità di bit è doppia rispetto alla velocità di baud. Ad esempio, 3000 cambiamenti per secondo genereranno 2 bit per ogni cambiamento risultanti in 6000 bit per secondo (bps). In altre parole 3000 baud equivalgono a 6000 bps. 19.2. Esempi reali L'esempio di cui sopra è oltremodo semplice. Esempi reali sono molto più complicati ma si basano sullo stesso concetto. Questo dimostra come un modem che va a 2400 baud possa inviare 14400 bps (o più). Il modem acquisisce una velocità di bps maggiore di quella di baud, codificando molti bit per ogni cambio di segnale (o transizione). Quindi, quando 2 o più bit sono codificati per baud, la velocità in bps supera quella in baud. Se la vostra connessione modem-a-modem è di 14400 bps, si trasmetteranno 6 bit per segnale (o simbolo) di transizione a 2400 baud. Una velocità di 28000 bps è ottenuta da 3200 baud a 9 bit per baud. Quando la gente usa in modo equivoco il termine baud, probabilmente intende la velocità del modem (tipo 33.6k) La velocità di bps del normali modem erano precedentemente 50, 75, 110, 300, 1200, 2400, 9600. Esse erano anche le velocità bps nei cavi da porta seriale a modem. Oggi le velocità bps da modem a modem sono di 14.4K, 28.8K, 33.6K, and 56K, ma le velocità dalla porta seriale al modem non sono le stesse ma sono: 19.2K, 38.4K, 57.6K, 115.2K. Usando modem con una compressione V.42bis (massima compressione 4:1), le velocità fino a 115,2K bps sono possibili per modem a 33.6K (230.4K possibile per i modem a 56K). Eccettuati i modem a 56K, la maggior parte dei modem girano a 2400, 3000 o 3200 baud. A causa delle limitazioni di ampiezza di banda nelle linee telefoniche voice-grade, velocità in baud superiori a 2400 sono difficili da raggiungere e solo lavorando in condizioni di qualità della linea telefoniche perfetta. Come inizia questa confusione tra bps e baud? Bene, torniamo all'epoca nella quale i vecchi modem a bassa velocità erano considerati modem ad alta velocità, la velocità bps in effetti era uguale alla velocità baud. Un bit era codificato per ogni cambiamento di fase. La gente usava bps e baud intercambiabilmente, visto che rappresentavano lo stesso valore. Ad esempio, un modem a 300 bps aveva pure una velocità in baud di 300. Tutto questo cambia quando i modem più veloci entrarono in circolazione e la velocità in bit superò la velocità in baud. ''baud'' deriva da Emile Baudot, l'inventore della stampante telegrafica asincrona. Un modo per risolvere questo problema consiste nell'usare il termine "symbol rate" invece di "baud", quindi evitando di usare il termine "baud". 20. Appendice C: Connessione Terminal Server Questa sezione è adattata da Text-Terminal-HOWTO. Un server di terminale è qualcosa come un interruttore intelligente che può connettere molti modem (o terminali) ad uno o più computer. Non è un interruttore meccanico così esso può modificare le velocità ed i protocolli del flusso di dati che gli passano attraverso. Diverse compagnie costruiscono terminal server: Xyplex, Cisco, 3Com, Computone, Livingston, ecc. Ci sono di diversi tipi e capacità. È necessario un altro HOWTO per confrontarli e descriverli (inclusa la possibilità di crearsi il proprio terminal server con un PC Linux). La maggior parte sono usati per connettere modem piuttosto che connettere direttamente terminali. Un uso per essi è quello di connettere molti modem (o terminali) ad una rete ad alta velocità la quale si connette a dei computer host. Naturalmente il terminal server deve avere la potenza di calcolo ed il software per far girare protocolli di rete come se fosse per certi versi un computer. Il terminal server potrebbe interagire con l'utente e chiedergli quale computer connettere a quale altro, ecc. oppure potrebbe connettere senza chiedere. Si potrebbe qualche volta inviare dei jobs ad una stampante attraverso il terminal server. Oggi un PC ha sufficiente potenza di calcolo per agire come un terminal server eccetto che ogni porta seriale dovrebbe avere il proprio interrupt hardware. I PC hanno solo pochi interrupt di riserva per questo scopo e visto che sono hard-wired non potete creare più di tanto tramite software. Una soluzione è usare un'avanzata scheda seriale multiporta che ha il suo proprio sistema di interrupt (sui modelli a basso costo, condividono uno degli interrupt del PC tra diverse porte). Vedere Serial-HOWTO per maggiori informazioni. Se un PC ha Linux e fa girare getty su molte porte seriali, si potrebbe pensare ad esso come ad un terminal server. Esso è in effetti un terminal server se è collegato ad altri PC attraverso una rete e se il suo compito è principalmente quello di far passare dati e gestire gli interrutp della porta seriale ogni 14 (circa) byte. Un software chiamato "radius" è talvolta usato. Oggi i veri terminal server servono più che da semplici terminali. Essi servono dei PC che emulano terminali e sono talvolta collegati ad una batteria di modem connessi alle linee telefoniche. Alcuni hanno anche i modem costruiti al loro interno. Se un terminale (o un PC che lo emula) è connesso direttamente ad un modem, il modem dall'altro capo della linea potrebbe essere connesso ad un terminal server. In alcuni casi il terminal server per default si aspetta che i chiamanti usino pacchetti PPP, qualcosa che i terminali testuali reali non generano. 21. Appendice D: Altri tipi di Modem Questo HOWTO attualmente tratta dei comuni tipi di modem usati per connettere un PC ad una linea telefonica analogica ordinaria. Ci sono diversi altri tipi di modem, inclusi quei dispositivi chiamati modem ma che non sono veramente modem. 21.1. Modem Digitale-a-Digitale La definizione standard di un modem è talvolta allargata fino ad includere i modem "digitali". Oggi servizi diretti digitali sono forniti in diverse case ed uffici così che un computer possa inviare all'esterno segnali digitali direttamente (beh, quasi) alla linea telefonica. Ma un dispositivo è comunque richiesto per convertire il segnale digitale del computer in un tipo permesso sui circuiti telefonici e questo dispositivo è tavolta chiamato modem. Le successive 2 sezioni: ISDN e DSL trattano dei "modem" digitale-a- digitale. 21.2. "Modem" ISDN Il modem è in realtà un Terminal Adapter (TA). Un pacchetto Debian chiamato "isdnutils" è disponibile. C'è un ISDN Howto in tedesco con traduzione in inglese: . Si trova nella distribuzione SuSE di Linux e presumibilmente riguarda dei driver disponibili in quella distribuzione. C'è anche un pacchetto isdn4Linux ed un newsgroup: de.alt.comm.isdn4linux. Molti dei messaggi sono in tedesco. Potreste provare ad uasre un motore di ricerca (tipo DejaNews) per cercare "isdn4linux". 21.3. Digital Subscriber Line (DSL) DSL usa l'esistente doppino telefonico dalla vostra casa (ecc) alla locale centralina telefonica. Questo può essere usato se la vostra linea telefonica può accettare velocità superiori a quelle che un modem ordinario (diciamo 56k) invia. Rimpiazza il convertitore analogico-digitale nella locale centralina telefonica con un convertitore che può accettare un flusso di dati molto più veloce (in un formato differente naturalmente). Il dispositivo che converte i segnali digitali dal vostro computer al segnale usato per rappresentare i dati digitale sulla linea telefonica locale è anch'esso chiamato modem. Questo documento attualmente non tratta gli speciali aspetti di questi modem.