Introducción
El modem USB Sagem Fast 1000 es uno de
los modems que proveía la empresa Wanadoo en España y an
Francia con el pack SpeedPack ADSL. Como ocurre con otras
operadoras, no disponen de drivers para linux. Si ya es triste que el
proveedor no disponga de drivers para uno de los sistemas operativos
más importantes, lo es más aún que el propio
fabricante además de no disponer de ellos, no quiera hacerlos.
Aquí es donde entramos nosotros, los usuarios que se niegan a
pasar por caja para comprar un router u otro modem que sí
funcione en linux.
Tanto en internet como aquí mismo en Sourceforge, existen varios
proyectos para conseguir hacer funcionar modems USB en linux. Estos
proyectos son los que me animaron a intentar reunir a un
batallón de usuarios y programadores que ayuden a sacar adelante
este proyecto. Desde aquí mi más enhorabuena por el
trabajo realizado en este campo, y muchas gracias a todos.
El modem en
cuestión
Vamos al tajo. Lo primero de todo es identificar el modem en
cuestión.
El modem está formado por un conjunto de chips que realizan todo
el trabajo por hardware, complementándolo con una imagen de
software.
Vamos a analizarlo más a fondo.
Está basado en un solución Centaur, un diseño de
hardware que
integra la empresa
STMicroelectronics.
El módulo consiste en un chipset ASCOT para ADSL y un
controlador de comunicaciones ATM Virata (Helium). El
ASCOT está formado por dos chips, un frontend analógico
ST70134, con convertidor de datos, filtros programables y control de
ganacia, y un procesador DMT (Discrete MultiTone) ST70235A que incluye
un interfaz de programación UTOPÍA.Como software utiliza
ATMOS7.1 junto con el módulo Centaur.
Funcionamiento
en NO-GNU/Linux
La primera consideración a tener en cuenta se cumple en ambos
sistemas operativos, y es el correcto funcionamiento de los puertos
USB. Muchos usuarios tuvieron grandes problemas con este modem hasta
que sacaron la versión 2.1.7 y actualizaron sus drivers USB.
Contando con que todo funcione bien, en el momento en que el sistema
operativo descubre un dispositivo conectado en el puerto USB, lo
intenta identificar, y para ello, busca una cadena en el registro del
sistema. Esta cadena, identifica a cada dispositivo, si vais al
registro, podeis observar una cadena similar a esta:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_079b&Pid_0013
que identifica de forma única a vuestro producto (Vid= Vendor
Id, Pid= Product id). El sistema operativo, intenta identificar el
hardware y si encuentra la cadena en el registro, procede a cargar las
variables, en caso contrario creará una clave nueva. De
aquí que insistan tanto en que primero se instalen los
drivers y después se enchufe el producto.
En nuestro caso (y en muchos otros) esta cadena es una cadena de
inicialización, que procede a cargar el binario del sistema
operativo del modem como bien indica su nombre
SAGEM USB ADSL modem loader. Podeis
observar una subcadena que indica la ruta y el nombre del fichero
binario que contiene el software del modem. Esta cadena es bastante
clara, ya que se llama
DeviceFirmware
y como valor contiene
C:\WINDOWS\System32\fast1000.bin
Una vez cargado el binario, se pasa a otra cadena que carga contra ese
software los parámetros de inicialización, se inicia la
conexión del modem, y a continuación, se procede a cargar
el protocolo por encima. En el caso de nuestro modem, se crea un
interfaz ethernet virtual que se llama SAGEM VVB Ethernet Port v2.1.7..
si observais la clave que carga el driver, es algo así: SAGEM
USB VvBus for Helium. Básicamente este el el interfaz de
programación entre el chipset y el USB. Y como podeis
observar, se carga la pila TCP/IP sobre este interfaz. A partir de
ahora ya podemos navegar y usar la mula ; ).
Primeros pasos para
que funcione en Linux
Como nuestra idea es que la mula funcione en linux, vamos a ver que es
lo que necesitamos.
Hay que tener en cuenta que la gran mayoría de los usuarios que
tenemos el SpeedPack ADSL tenemos IP fija, con lo cual no se necesita
un método de autenticación, como ocurre en otros casos,
por lo que no necesitamos un PPPoe o PPPoA. En nuestro caso el
método utilizado es una conexión Routed RFC1483
(http://www.faqs.org/rfcs/rfc1483.html). ¿Cómo lo puedes
saber?. Bueno, sencillamente porque no tienes que utilizar ni usuario
ni contraseña para configurar o conectar el modem a
internet.sólo necesitas un VPI, un VCI, tu dirección IP,
máscara, y la dirección IP del gateway. El desarrollo del
driver es igual en un principio, ya que lo primero que nos interesa
está bastante lejos de esta parte. Bueno, lo veremos más
adelante.
Soporte en el Kernel.
Primero, deberemos recompilar el Kernel para habilitar el soporte para
USB y ATM, para ello, necesitamos tener instaladas las fuentes del
Kernel, nos vamos a /usr/src/linux y ejecutamos make menuconfig (o make
xconfig para ejecutarlo en modo gráfico). Necesitamos habilitar
las siguientes opciones:
- En "Code maturity level options" ponemos "[Y]" a "Prompt
for development and/or incomplete code/drivers"
- En "Loadable module support" ponemos "[Y]" a "Enable
loadable module support" , "Set version information on all module
symbols" y "Kernel module loader"
- En "Networking options" ponemos "[Y]" a "Packet socket", a
"Unix domain sockets", a "TCP/IP networking", "Asynchronous Transfer
Mode (ATM) (EXPERIMENTAL)" y a "Classical IP over ATM"
- Y por ultimo en "USB support" ponemos "[Y]" a "Support for
USB", y a "Preliminary USB device filesystem" y en modo
"<M>" a "UHCI" y a "OHCI". Si sabeis el tipo de USB que teneis
elegir uno u otro para evitar problemas. Lo podemos intentar averiguar
ejecutando # lspci -v | grep USB Deberíamos obtener algo como:
usb-ohci : CMD technologies Inc|USB0670B o usb-uhci : USB Controller:
Intel Corporation 82371AB PIIX4 USB (rev 01) (prog-if 00 [UHCI]).
- Compilar, ejecutando make dep, make bzImage, make modules, make
modules_install y arrancar con la nueva imagen (make install
podría funcionar).
Drivers USB y ATM.
Ahora que el Kernel ya tiene soporte para estas tecnologías,
necesitaremos instalar los drivers USB y ATM..
- Soporte USB: Como el modem es USB, necesitaremos instalar los
drivers USB. En
linux, estos drivers están en desarrollo, los podeis bajar de:
http://www.linux-usb.org/
http://sourceforge.net/projects/linux-usb/
- ATM: La ADSL al fin y al cabo, consiste en un circuito ATM, con
lo cual necesitamos compatibilidad con ATM. Para ello necesitamos
instalar los correspondientes drivers. Los podemos descargar de:
http://linux-atm.sourceforge.net/dist.php
Desarrollo del driver.
Los pasos a seguir para el desarrollo del driver, son a grandes rasgos
los siguientes:
Realizar un sniffer del puerto USB para conseguir descifrar los
parámetros para pasarle el firmware al modem.Para esto hay
bastantes herramientas en internet, cómo el SnoopyPro
(http://sourceforge.net/projects/usbsnoop/).
Una vez averiguemos cómo pasarle el firmware, hay que hacer un
módulo que instale el firmware y comprobar que recibe
órdenes. Para ello se necesita realizar un módulo que sea
capaz de enviar los datos de configuración Post firmware al
modem, lo que son los comandos de conexión en sí. La
comprobación de esta comunicación, és en parte
sencilla, ya que de la misma forma que le enviamos los datos de
configuración, podemos consultar parámetros de estado
para comprobar que és correcta.
Una vez cargado el firmware, viene la parte más complicada, que
és el desarrollo del driver en sí, que será capaz
de intercambiar intrucciones de control para enviar y recibir los datos.
En sourceforge, así como en otros sitios de internet, existen
varios proyectos que nos ayudarán en nuestro cometido. Son por
ejemplo los siguientes:
Conexant USB ADSL Modem Linux Driver
(http://sourceforge.net/projects/accessrunner/)
Zyxel 630-11 ADSL USB Modem Linux driver
(http://sourceforge.net/projects/zyxel630-11/)
Speedtouch USB for *nix (http://sourceforge.net/projects/speedtouch/)
Y el que pienso que nos ayudará más que ninguno:
Allied Data Copperjet 800 Linux Drivers (http://co800.sourceforge.net/)
sobre todo gracias a que están desarrollando un driver para
modems con ip estática y muy secillo.
El driver funciona y es fácil de instalar. Todo un logro por
parte de estos programadores.
Os lo podeis desacargar desde aquí:
http://prdownloads.sourceforge.net/co800/co800_static_IP_v1.0.0_beta.tar.gz?download
Agradecimientos.
Desde aquí se quiere dar las gracias a todos los programadores
que participan en todos estos (y muchos otros proyectos que se me
quedan en el tintero) que están contribuyendo a que en
España se instalen más líneas ADSL y se tenga
más y mejor conocimiento de los sistemas operativos
"alternativos" y de la informática en general. Y sobre todo a
todas las personas que se animen a participar en este proyecto, que
espero que sean muchos. Un saludo.