The Linux Linmodem-HOWTO

Sean Walbran sean(at)walbran.org e Marvin Stodolsky stodolsk(at)erols.com

v0.45, 5 Marzo 2001
Traduttore: Davide Di Lazzaro davide(at)dilazzaro.org Questo documento descrive il supporto per i Linmodem (hardware winmodem) in ambiente Linux. Mentre tale supporto è molto limitato (quasi esclusivamente sotto forma di moduli binari del kernel prodotti dai costruttori, ma non supportati), il numero di chipsets che hanno qualche forma di supporto sta crescendo rapidamente.

1. Introduzione

Questo documento è il Linux Linmodem HOWTO. E' da considerarsi come una guida rapida per aiutarvi a scoprire se esiste un modo per far funzionare il vostro (cosiddetto) winmodem sotto Linux, e, se esiste, come fare. Deve essere chiaro fin dall'inizio che è molto probabile che non esista tale supporto per il vostro winmodem: Esiste un supporto molto limitato per questi modems, spesso come moduli binari del kernel prodotti dai costruttori, ma senza supporto da parte loro (sebbene esista anche un piccolo numero di progetti open-source).

Tanto per essere più chiari: la cosa migliore da fare sotto Linux è sicuramente reperire un vero modem. Comunque, se siete impelagati con un winmodem, forse questo documento può darvi una mano.

Per reperire le notizie più aggiornate sui drivers per Linmodems visitate Il sito di RobClark, la nostra piccola pagina di risorse, e Linmodems.org gli archivi delle mailing list di. Argomenti più generali relativi ai modem, tipo IRQ e script di connessione, vengono trattati più diffusamente nelle più estese Modem-HOWTO, Serial-HOWTO, PPP-HOWTO, e in altre HOWTO correlate, reperibili al sito Linux Documentation Project ed altrove.

1.1 Copyright

Copyright (c) 2000,2001 by Sean Walbran, Marvin Stodolsky

Please freely copy and distribute (sell or give away) this document in any format. It's requested that corrections and/or comments be fowarded to the document maintainer. You may create a derivative work and distribute it provided that you:

If you're considering making a derived work other than a translation, it's requested that you discuss your plans with the current maintainer.

1.2 Liberatoria

Utilizzate le informazioni contenute in questo documento a vostro rischio. Si declina ogni potenziale responsabilità per i contenuti di questo documento. L'utilizzo dei concetti, esempi e/o altro contenuto di questo documento è completamente a vostro rischio.

Tutti i copyrights sono detenuti dai loro proprietari, a meno che diversamente specificato. L'uso di un termine in questo documento non influenza la validità di un marchio registrato o di servizio. In particolare, dato che il termine "Winmodem" è un marchi registrato di US Robotics/3Com, il termine "winmodem"viene qui utilizzato come da Rob Clark: deve essere letto come "Winmodems(tm), host-based modems, HCF-modems, HSP-modems, e ogni tipo di hardware modem-simile." Linux è un marchio registrato di LinusTorvalds.

La citazione di un particolare prodotto o marca non deve essere considerata come pubblicità.

Si raccomanda caldamente di eseguire un backup di ogni file importante e/o rilevante prima di eseguire qualsiasi procedura di installazione.

1.3 Crediti

Gran parte dei crediti individuali è fornita nel corpo del testo, dove appropriato.

Una grossa parte delle informazioni contenute in questo documento proviene da varie ottime fonti, quali Il sito di Rob Clark, le mailing lists di Linmodems.org, e dalle pagine Mobilix di Werner Heuser.

Un particolare ringraziamento va a Mark Spieth (mark(at)digivation.com.au) per le discussioni, consigli e per i molteplici e costanti contributi.

Questo documento è stato creato utilizzando la guida SGML-HOWTO di Stein Gojen,come descritto nel sito HOWTO-HOWTO.

1.4 Aggiornamenti e correzioni

La più recente versione HTML di questo documento è disponibile presso http://walbran.org/sean/linux/linmodem-howto.html, come singolo file HTML presso http://walbran.org/sean/linux/linmodem-howto-all.html, il sorgente SGML è disponibile presso http://walbran.org/sean/linux/linmodem-howto.sgml.

La vecchia versione di questo documento stava diventando ingombrante e difficile da gestire, così una riscrittura si è resa necessaria. Per evitare la perdita definitiva di quelle informazioni una copia della vecchia versione è mantenuta presso http://walbran.org/sean/linux/linmodem-howto-old.html.

Avete un Linmodem che funziona, ma non è descritto qui? Siete interessati nello sviluppo di un driver? Pensate che qualcosa in questo documento non sia corretta o sia fuorviante? Ritenete che il vostro lavoro o quello di qualcun altro sia stato qui utilizzato, ma non riconosciuto in maniera appropriata? Non esitate a contattarmi a sean(at)walbran.org con le vostre correzioni e suggerimenti.

2. Linmodems

2.1 Che cosa è un Linmodem?

