<- HiL - Intro - Indice Generale - Copertina - HiL - SCSI -> |
Hardware in Libertà
L'articolo...Continua la trattazione dell'argomento legato alla tecnologia ADSL e ai sistemi GNU/Linux. In questa puntata parleremo dei dispositivi Conexant. |
Una delle più grandi difficoltà che un utente Linux deve affrontare è la compatibilità hardware. L'atteggiamento più furbo è quello di verificare, prima dell'acquisto, l'esistenza del supporto per Linux della periferica che ci interessa.
In questo articolo di Hardware in libertà vi parlerò della mia esperienza riguardo la ricerca di un driver per un modem ADSL-USB con chipset Conexant.
Il modem a cui farò riferimento è distribuito dall'Aethra: è lo StarModem. Ad ogni modo rammentate che quel che dirò di seguito è valido per qualsiasi modem ADSL Access Runner.
Nemmeno a dirlo, questo prodotto è perfettamente funzionante con sistemi operativi Microsoft, ed i driver sono forniti nel CD allegato al modem. Per per Linux... niente!
Lo StarModem mi era stato "regalato" ad un euro dal mio provider al
momento dell'attivazione del contratto ADSL, ed io preventivamente mi ero
informato per verificare la compatibilità con Linux.
Una rapida ricerca su Aethra Starmodem aveva evidenziato che è
perfettamente funzionante con gli eciadsl (si veda: http://journal.pluto.it/pj0308/adsl_mini2.html);
contento me lo sono fatto inviare! Appena arrivato ecco l'amara sorpresa: il
mio Starmodem non montava chipset Globespan bensì un Conexant. Quindi
niente da fare: gli eciadsl non sono funzionanti. Stesso nome ma modello
diverso!
Non sto qui a raccontarvi quanto tempo abbia passato su Google, gruppi, IRC. Potete immaginarlo da soli. Dopo tante ricerche sono riuscito a trovare la soluzione, anzi, le soluzioni.
La prima è Cxacru (http://sourceforge.net/projects/accessrunner/), un progetto spagnolo OpenSource sul chipset AccessRunner della Conexant nel quale, solo da qualche mese, è stato aggiunto il supporto per il modem dell'Aethra.
La seconda soluzione è un "arrangiamento" di driver esistenti della Conexant stessa.
Per quanto riguarda la prima soluzione, in rete si trovano parecchi
tutorial (installazione e funzionamento): rimando gli interessati a qualche
link alla fine dell'articolo.
Voglio invece soffermarmi sulla seconda soluzione, che tra le altre cose
è la più veloce e semplice da utilizzare.
Prima di iniziare: è chiaro che il nostro sistema deve essere già configurato per il supporto di periferiche USB (si veda: http://journal.pluto.it/pj0301/adsl_mini.html), e che debbono essere già installate le librerie usbutils (per il comando lsusb).
Montiamo il filesystem USB, colleghiamo il modem e verifichiamo che il nostro modem abbia un chipset Conexant (leggendo il product id ed il vendor id):
// Monta il file system USB |
Il comando lsusb (delle usbutils) legge le possibili corrispondenze (vendor id - vendor name) dal file /usr/share/usb.ids. Se il modem è un Conexant apparirà quindi una scritta del tipo:
#: lsusb |
Nel mio caso 0572 e cb06 sono rispettivamente il vendor id ed il product
id dell'Aethra Starmodem con chipset Conexant.
(vedere anche: http://dsl.linux.it/ChipsetConexantUsb)
Fatta questa verifica occorre procurarsi i sorgenti dei driver. Su un sito di un azienda telematica francese troviamo i sorgenti (http://www.olitec.com/adsl-linux.html) ed inoltre dal CD del nostro modem possiamo scaricare il firmware (il file CnxE2Fw.bin) per non utilizzare quello di un'altra azienda distributrice. Quest'ultimo va copiato nella directory /etc/.
// Preleviamo dal cd del nostro modem il file CnxFwE2.bin e lo copiamo in /etc #: mount /mnt/cdrom #: cp `find /mnt/cdrom -name CnxE2Fw.bin` /etc/ // Scarichiamo i sorgenti dal sito della Olitec e scompattiamo #: cd /tmp #: wget http://www.olitec.com/pub/USBADSLV151-1008fr.tar.gz #: tar xfz USBADSLV151-1008fr.tar.gz #: cd USBADSL |
A questo punto dobbiamo semplicemente modificare i valori VID e PID nelle due "#define" del file customer.h ove dovremo inserire i valori ritornati da lsusb, ossia:
#define HSB_USB_CUSTOMER_VID 0x0572 #define HSB_USB_CUSTOMER_PID 0xcb06 |
Salviamo il file con le modifiche ed invochiamo make: sarà
così creato il modulo e2.o.
Per la compilazione del modulo è necessario aver installato nel
sistema gli header del kernel.
Ora possiamo copiare e2.o nella directory dei moduli del nostro kernel:
#: cp e2.0 /lib/modules/`uname -r`/misc/ #: gzip e2.0 // Sulla mia slack ho prima estratto il file tramite gzip #: cp e2.o.gz /lib/modules/`uname -r`/misc/ |
Per attivare il modem occorre, da root, caricare il modulo e2:
// Carica modulo e2 #: modprobe e2 // Attende 60 secondi #: sleep 60 // Carica l'interfaccia hsb0 #: ifconfig hsb0 up // Allinea la connessione con la richiesta di assegnazione del numero ip #: dhcpcd -n hsb0 |
In realtà questa procedura non sempre funziona, forse a causa di
un bug nella comunicazione tra i moduli del controller USB e il modulo
e2.
A volte è necessario rimuovere il modulo del controller USB e
ricaricarlo; nel mio caso, uso la seguente sequenza di comandi:
#: modprobe e2 #: sleep 10 #: rmmod usb-ohci #: sleep 5 #: modprobe usb-ohci // Attesa per evitare un messaggio di errore #: sleep 75 #: ifconfig hsb0 up #: dhcpcd -n hsb0 // NOTA: A volte potrebbe essere necessaria una doppia chiamata a dhcpcd // nella seguente maniera #: sleep 10 #: dhcpcd -n hsb0 // Verifichiamo con un ifconfig se l'interfaccia hsb0 è stata correttamente caricata #: ifconfig |
Per la prima volta i parametri di configurazione della connessione possono essere immessi attraverso il vostro browser web preferito [Firebird :)], allo stesso modo di Windows, ossia puntando alla pagina http://10.0.0.2.
Per rimediare ad una caduta di connessione basta dare da riga di comando un semplice "dhcpcd -n hsb0".
Curiosando sul nostro modem con uno scanning delle porte (su 10.0.0.2) notiamo, oltre alla porta 80 [HTTP], anche altre porte aperte (tipo l'FTP): lascerò questo punto non trattato, per stimolare la curiosità dei lettori!
Piccolo script di avvio automatico della connessione da inserire, ad esempio, in crontab:
#!/bin/sh ###################### # # avvio Starmodem # automatico v 0.1 fiblan # verifica se esiste una connessione # # `$0 resume` esegue semplicemente # una semplice richiesta di ip `$0` # sequenza completa di comandi # per avviare il modem ######################### # 'if' di controllo connessione internet # attraverso un ping if ping -qnw1 -c1 google.com 2>&1 >/dev/null then echo `date +"%D-%T ok!"` else echo `date +"%D-%T- NO"` if [ "$1" = "resume" ]; then echo "- request dhcp" dhcpcd -n hsb0 2>&1 >/dev/null $0 else echo Tentativo Nuova Connessione echo "****Attivazione Adsl****" modprobe e2 sleep 10 rmmod usb-ohci sleep 5 modprobe usb-ohci sleep 75 echo "... Attendo sincronizizzazione modem" ifconfig hsb0 up dhcpcd -n hsb0 fi fi fi |
Alcuni link dove reperire ulteriori informazioni:
L'autore Fabio Sfuncia, alias Fiblan, è un appassionato della "codicazione" (produzione di codice). Studia ingegneria elettronica all'università di Messina e si interessa di Computer Vision al Visilab. L'Open Source è nella sua vita fonte di arricchimento continuo. |
<- HiL - Intro - Indice Generale - Copertina - HiL - SCSI -> |