<- HiL - Intro - Indice Generale - Copertina - HiL - SCSI ->

Hardware in Libertà


ADSL-USB HOWTO / Parte 3

di Fabio Sfuncia

L'articolo...

Continua la trattazione dell'argomento legato alla tecnologia ADSL e ai sistemi GNU/Linux. In questa puntata parleremo dei dispositivi Conexant.



Indice


Introduzione

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.

La mia avventura

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.

ACCESS RUNNER: 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
#: mount -t usbfs none /proc/bus/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
Bus 001 Device 001: ID 0000:0000 Virtual Hub
Bus 001 Device 002: ID 0572:cb06 Conexant Systems (Rockwell), Inc.

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

Curiosità

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!

Script per l'avvio della connessione

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

Link

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