Un Linmodem rappresenta l'implementazione per Linux di un "winmodem" (vedi la liberatoria). Questi apparecchi sono "meno di" un modem vero e proprio, dato che dipendono dal software per eseguire, in misura più o meno estesa, quelle funzioni che normalmente vengono svolte dall'hardware del modem. Il razionale alla base di tutto ciò è che, ovviamente, il software è più economico dell'hardware è può essere upgradato/espanso/migliorato senza usare cacciaviti (di solito); tuttavia, affinché il modem funzioni senza problemi è richiesto che il software giri sul proprio sistema operativo preferito.

2.2 Quali tipi di Linmodem hardware sono supportati?

Un numero sempre crescente di winmodems funziona sotto Linux. Ogni chipset per il quale esiste un driver ha una propria sezione in questo documento che ne descrive l'installazione. Tutti gli altri chipset non hanno un supporto noto per Linux (almeno non è noto a noi).

2.3 Come posso scoprire se il mio GeeWhiz 9.8.7 Modem / Laptop ha uno di questi chipsets?

Informazioni dal sistema

Si possono ottenere informazioni sull'hardware installato usando comandi quali:

MarvS nota che il Device Manager di Windows potrebbe fornire informazioni simili, ma bisogna ricordarsi che un costruttore spesso mette il proprio nome su un modem interno e che questa informazione potrebbe non essere così utile come sperato (p.es., che chipset ha un modem "Compaq Interno 56K"?). Delle informazioni aggiuntive possono talvolta essere ottenute tramite un modem log, implementato sotto MS Windows sotto forma di check box situata all'interno dei menu Dial Up Networking. Il file che risulta è C:\WINDOWS\MODEM.LOG. Questo file conterrà le stringhe di inizializzazione del modem, e probabilmente anche il nome del file di configurazione, che potrebbe contenere qualche altra informazione utile.

Nomi dei modem e numeri di identificazione

Conoscendo il nome esatto del vostro modem, potete provare a fare una ricerca sul grosso Linux Modem Compatibility Database presso Il sito di Rob Clark Il codice lettera/colore posto sulla sinistra della tavola di compatibilità indica se il vostro modem funziona o meno sotto Linux. Il codice "LM" identifica un Linmodem, e la nota indica il tipo di driver richiesto. Una "WM" indica un winmodem, e non è noto alcun supporto per Linux. Non date per scontato che modems con nomi simili contengano lo stesso chipset, o che abbiano comunque lo stesso comportamento! Il vostro WhizBang LX56 ed il WhizBang GT56 del vostro amico potrebbero avere organi interni completamente diversi.

