sean(at)walbran.org
e Marvin Stodolsky stodolsk(at)erols.com
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.
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.
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.
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.
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.
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.
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.
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).
Si possono ottenere informazioni sull'hardware installato usando comandi quali:
cat /proc/pci
e lspci
pnpdump
e isapnp
cardctl ident
dmesg | more
e cat /proc/interrupts
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.
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.
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:
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
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 è:
pnpdump
per generare un prototipo di file isapnp.conf basato sulle schede testate e sulle risorse attualmente utilizzate dal vostro sistema.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.
/etc/isapnp.conf
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.
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.
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.
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.
Si può scaricare un modulo (rimuoverlo dal kernel) dopo l'uso dando il comando rmmod
.
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.oNell'esempio specifico di ltmodem.o compilato con un kernel 2.2.12 che gira sotto 2.2.17, le informazioni fornite includono:
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.
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.
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.
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 slhcSi inserisce il ppp.o discrepante dal sorgente 2.2.14
insmod -f ppp.oDesideriamo 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.
IBM ha un driver per il software modem del loro Thinkpad 600E, completamente open-source (sotto GPL) disponibile qui.
Questo modem gode del maggior supporto sotto Linux, dato che ne esistono tre pacchetti driver diversi:
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.
Procuratevi il pacchetto per il vostro kernel da http://walbran.org/sean/linux/stodolsk/ e seguite le istruzioni aggiornate lì fornite.
Questo driver è superato dalla versione 5.78 descritta sopra; comunque, può ancora essere di qualche utilità in casi particolari.
estraete linux568.zip
su
(inserite la password di root al prompt)./ltinst
(un messaggio di errore 'file not found' verrà scritto, dovuto ad un difetto dello script di installazione; ignoratelo.)/dev/modem
oppure /dev/ttyS14
.
Vedere la documentazione allegata al sorgente per le istruzioni.
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.
unzip
nome_pacchettosu
(inserite la root password al prompt)mknod /dev/esscom c 127 1
ln -s /dev/esscom /dev/modem
ln -s /dev/esscom /dev/ttyS15
chgrp uucp /dev/esscom
chmod 666 /dev/esscom
./fixscript essmodem.o essmodem.fix.o
cp essmodem.fix.o /lib/modules/`uname -r`/misc/essmodem.o
insmod -f essmodem
/etc/modules.conf
o /etc/conf.modules
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.
Esistono apparentemente due tipi di pacchetti per moduli per PCTel.
/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.
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:
su
(inserite la root password al prompt)mknod /dev/pctel c 62 79
ln -s /dev/pctel /dev/modem
ln -s /dev/pctel /dev/ttyS15
chgrp uucp /dev/pctel
chmod 666 /dev/pctel
cp pctel.o /lib/modules/`uname -r`/misc/
insmod -f
nomemoduloEsiste 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:
tty.h
(Vedere "Trucchi e suggerimenti..." sopra)..inf
per altri sistemi telefonici presso la linmodems mailing list
qui;
altri hanno provato a modificare il file lin_hsf.inf
o a copiare (totalmente o parzialmente) il file .inf
dalla propria installazione di Windows.
Un uso con pieno successo del modem è stato riportato dalla Francia e dall'Australia, da altre nazioni con livelli minori di successo (Spagna,...?).AT&FW2
; John Torriero in Australia ha avuto successo con un cambiamento minimo al file .inf
e ad alcune stringhe di inizializzazione come descritto in
qui .Un driver per il modem HaM è disponibile presso http://developer.intel.com/design/modems/support/license/r-333-5.htm
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.
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.
Ian Stewart riporta che sta lavorando ad un "driver di medio livello" per il codec AC97.
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.
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.
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.
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:
slhc_xxxx
: Probabilmente dovete inserire il modulo slhc prima dei moduli del modem/ppp; usando modprobe al posto di insmod dovrebbe ovviare lo stesso al problema.printk, jiffies
: Il vostro kernel potrebbe essere compilato con il SMP abilitato. Nessuno dei moduli binari è SMP-safe, e probabilmente lavorerà solo su macchine con un singolo processore e con un kernel per singolo processore, ovvero con SMP disabilitato. Provate a ricompilare il kernel, o ottenetene una versione con SMP disabilitato. (Grazie a Tom Reinertson (treinertson(at)uswest.net)) tty_xxxx
con esscom.o:
I primi fixscripts non erano in grado di trattare i simboli versione-specifici in questo modulo. Versioni più recenti, in grado di fissare anche questo modulo sono disponibili presso
http://www.test.dclabs.com.au/linmodem/fixscript
Questo problema viene riportato spesso; può avere alcune soluzioni, o nessuna:
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. Molte distribuzioni mantengono un file di configurazione del kernel insieme a quest'ultimo. Per la Debian è il file
/boot/config-versionLe scelte positive possono essere rapidamente mostrate con:
grep SOUND /boot/config-version |grep -v notNel 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.
Ci sono un paio di soluzioni per ciò, anche se nessuna delle due potrebbe funzionare:
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.
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
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