Se non si conosce il nome esatto del modem, si può eseguire una ricerca basata sul suo numero di identificazione (su ogni modem è stampato un numero di registrazione, che può essere o l'identificativo della scheda del produttore, oppure il numero di registrazione FCC. Una fotografia esplicativa di tale numero su una scheda modem può essere vista presso http://www.idir.net/~gromitkc/fcc1.jpg presso Il sito di Rob Clark. Usate la funzione "Trova nella pagina" del vostro browser per cercare nel suo elenco di modems e FCC identificativi per ottenere le informazioni sul chipset/driver. In alternativa si può cercare direttamente sul database della FCC (US Federal Communications Commission) presso http://www.fcc.gov/oet/fccid/. Leggete le istruzioni con attenzione e fate attenzione a non confondere la O (lettera) con lo 0 (numero), ed altri simboli simili.

Laptops dotati di modems interni

Potrebbe non essere possibile ottenere l'identificativo della FCC, se per esempio avete un laptop che preferite non aprire, oppure avete deciso di acquistarne uno in particolare, ma il venditore non è così gentile da fornirvi le informazioni di cui avete bisogno, né ha una macchina da esposizione da aprire e "smanettarci" un pò. In questo caso potete tentare:

3. Setup generale e moduli del kernel

3.1 Supporto dei moduli del kernel

Tutti i kernel drivers qui elencati sono rilasciati come moduli del kernel, quindi dovete essere sicuri di avere un kernel che supporti i moduli. Inoltre, bisogna attivare il supporto per la "module version", al fine di adiuvare l'utilizzo di kernel e moduli che non siano della stessa versione, come verrà descritto più sotto. Se utilizzate un kernel di una distribuzione di Linux ragionevolmente recente, molto probabilmente tale supporto dei moduli è già attivato. Se compilate il kernel da voi, allora già dovreste sapere come attivarne il supporto moduli, tramite il Kernel HOWTO. Ad ogni buon conto, potete sempre controllare che le seguenti righe siano presenti nel vostro file di configurazione del kernel (che di solito è situato sotto /usr/src/linux):

CONFIG_MODULES=y
CONFIG_MODVERSIONS=y

3.2 ISA Plug-n-Play

Se possedete un modem ISA Plug-n-Play dovrete verosimilmente avere isapnptools installato per allocare le risorse per la scheda modem. Per fare ciò, oltre ad avere installato isapnptools, è necessario avere una linea per il modem nel file /etc/isapnp.conf. Leggete le pagine di manuale ed il Plug-and-Play-HOWTO, ma se non avete altri dispositivi ISA che vi interessano, fondamentalmente tutto quello da fare è:

  1. Configurate, se possibile, il vostro BIOS come "Non-PNP OS."
  2. Come root, eseguite pnpdump per generare un prototipo di file isapnp.conf basato sulle schede testate e sulle risorse attualmente utilizzate dal vostro sistema.
  3. Cercate l'output del modem e decommentate le linee corrispondenti all'IRQ (altrimenti inutilizzato) che desiderate utilizzare per il modem. Per esempio, il file isapnp.conf di Sean per un Thinkpad i1411 equipaggiato con un modem Lucent LT comprende:

    (CONFIGURE ACRd119/1 (LD 0                   
      (INT 0 (IRQ 11 (MODE +E)))                   
      (IO 1 (SIZE 8) (BASE 0x0100) (CHECK))       
      (NAME "ACRd119/1[0]{LT Win Modem        }") 
    # (ACT Y)                                    
    ))                                           
    
    Stranamente, almeno in questo caso, è stato necessario lasciare commentata la linea #(ACT Y). Se per voi non funziona in questo modo, provate l'altro.

  4. Copiate il file in /etc/isapnp.conf
  5. Fate il reboot. Al boot dovrebbe apparire un messaggio tipo 'Initializing ISA PNP devices...OK'. Se ciò non succede, avete probabilmente scelto una configurazione IRQ/DMA che è già utilizzata; provate un'altra delle opzioni fornite dall'output di pnpdump. (Notate che probabilmente il reboot non è necessario se eseguite isapnp con le giuste opzioni. Comunque è più semplice per l'utente inesperto fare un reboot.

3.3 Modems PCI

Se desiderate maggiori notizie sul vostro modem PCI di quelle fornite da cat /proc/pci possono essere preziose le utilità contenute nel pacchetto pciutils quali scanpci e lspci. In particolare, lspci -vv offre un notevole numero di informazioni, utili e preziose.

3.4 Strumenti per i moduli

I comandi seguenti sono utili quando si ha a che fare con i moduli. Molti richiedono i privilegi di root. Consultate le pagine di manuale (p.es., man insmod) per informazioni più dettagliate su questi comandi.

insmod -f

Un modulo con una versione corrispondente al kernel dovrebbe essere inserito con il comando modprobe nome_modulo; modprobe tenterà di inserire ogni altro modulo dal quale detto modulo dipenda (come determinato da depmod, descritto sotto).

Un singolo modulo può essere inserito (senza i moduli da cui dipende) con il comando insmod nome_del_modulo. Qualora il modulo fosse stato compilato con un kernel differente da quello corrente,insmod segnalerebbe la mancata corrispondenza delle versioni e rifiuterebbe di caricare il modulo. Si può, comunque, passare un'opzione per forzare il caricamento del modulo nonostante la mancata corrispondenza: insmod -f nome_del_modulo. Se il modulo utilizza un'interfaccia per il kernel che non cambia sostanzialmente con il cambiare della versione, il modulo verrà comunque inserito, e potrà essere più o meno funzionale.

E' questo il caso, per esempio, del modulo per il modem ESS esscom.o che, nonostante sia compilato sotto la versione 2.2.12, può essere forzatamente inserito con kernel successivi, e funzionare in maniera più o meno estesa fino alla versione 2.2.14 senza ulteriori modifiche; oltre la versione 2.2.15, è invece richiesto il patch per tty.h descritto oltre. L'inserimento forzato fallisce comunque con i kernels delle serie 2.4.

rmmod

Si può scaricare un modulo (rimuoverlo dal kernel) dopo l'uso dando il comando rmmod.

depmod

Il comando depmod analizza le dipendenze dei moduli. Si può testare la compatibilità di un modulo precompilato con il kernel corrente con un comando quale:

   depmod -e ltmodem.o
Nell'esempio specifico di ltmodem.o compilato con un kernel 2.2.12 che gira sotto 2.2.17, le informazioni fornite includono: Utilizzare un modulo con simboli irrisolti (unresolved symbols) può essere rischioso, come descritto sotto.

4. Trucchi e suggerimenti per moduli precompilati utilizzati con kernel di versioni differenti

Molti dei drivers per linmodems sono disponibili solamente come moduli binari del kernel precompilati. Di norma, i moduli binari funzionano in modo trasparente solo con il kernel per il quale sono stati compilati. Per questo motivo, riuscire a far funzionare un driver precompilato con il vostro kernel particolare, può rivelarsi una vera sfida.

Dato che il kernel di Linux è un animale in perpetuo cambiamento, è una vera sfortuna che molti venditori di modem/chip non abbiano ancora optato per il rilascio dei sorgenti dei loro drivers, cosa che assicurerebbe la vostra e nostra possibilità di modificare appropriatamente detti drivers, man mano che i sorgenti del kernel si evolvono. Alcuni dei moduli binari sono stati forzati a funzionare sotto alcuni kernel più recenti utilizzando vari trucchi, come verrà descritto sotto; comunque, anche se un modulo fosse reso funzionale, è buona cosa usarlo il meno possibile. Citando una email da Mark Spieth,

"Un driver non potrà mai lavorare in maniera appropriata, se sono presenti dei simboli irrisolti, dato che ciò significa che c'è qualcosa che non funziona. In più vuol dire che quel qualcosa che avrebbe dovuto essere chiamata chiamerà una cosa diversa nel kernel e ciò potrebbe essere qualsiasi cosa. Ciò è molto male."

Quindi, siate cauti nell'utilizzare moduli binari con un kernel di versione differente; procedete a vostro rischio. Se reputate fondamentale che il vostro modem funzioni, considerate di tornare ad una versione precedente del kernel che corrisponda a quella del modulo - una prospettiva senza dubbio ridicola. Nonostante questi avvertimenti, comunque, molti hanno utilizzato kernel e moduli non corrispondenti, incontrando solo noie minori (occasionali kernel panic) usando i trucchi e strumenti come i seguenti.

4.1 Fixscripting

Mark Spieth ha contribuito ad una serie progressivamente migliorata di "fixscripts", per editare un modulo binario in maniera tale da eliminare gli avvertimenti di discrepanza di versione. L'inserzione del modulo così "fissato" procede senza l'opzione -f, cioè semplicemente insmod nome_del_modulo. Le versioni più recenti rinominano anche i simboli del modulo per farle corrispondere con quelle esportate dal kernel, in maniera tale che i messaggi di errore "Unresolved symbols" non vengano ritornati dal test depmod -e. Bisogna evidenziare che questi cambiamenti sono quasi esclusivamente cosmetici - è ancora raccomandabile utilizzare il modulo il meno possibile.

Per usare il fixscript su, per esempio, il modulo binario Lucent ltmodem.o (che non è attualmente il modulo da utilizzare), create una directory di lavoro, per esempio /root/modem. Reperite l'ultima versione del fixscript da http://www.test.dclabs.com.au/linmodem/fixscript. Salvate il file come fixscript. Esaminatelo con less o con il vostro editor preferito, per controllare che non siano stati aggiunti accidentalmente gli hard stops del DOS. Questi appaiono come M in grassetto oppure M sottolineate, oppure come ^M, a seconda del vostro viewer/editor. NOTA: il viewer more NON mostra gli hard stops del DOS.

Rendete in file eseguibile con chmod +x fixscript. Generate un modulo "fissato" tramite, per esempio

    ./fixscript ltmodem.o ltmodem2217.o

Nessun messaggio di errore dovrebbe apparire testando le dipendenze con

    depmod -e ltmodem2217.o

l'inserimento dovrebbe avere successo con un semplice, non forzato,

    insmod ltmodem2217.o

Il "codice sorgente" fornito con alcuni moduli PCTel (un piccolo file in C) esegue un simile mascheramento quando compilato e linkato con le librerie binarie in quei pacchetti; al contrario il driver parzialmente open-source Lucent non compensa nessun cambiamento dell'interfaccia del kernel.

4.2 Patchare tty.h

Nella sua ricerca di far funzionare con kernel successivi al 2.2.14 il driver originale del modem Lucent LT (versione 5.68), totalmente binario, Mark Spieth ha notato che una semplice modifica nel kernel di Linux risolveva le principali incompatibilità occorse nel passaggio tra i kernels 2.2.14 e 2.2.16. Questo patch non è più necessario utilizzando il driver parzialmente binario e parzialmente sorgente (versione 5.78), ma resta utile per coloro con altri modems i cui drivers sia stati compilati con kernels pre-2.2.15.

Il 2.2.17 tty.h patchato ed alcuni pacchetti kernel 2.2.17 compilati con questo patch sono disponibili presso http://walbran.org/sean/linux/stodolsk/. Se preferite editare da voi il file, la linea da spostare è nella struttura tty_struct all'interno di include/linux/tty.h; questo ha un membro aggiuntivo poll_wait nei kernel più recenti. Muovete questo membro alla fine della struttura, così che i restanti offsets saranno gli stessi delle versioni precedenti alla 2.2.15, per cui compatibili con il modulo precompilato. Dopo questa modifica al sorgente sarà necessario ricompilare kernel e moduli.

4.3 Usare ppp.o dal Kernel 2.2.14

Esiste un trucco per l'uso di moduli binari con kernels successivi al 2.2.15, che nonne richiede la ricompilazione; comunque, dopo la scoperta del patch tty.h descritto sopra, questo trucco non è più necessario, né raccomandato. Ciò consiste nel sostituire il modulo /lib/modules/net/ppp.o con uno proveniente dal kernel 2.2.14. Christoph Hebeisen (cth(at)sfu.ca) ha riferito che l'uso di ppp.o versione 2.2.14 al posto della versione 2.2.16 con il modulo Lucent, ha fatto sì che funzionasse con kernels 2.2.16. Willie Green (willjr(at)lcc.net) ha confermato che tale trucco funziona anche con il modulo ESS. Dopo il semplice inserimento di un modulo di supporto versione-corrispondente:

    insmod slhc
Si inserisce il ppp.o discrepante dal sorgente 2.2.14
    insmod -f ppp.o 
Desideriamo enfatizzare il fatto che questo trucco dell'inserimento forzato è meno stabile della facile è più efficace modifica al file sorgente del kernel tty.h, come descritto sopra.

5. Chipsets specifici ed i loro drivers

5.1 IBM Mwave (Thinkpad 600E)

IBM ha un driver per il software modem del loro Thinkpad 600E, completamente open-source (sotto GPL) disponibile qui.

5.2 Lucent LT

Panoramica

Questo modem gode del maggior supporto sotto Linux, dato che ne esistono tre pacchetti driver diversi:

Bisogna notare che il modulo solo binario (da "linux568.zip"), contiene codice dal driver Linux GPL serial.c così, essendo il sorgente del driver del modem non disponibile, trafficare con questo driver è apparentemente in violazione della GPL. Distribuire il driver parzialmente open source ("i56lvp578.zip") può o non può essere tecnicamente legale, dato che il codice GPL, sebbene non ancora linkato al codice closed source, è certamente considerato in questo modo. Vedere questo numero di Kernel Traffic e l'archivio della Linux-Kernel mailing list per la settimana che comprende il 3 dicembre 2000, per maggiori dettagli.

Driver v5.78(c,d,e,...) - Installazione

Procuratevi il pacchetto per il vostro kernel da http://walbran.org/sean/linux/stodolsk/ e seguite le istruzioni aggiornate lì fornite.

Driver del costruttore, versione 5.68 - Installazione

Questo driver è superato dalla versione 5.78 descritta sopra; comunque, può ancora essere di qualche utilità in casi particolari.

  1. Procuratevi il pacchetto per il vostro kernel:
    1. da 2.2.12 a 2.2.15 http://linmodems.org/linux568.zip
    2. 2.2.15 e superiori: stessa URL, ma è richiesto il patch "tty.h"; vedi "Trucchi e suggerimenti..." sopra.
  2. estraete linux568.zip
  3. su (inserite la password di root al prompt)
  4. ./ltinst (un messaggio di errore 'file not found' verrà scritto, dovuto ad un difetto dello script di installazione; ignoratelo.)
Il vostro modem dovrebbe ora risultare accessibile come device /dev/modem oppure /dev/ttyS14.

Strumenti Open Source - Installazione

Vedere la documentazione allegata al sorgente per le istruzioni.

5.3 ESS

Panoramica

Sono disponibili driver solo binari per ES56T-PI (PCI) e ES56V-I (ISA), compilati sotto kernel 2.2.12-20 della Red Hat 6.0. Il driver è stato usato mediante inserimento forzato fino al kernel 2.2.15, ed usando il patch "tty.h" descritto nella sezione "Trucchi e suggerimenti..." fino al kernel 2.2.17.

Installazione

  1. Procuratevi i pacchetti per il vostro modem (notate che questi sembrano essere stati rimossi dal sito: proverò comunque a farne un mirror a http://walbran.org/sean/linux/stodolsk/)
  2. Per kernels 2.2.15 e successivi, applicate il patch tty.h (Vedere "Trucchi e suggerimenti..." sopra); ricompilate kernel e moduli.
  3. Estraete il pacchetto con: unzip nome_pacchetto
  4. Ottenete i privilegi di root: su (inserite la root password al prompt)
  5. Create il file di device: mknod /dev/esscom c 127 1
  6. Create un device accessibile: ln -s /dev/esscom /dev/modem
  7. Create un device accessibile: ln -s /dev/esscom /dev/ttyS15
  8. Impostate l'appartenenza del device: chgrp uucp /dev/esscom
  9. Impostate i permessi del device: chmod 666 /dev/esscom
  10. Mascherate la versione del modulo (Vedere "Trucchi e suggerimenti..." sopra): ./fixscript essmodem.o essmodem.fix.o
  11. Installate il modulo: cp essmodem.fix.o /lib/modules/`uname -r`/misc/essmodem.o
  12. Inserite il modulo nel kernel: insmod -f essmodem
  13. (Opzionale) Provvedete per il caricamento automatico del modulo: aggiungete una linea "alias char-major-127 essmodem" al file /etc/modules.conf o /etc/conf.modules

5.4 PCTel

Panoramica

I drivers binari possono essere reperiti presso http://www.idir.net/~gromitkc/winmodem.html#drivers.

Un pacchetto di installazione stile-Debian per kernel 2.2.16 è stato reso disponibile da Corel presso ftp://ftp.corel.com/pub/linux/CorelLinux/dists/corellinux-1.2/corel/binary-i386/utils/pctel-kernel-2.2.16-driver-cdl-v1.0_1.0.deb. Un pacchetto .gzip/tar derivato dal .deb è reperibile qui. In aggiunta Thomas Wright ha fornito un driver per il kernel 2.4, anche questo reperibile qui. Sono noti altri pacchetti per i quali è sufficiente la compilazione di minima descritta sotto.

Installazione

Esistono apparentemente due tipi di pacchetti per moduli per PCTel.

  1. Un pacchetto (rpm o deb) che installa due moduli, pctel_hsp.o e pctel_pci.o, in /lib/modules/2.2.16.

    Con questo pacchetto, se usate un kernel più recente del 2.2.16, avrete bisogno di forzarne l'inserzione (insmod -f); qualora ciò non andasse a buon fine, potete provare il metodo "fixscript", usato in precedenza con i moduli Lucent 5.68 ed ESS sebbene, per quanto ne so, non è mai stato ancora provato. Se avete un kernel precedente al 2.2.16, dovreste prendere in considerazione l'upgrade, altrimenti tentate lo stesso il "fixscript" (anche questo non è garantito che funzioni). Se riuscite nell'intento, per cortesia fatemelo sapere.

  2. Un pacchetto che, una volta estratto, fornisce una serie di librerie (hsp.a, etc...) ed un piccolo file sorgente in C (ptmodule.c), che dovrebbero essere messi in directory quali lib/ e src/module/. Se non avete queste directory, createle ed organizzatei files con:
    mkdir lib
    mkdir src
    mkdir src/module
    mv *.a lib/
    mv Makefile *.c src/module
    

    Ora posizionatevi nella directory src/module e digitate make. Questo dovrebbe generare il modulo pctel.o, che apparirà nella directory lib. (Il modulo non è il file object ptmodule.o presente in src/module!)

    La versione apparente del modulo generato in questo modo corrisponderà a quella del vostro kernel.

Una volta ottenuti i moduli, procedete all'installazione come segue:

  1. Ottenete i privilegi di root: su (inserite la root password al prompt)
  2. Create il file di device: mknod /dev/pctel c 62 79
  3. Create un device accessibile: ln -s /dev/pctel /dev/modem
  4. Create un device accessibile: ln -s /dev/pctel /dev/ttyS15
  5. Impostate l'appartenenza del device: chgrp uucp /dev/pctel
  6. Impostate i permessi del device: chmod 666 /dev/pctel
  7. Installate il modulo (solo per il pacchetto del secondo tipo, vedi sopra): cp pctel.o /lib/modules/`uname -r`/misc/
  8. Inserite il modulo (od i moduli) nel kernel, con insmod -f nomemodulo

5.5 Conexant/Rockwell HSF

Esiste un driver per i kernels 2.2.14, 2.2.16 e 2.2.17 presso http://www.olitec.com/pci56kv2.html. La pagina è in francese, ma i comandi di installazione sono scritti in grassetto rosso. In pratica scaricate il pacchetto, estraetelo con tar -zxvf, ed eseguite lo script di installazione ins_all.

Molto probabilmente, comunque, non funzionerà - pochissime persone sono riuscite nell'intento.

Alcuni fatti sul driver già sono noti:

In breve, questo driver non è stato ancora completamente esplorato; controllate gli archivi delle mailing list presso http://linmodems.org, ed in particolare questo thread, per ulteriori discussioni ed informazioni. Se qualcuno riuscisse a far funzionare con successo il modem, sarei davvero interessato a sapere come ha fatto.

5.6 Intel (precedentemente Ambient Technology, precedentemente Cirrus Logic)

HaM

Un driver per il modem HaM è disponibile presso http://developer.intel.com/design/modems/support/license/r-333-5.htm

CL-MD5620DT

Mikhail Moreyra ha scritto un driver GPL per il chipset CL-MD5620DT, che può raggiungere i 33.6 kbps; comunque questo software è nello stadio alfa e va trattato con cautela. Potete reperire il driver presso http://linmodems.org/CLModem-0.3.0.tar.gz. Gabriel Gambetta (ggambett(at)internet.com.uy) ha presentato una versione patchata del driver, per utilizzare i comandi standard AT; potete scaricare questa versione del driver presso il sito di Rob Clark qui.

5.7 3Com

Mini-PCI

Una richiesta di commenti è stata postata da una persona autorizzata della 3Com, circa la possibile domanda per driver solo-binari per la loro combinazione miniPCI NIC/winmodem qui sulla mailing list di Linmodems.org; cortesemente rispondete all'indirizzo fornito, linmodem@new-n-used.com, e non alla mailing list. Sebbene a quanto ne so, nessun driver sia stato ancora rilasciato, Werner Heuser pagina miniPCI ha maggiori informazioni e links.

5.8 AMR

Ian Stewart riporta che sta lavorando ad un "driver di medio livello" per il codec AC97.

6. Risoluzione dei problemi

Così avete letto tutto questo documento, il Modem-HOWTO, ed il PPP Howto, siete sicurissimi che il vostro modem corrisponde ad uno dei drivers disponibili, ma ancora non funziona? Ci sono svariati punti durante il processo in cui qualcosa può andare storto.

Linux in genere mantiene dei records delle connessioni che sono molto utili nell'individuazione e risoluzione dei problemi. I loro nomi variano sia da distribuzione a distribuzione, sia a seconda del software di Dial-in, ma i log files /var/log/messages, /var/log/syslog dovrebbero essere in grado di fornire un minimo di informazione.

Sia per risolvere i problemi che per chiedere aiuto in una mailing list, sarà utile raccogliere le informazioni qui sotto richieste. Come root, spostatevi nella directory nella quale gli scripts di installazione del modem sono situati, e lanciate uno script di registrazione, come mostrato sotto. Una volta che lo script è terminato con "exit", copiatelo al di fuori della vostra partizione di Linux per trasmetterlo alla lista che può fornirvi aiuto.

(Le righe con # sono commenti esplicativi.)

# Inizia la registrazione,
script ModemTest.txt 
# inserite quante più informazioni sul modem avete
echo nome winmodem, costruttore, designazione, e chip se possibile
# questo fornisce la versione corrente del kernel
uname -r
# questo dà informazioni sulle porte seriali 
setserial -agv /dev/ttyS*
# questo dà informazioni sugli interrupts (irq)
cat /proc/interrupts
# mostra il contenuto dello script di installazione del modulo (inserite il nome dello script):
cat NomeScript
# Controlla se lo script è eseguibile:
ls -l NomeScript
# la risposta è OK se ha "x" come sotto:
# -rwxrw-rw-  1 root     root  654 Jan  6  2000 ltinst
# altrimenti rendetelo eseguibile con:
chmod o+x NomeScript
# verificate con
ls -l NomeScript
# se NomeScript non è stato ancora eseguito con successso con questo kernel
# eseguitelo con:
 ./NomeScript
# controllate dove punta il link simbolico /dev/modem:
ls -l /dev/modem
# Qual'è il NomeDevice specificato nel NomeScript (/dev/ttyS14 o...?)
echo NomeDevice
# qual'è il nome del modem driver? Qualcosa tipo NomeDriver.o
# con il suffisso ".o" che indica che è un binario compilato
echo Questo è il mio NomeDriver.o
# se è stato inserito nel "Modules Path"
# Provate a mostrarlo nel percorso con:
find /lib/modules | grep NomeDriver
# NomeDriver è fra i moduli installati nel kernel?
lsmod
# altrimenti provate un semplice inserimento:
insmod ./NomeDriver.o
# se era già nel Modules Path, sarà sufficiente il seguente:
insmod NomeDriver
# controllatene l'inserimento:
lsmod
# se non inserito, provate a forzarlo:
insmod -f ./NomeDriver
# listate di nuovo il modulo inserito.
lsmod
# Se NomeDriver NON è listato, 
# c'è una incompatibilità fra l'hardware del modem, driver e kernel.
# Sforzi ulteriori non sarebbero di alcun aiuto.
# Se NomeDriver è listato, allora cerchiamo di produrre un pò più di informazioni.
# Per prima cosa, rieseguite l'utilità di configurazione 
# utilizzata per settare la connessione telefonica della vostra installazione di Linux.
# Ricordatevi poi di togliere la vostra PassWord da questo record.
# L'utility vi chiederà, con ogni probabilità le seguenti informazioni 
# che dovrete avere a portata di mano:
# La porta da usare (/dev/modem oppure /dev/ttySn), Numero telefonico, UserName, PassWord. 
# Eseguite il programma di configurazione.
IlTuoProgConf
# Per terminare la registrazione 
exit

Se il dial-in non ha avuto successo, appendete a questo un record dal vostro file log. Come esempio, viene mostrata di seguito una sezione di un /var/log/syslog da un sistema Debian Linux.

7. FAQ

7.1 Possiedo un winmodem. Funzionerà sotto Linux?

Probabilmente no. Consultate la sezione "Quali tipi di Linmodem hardware sono supportati?" sopra, e controllate il Linux Modem Compatibility database presso il sito di Rob Clark.

7.2 Ho "NO DIALTONE".

Provate a settare l'opzione del vostro BIOS da "PNP OS" a "non-PNP OS", da "Windows" a "Altro SO ", od equivalente.

Utenti Conexant: Consultate la sezione Conexant, sopra.

7.3 Ottengo un errore del tipo "device o risorsa occupato".

7.4 Ottengo degli unresolved symbols quando eseguo il fixscript/inserisco il modulo.

Gli unresolved symbols sono un vero pericolo di discrepanza fra versioni e, in generale, sono una brutta cosa per quanto quasi inevitabili con i moduli binari. Se il fixscript riporta unresolved symbols, o il modulo non funziona nonostante questi, potreste non avere chances con quella combinazione di kernel/modulo; comunque, alcuni rari casi coinvolgono i moduli come:

Se un modulo funziona in maniera instabile, e possibile che, in determinate circostanze quei simboli vengono evitati, mentre in altre andiate a sbatterci contro. Provate programmi di dialup diversi (wvdial, kppp), che chiamano differenti set di funzioni a parità di condizioni. E' anche possibile che il fixscript, ideato per il modulo lucent, non riesca a "fissare" i simboli utilizzati nel vostro modulo. Se non trovate nessuna combinazione che funzioni, considerate di scalare ad un kernel che abbia una versione più vicina a quella del modulo.

7.5 Il mio modem PCTel non funziona.

7.6 Il modem fa il numero e si connette senza problemi, ma poi lascia cadere la connessione.

Questo problema viene riportato spesso; può avere alcune soluzioni, o nessuna:

  1. E' possibile che il modem sia installato correttamente e funzioni altrettanto bene, ma che abbiate un problema con la configurazione ppp. In particolare, se trovate un errore nel log tipo "peer is not authorized," provate a cambiare "auth" con "noauth" in /etc/ppp/options, e/o decommentate "auth" e "lock" (ponendo un '#' all'inizio della linea). Corel ha una FAQ su questo problema a http://linux.corel.com/support/html/9314.htm.
  2. E' stato riportato che un programma tipo kppp può dare un simile messaggio di errore in presenza di discordanza tra kernel e moduli, mentre un altro come wvdial, a parità di moduli ed hardware non dà lo stesso errore. Provate a cambiare ppp dialer e vedete se funziona.
  3. Infine, c'è la potenziale correlazione con il supporto audio. Paragonando la funzionalità di ltmodem.o con/senza supporto audio nel kernel, il dial-in è OK, ma ppp non funziona con kernels senza supporto audio.

    Molte distribuzioni mantengono un file di configurazione del kernel insieme a quest'ultimo. Per la Debian è il file

      /boot/config-version
    
    Le scelte positive possono essere rapidamente mostrate con:
      grep SOUND /boot/config-version |grep -v not
    
    Nel caso specifico di una versione 2.2.17:

    # grep SOUND  /boot/config-2.2.17 |grep -v not
    CONFIG_SOUND=m
    CONFIG_SOUND_OSS=m
    CONFIG_SOUND_SB=m
    CONFIG_SOUND_MPU401=m
    CONFIG_SOUND_YM3812=m
    CONFIG_SOUND_VMIDI=m
    CONFIG_SOUND_YMPCI=m
    CONFIG_LOWLEVEL_SOUND=y
    

    Sia CONFIG_SOUND=m che CONFIG_SOUND=yes dimostrano che il kernel ha il supporto audio(come semplice output audio).

    Se nulla di quanto detto funziona, dovreste considerare l'utilizzo di una versione del kernel più vicina a quella del modulo. Altrimenti, tentate la mailing list presso Linmodems.org per avere aiuto.

7.7 Ottengo un kernel panic alla chiusura della connessione o scaricando il modulo.

Ci sono un paio di soluzioni per ciò, anche se nessuna delle due potrebbe funzionare:

7.8 Niente sembra funzionare. A chi rivolgermi per avere aiuto?

Se tutto sembra perduto, consultate la sezione "Risoluzione dei problemi" sopra e prendete in considerazione l'invio delle informazioni lì descritte la mailing list presso Linmodems.org.

7.9 Chi ha scritto il driver per il mio winmodem, e come faccio a contattarlo?

Se non viene fornito alcun indirizzo per i contatti, potete presumere che è stato qualcuno sotto contratto del costruttore che probabilmente non ha l'autorità di rinnovare/rilasciare/cambiare il codice sorgente, e che probabilmente non ha nemmeno il tempo di rispondere alla vostra mail in ogni caso. Vedete, per esempio, http://lwn.net/1999/1209/a/lucent.html

8. Appendice

8.1 Parametri del Modulo PCTel: Country Code (Codice Nazionalità)

Quello che segue è preso da uno dei files readme PCTel. Potete quindi scegliere il codice appropriato inserendo il modulo con un parametro tipo:

insmod pctel.o country_code=7
(il "7" viene sostituito dal vostro country code, preso dalla lista sotto). Grazie a Jonathan Emery per aver puntualizzato la sintassi corretta.

Settare e riportare il country code.

Questo driver usa un parametro del modulo per settare il giusto country code per le varie linee telefoniche delle varie nazioni, ed è in grado anche di riportare il codice settato.

Ecco due versioni per la selezione ed il riporto del country_code:

VERSIONE #1:

Per settare il country code:
"country_sel_rep   sel   7" setterà il country code a 7.

Per interrogare il driver sul country code attualmente settato:
"country_sel_rep   rep" ritorna il country code corrente all'uscita del programma.

VERSIONE #2:

Per settare il country code: 
"country_sel   7" per settare il country code a 7.

Per interrogare il driver sul country code attualmente settato:
"country_rep" ritorna il country code corrente all'uscita del programma.

country_code                    country_name

    1                           USA
    2                           FRANCIA
    3                           GERMANIA
    4                           ITALIA
    5                           SVEZIA
    6                           REGNO UNITO
    7                           GIAPPONE
    8                           AUSTRALIA
    9                           SPAGNA
   10                           TAIWAN
   11                           SINGAPORE
   12                           COREA
   13                           SVIZZERA
   14                           NORVEGIA
   15                           OLANDA
   16                           BELGIO
   17                           CANADA
   18                           IRLANDA
   19                           PORTOGALLO
   20                           POLONIA
   21                           UNGHERIA
   22                           FINLANDIA
   23                           DANIMARCA
   24                           AUSTRIA
   25                           S.AFRICA
   26                           NAZIONI CTR21
   27                           CINA
   28                           MALESIA
   29                           LUSSEMBURGO
   30                           GRECIA
   31                           ISLANDA
   32                           NUOVA ZELANDA
   33                           BRASILE