Software para el Conexant AccessRunner USB



Imágen del logo


5 de octubre de 2003. Copyright © Josep Comas (jcomas@gna.es)



Contenido:

  1. Acerca del Conexant AccessRunner USB

  2. El software, consideraciones previas

  3. Novedades, historial de versiones

  4. Agradecimientos

  5. Envío/recepción de información

  6. El módem por dentro

  7. Interfaces y endpoints de la especificación USB

  8. Requisitos de software

  9. Instalación del software

    1. Contenido del software para el Conexant AccessRunner USB

    2. Compilación e instalación

    3. Configuración del entorno

    4. Panel de información

    5. Actualización del driver

  10. Información para desarrolladores

  11. Bibliografía


1. Acerca del Conexant AccessRunner USB

El Conexant AccessRunner USB es un módem ADSL que se conecta al puerto USB. Conexant (http://www.conexant.com) diseña y fabrica este modelo de referencia que otros fabricantes adaptan a sus necesidades. Este es el caso del modelo Messenger ADSL USB del fabricante Mac System (http://www.macsysco.com/) que se distribuye en España por la empresa Vitelcom (http://www.vitelcom.es) bajo la denominación EPS 5002 USB (Telefónica proporciona el módem con su nombre y debajo de él aparece el nombre de Vitelcom). De ahí que este driver pueda servir para otros módems que utilicen los mismos chips de Conexant.


2. El software, consideraciones previas

En este paquete encontrarás el software que permite utilizar el Conexant AccessRunner USB en Linux. Se trata de una versión beta, y como tal, no debe utilizarse en entornos de producción. Aunque pongo todo el esmero posible en el código, no me hago responsable de lo que pueda ocurrir al ejecutar este código. Debido a la falta de información por parte del fabricante no es posible tener las mismas prestaciones que la versión para el sistema Windows. Puedes encontrar este software en http://adslinux.iespana.es/adslinux (los desarrollos más recientes en http://sourceforge.net/projects/accessrunner) y dejar tus comentarios/dudas/problemas en el foro creado en http://boards1.melodysoft.com/app?ID=ADSLinux Doy las gracias a Vitelcom por proporcionarme un módem que me ha permitido mejorar el diseño inicial del driver.


3. Novedades, historial de versiones

5 de octubre de 2003

Corregido error en script cxload.sh cuando se utilizaba el modo de apertura en la versión de 17 de septiembre de 2003 (Peter Whisker). La carga de algunos módulos no se aborta por si estos se compilan dentro del kernel. Explicación DNS corregida (Pacuco). Documentación actualizada.

17 de septiembre de 2003

Añadido nuevo driver que soporta kernels 2.4 y 2.6 (modificación inicial por Sol Negro). Scripts modificados para que soporten el driver antiguo y el nuevo. Modificaciones en scripts para soporte pppoe de Debian (Javier Smaldone). Añadido soporte para los módems con VendorID=0x0572, ProductID=0xCB01 y ProductID=0xCB06 y para los módems Zoom 5510 y Draytek Vigor 318. Driver antiguo actualizado al kernel 2.4.22. Eiminadas sentencias del driver antiguo que provocaban un crash en el sistema (Duncan Sands). Vuelta al sistema anterior de compilación del panel utilizando libglade-config. Se ha añadido otros documentos.

2 de julio de 2003

Cambios en makefiles (Gilles). Se ha añadido otros documentos.

29 de junio de 2003

Eliminado algunos comandos y otros cambiados en la carga del firmware.

28 de junio de 2003

Incrementado la espera en algunos envíos en la carga del firmware.

24 de junio de 2003

Cambiado el método de espera de respuestas a comandos.

23 de junio de 2003

Incrementado timeout en la espera de respuestas en la carga del firmware (programa cxload) para determinados controladores USB/módems. Soporte para rp-pppoe en los scripts (Aitur). Cambiada la carga del módulo pppoatm por pppoe en el script cxnet4up.sh (Germán). Creación de paquetes deb (utilizar el comando make deb para crear el paquete).

16 de junio de 2003

Añadido tiempo de espera en la carga del firmware (programa cxload) para Debian. Corregido script de servicio para Suse. Corregido Makefile para crear rpm en Suse. Añadido unidades restantes en el panel (programa cxpanel). Documentación actualizada para Debian.

14 de junio de 2003

Un mismo ejecutable sirve para todos los módems soportados. Se compila usando estructura tx_inuse para kernels antiguos y en los nuevos se utiliza sk->wmem_alloc. Se resetean los endpoints al final de la carga del firmware por si alguna transferencia bulk anterior falla. Documentación actualizada.

7 de junio de 2003

Sistema de envío de comandos más robusto para la carga del firmware.

6 de junio de 2003

Sistema de envío de comandos más robusto para el módulo del driver. Cierra de la linea ADSL en los scripts.

5 de junio de 2003

Corregido problema de timeout en transferencias bulk en la carga del firmware para ordenadores rápidos (Poloso). Cambiado tx_inuse por sk->wmem_alloc y tx_inuse por sk->wmem_alloc en sarlib.c y cxacru.c para kernels recientes. Corregido nombre para el paquete rpm de Mandrake (Iolus).

4 de junio de 2003

Corregido problema de timeout en transferencias bulk en la carga del firmware y en la monitorización. Corregido error en el Makefile principal (Federico Fissore). Corregido carácteres incorrectos en fichero cxnet2down.sh (Federico Fissore).

3 de junio de 2003

Soporte para modelos con ProductID=CB00 utilizando firmware que envía celdas ATM en vez de paquetes Ethernet (no se puede utilizar el servidor http con este firmware). Fichero de especificación para construir un paquete RPM (utilizar el comando make rpm para crear el paquete). Cambios en la documentación. Añadido soporte DHCP en el script para el protocolo RFC1483/2684 bridge (Pawel Konieczny). Instalación del servicio en Suse corregida (Thomas Mikosch). Corregido pequeño error en la detección de la versión de kernel con que se compiló el driver. Añadido un panel que muestra información del módem (programa cxpanel). Ahora se detalla mucha más información (programa cxioctl). Modificado el proceso de envío de comandos y espera a la respuesta de estos en la carga del firmware (programa cxload) y en la monitorización (módulo cxacru). Se ha añadido la opción del modo de apertura en el fichero de configuración.

5 de mayo de 2003

Se ha perfeccionado la inicialización del módem (se ha incluido la idea de Pascal Boucher de enviar más firmware de golpe tal como lo hace el driver de Windows del fabricante). Ahora se proporciona información más detallada sobre el módem. Se ha añadido soporte para diversos módems de otros fabricantes (Trust 235A Speedlink ADSL/Amigo AMX-CA86U, Olitec Modem USB ADSL Versión 2 y 3). Se han incorporado scripts para el soporte de otros protocolos (RFC1483/2684 bridged y PPPoE). Documentación actualizada.

24 de enero de 2003

Primera versión con la que se consigue utilizar el módem en Linux utilizando el protocolo RFC1483/2684 enrutado de Telefónica. En el archivo cxacru.c correspondiente al módulo del kernel se ha sustituido “urb_t”por “struct urb”para adaptarse al kernel 2.4.20 (Sol Negro). Actualizado scripts de carga del controlador USB (Sol Negro).



4. Agradecimientos

Quiero agradecer a todas estas personas su tiempo en este proyecto que fue iniciado el 31 de agosto de 2002 por Kism:

Kism (creador de la web del proyecto, ...)

Necrox (actualmente mantiene la web del proyecto, ...)

Sol Negro (aportación de log, modificaciones en scripts (cxload.sh, cxunload.sh), observaciones sobre la compilación del módulo, ...)

Pascal Boucher (soporte para el módem Olitec V3)

Pawel Konieczny (soporte para el módem E-Tech V2/Amigo AMX-CA80U-4)

Thomas Mikosch (soporte para el módem Trust 235A/Amigo AMX-CA86U)

Ale (colaborador en el proyecto, ...)

Albert Mestre (colaborador en el proyecto, ...)

Álvaro (colaborador en el proyecto, ...)

Carlos G. (colaborador en el proyecto, ...)

Cecimax (colaborador en el proyecto, ...)

Federico Fissore (colaborador en el proyecto, ...)

Iolus (colaborador en el proyecto, ...)

Levis (colaborador en el proyecto, ...)

Lorenso (colaborador en el proyecto, ...)

Marcelo (colaborador en el proyecto, ...)

Mullen (colaborador en el proyecto, ...)

Muse (colaborador en el proyecto, ...)

Nachox (colaborador en el proyecto, ...)

Pherrara (colaborador en el proyecto, ...)

Poloso (colaborador en el proyecto, ...)

Razzor (colaborador en el proyecto, ...)

Sara (colaborador en el proyecto, ...)

Shagrat (colaborador en el proyecto, ...)

Y a muchos otros que me dejo en el tintero.


5. Envío/recepción de información

Este módem ADSL utiliza la tecnología ATM para enviar y recibir información. En ATM la información se envía en celdas. Cada celda consta de un secuencia de 53 bytes. De estos 53 bytes los 5 primeros son para la cabecera (control) y los 48 restantes para datos (donde va la información que queremos enviar y que se denomina en inglés el payload). Cuando queremos enviar información, por ejemplo, del protocolo IP tendremos que la información no nos cabe toda en una sola celda, por tanto, tendremos que dividir la información para que quepa en diferentes celdas. Normalmente los primeros bytes de la primera celda de las que hemos dividido la información que queremos transportar nos indicaran el tipo de protocolo utilizado para enviar la información. Para el protocolo RFC2684 routed estos bytes en notación hexadecimal son: 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00. Con estos bytes indicamos que podemos llevar varios protocolos IP, ICMP, PPP, ... Si llevamos el protocolo IP entonces el byte que les seguirá será el 0x45.

A los procesos de separar y unir la información se les llama SAR (Segmentation And Reassembly). La AAL5 (ATM Adaptation Layer type 5) es la capa que se encarga de adaptar la información que tenemos en la capa superior (por ejemplo, protocolo IP) a la capa inferior ATM y viceversa. La AAL5 contiene el SAR.

Consulta el apartado de bibliografía para conocer más en detalle la estructura de una celda ATM así como se encapsula la información en celdas ATM.


6. El módem por dentro

En el módem podemos destacar 2 partes: una parte que se encarga de la comunicación por el puerto USB y otra parte que se encarga de la comunicación por el puerto ADSL. De la comunicación USB se ocupa el chip P52 (P5200-12 E108874.1 0049) y de la comunicación ADSL los chips CX11627 (Falcon 2P 11627-31 E195617.1 0210), CX20431 (20431-21 E193445.1 0208) y CX20441 (20441-11 E85746.1 0039). El chip CX11627 creo que es un procesador DSP de 32 bits, concretamente un ARM940T. El firmware necesario para el funcionamiento del módem se envía vía puerto USB y se carga en una memoria SDRAM que el procesador DSP ejecutará.


7. Interfaces y endpoints de la especificación USB

El driver que controla el módem se comunica con él a través de tuberías (pipes) a las que denominaré canales. Tenemos dos tipos de canales: los de datos (data pipe) y los de control (control pipe). Los de control va a parar a los endpoint de control mientras que los de datos van a parar a los interfaces y el interfaz a endpoints. Un interfaz es una colección de endpoints. El interfaz describe una clase (impresoras, audio, ...). La ventaja de agrupar dispositivos similares en una misma clase permite aprovechar un driver genérico para controlarlo. No obstante, para este módem se ha tenido que utilizar un driver específico.

Cada endpoint realiza una tarea (podemos verlo como una función), por ejemplo, en el caso de este módem tenemos:

0x01: endpoint de salida (envío del firmware, petición de información).

0x81: endpoint de entrada (recepción de información).

0x02: endpoint de salida, envío de celdas ATM.

0x82: endpoint de entrada, recepción de celdas ATM.

0x03: endpoint de salida, función que desconozco.

0x83: endpoint de entrada, función que desconozco.

0x04: endpoint de salida, función que desconozco.

0x84: endpoint de entrada, función que desconozco.

Cuando se quiere enviar una celda ATM al módem se tienen que enviar los 53 bytes de la celda seguidos por 11 bytes a 0x00 (a diferencia del Alcatel SpeedTouch que solamente hace falta enviar 53 bytes) por el endpoint 0x02 mientras que cuando se recibe una celda ATM se reciben los 53 bytes + 3 bytes que no hemos identificado por el endpoint 0x82.

La especificación USB es mucho más extensa e incluye otros conceptos, consulta el apartado de bibliografía en este mismo documento.


8. Requisitos de software

En la página http://sourceforge.net/projects/accessrunner tienes disponible el driver (programa que te permitirá utilizar el módem en Linux). Para utilizar el driver debes tener una distribución de Linux reciente con kernel (el corazón de Linux) versión 2.4. La partición donde se encuentra instalado Linux debe de soportar links (enlaces), por ejemplo, una partición nativa ext2 o ext3, no puede ser una partición FAT. Hay algunas distribuciones como Debian que no proporcionan por defecto el soporte ATM en el kernel ya compilado, deberás de compilar y ejecutar un kernel con el soporte ATM. El driver se puede utilizar en uno de los siguientes protocolos de comunicación:

El driver se encuentra en dos tipos de empaquetados: uno con el codigo fuente y otro ya directamente utilizable (ya está compilado) en unas determinadas distribuciones de Linux. El nombre del paquete que contiene el código fuente del software viene con el formato cxacru-aaaa-mm-dd-src.tgz (aaaa se refiere al año con 4 dígitos, mm al mes con 2 dígitos, dd al día del mes con 2 dígitos, src que se trata del código fuente y tgz que está comprimido con el programa gzip y empaquetado con el programa tar). El driver compilado lo encontrarás en formato rpm para una distribución (RedHat, Mandrake, ...), kernel y procesador en concreto. Por ejemplo, cxacru-2003-06-07.k2.4.20-8rh.i686.rpm (k2.4.20-8 indica que solo sirve para el kernel 2.4.20-8, teclea uname -r para conocer la versión, rh que es para la distribución RedHat y i686 que es para un procesador compatible con el juego de instrucciones i686, teclea uname -m para conocer tu procesador), cxacru-2003-06-07.k2.4.21-0.13mdk.i686.rpm (k2.4.21-0.13 indica que solo sirve para el kernel 2.4.21-0.13, mdk que es para la distribución Mandrake y i686 que es para un procesador compatible con el juego de instrucciones i686). Si tienes el rpm que concuerda exactamente con tu versión de kernel, distribución y procesador entonces solo necesitarás los siguientes paquetes adicionales (te recomiendo que hagas una instalación completa de tu distribución para ahorrarte instalar posteriormente estos, antes de bajarlos de los lugares indicados comprueba que no se encuentren ya en los cds de tu distribución):

Si tienes el código fuente del driver además deberás de instalar estos otros paquetes:


9. Instalación del software

9.1 Contenido del software para el Conexant AccessRunner USB

Antes de proceder a la instalación del software debes de tener en cuenta que las acciones que se detallan deben de realizarse con los privilegios del usuario root (modo superusuario) y que Linux distingue los nombres de archivo/directorio entre minúsculas y mayúsculas. En algunas distribuciones no entras directamente con el usuario root, sino con otro usuario con menos privilegios pero una vez dentro puedes acceder al modo superusuario en uno de los menús del modo gráfico. En el caso de tener el código fuente del driver copia el paquete cxacru-aaaa-mm-dd-src.tgz en el directorio /usr, colócate en ese mismo directorio (desde el terminal teclea cd /usr) y ejecuta el comando tar -zxvf cxacru-aaaa-mm-dd-src.tgz (si el fichero tiene el tamaño correcto, el que se indica en la web) o tar -xvf cxacru-aaaa-mm-dd-src.tgz (si el fichero .tgz ha aumentado de tamaño al bajarlo, se ha descomprimido). En el caso del paquete con el código fuente del driver verás que se ha creado una carpeta llamada cxacru con la siguiente estructura:

bridged -> directorio que contiene programas para RFC1483/2684 bridged

doc -> directorio que contiene la documentación

firmware -> directorio que contiene los archivos correspondientes al firmware

include -> directorio con ficheros de cabecera (.h)

init -> directorio que contiene los programas que permiten iniciar el módem

module -> directorio que contiene el módulo del kernel (driver)

panel -> directorio que contiene el panel de información

sarlib -> directorio que contiene la librería sarlib requerida para el módulo

scripts -> directorio que contiene los scripts que permiten activar y desactivar el módem según la configuración

COPIANDO -> traducción al español de la licencia GPL

COPYING -> archivo de la licencia GPL del código fuente (inglés)

LEEME -> archivo en español indicando donde se encuentra la documentación

Makefile -> archivo Makefile para compilar e instalar todos los programas

README -> archivo en inglés indicando donde se encuentra la documentación


Dentro del directorio init se encuentran los archivos siguientes:

cxioctl.c -> código fuente del programa que permite activar/desactivar la recepción de celdas ATM por parte del driver

cxload.c -> código fuente del programa que envía el firmware

Makefile -> Makefile para compilar los programas e instalarlos


Dentro del directorio module se encuentran los siguientes archivos:

cxacru.c -> código fuente del módulo del kernel del Alcatel SpeedTouch modificado para utilizarlo con el Conexant AccessRunner USB

Makefile -> Makefile para compilar el módulo del kernel e instalarlo


Dentro del directorio scripts se encuentran los archivos siguientes:

cxload.sh -> script que inicializa el módem y carga el módulo del kernel

cxnet2down.sh -> script que desactiva la configuración de red para el protocolo PPP sobre ATM

cxnet2up.sh -> script que configura la red para el protocolo PPP sobre ATM

cxnet3down.sh -> script que desactiva la configuración de red para el protocolo RFC1483/2684 bridged

cxnet3up.sh -> script que configura la red para el protocolo RFC1483/2684 bridged

cxnet4down.sh -> script que desactiva la configuración de red para el protocolo PPP sobre Ethernet

cxnet4up.sh -> script que configura la red para el protocolo PPP sobre Ethernet

cxnetdown.sh -> script que desactiva la configuración de red para el protocolo RFC1483/2684 routed

cxnetup.sh -> script que configura la red para el protocolo RFC1483/2684 routed

cxstart.sh -> script que inicializa el módem, carga el módulo del kernel y activa la configuración de red según protocolo

cxcstop.sh -> script que desactiva la configuración de red según protocolo y descarga el módulo del kernel

cxunload.sh -> script que descarga el módulo del kernel

Makefile -> Makefile para instalar los scripts


Para los programadores comentar que se ha cambiado el include "malloc.h" por el "slab.h" dentro del archivo sarlib.h de la librería sarlib original por encontrase el "malloc.h" obsoleto. También se ha adaptado el archivo Makefile a la nueva recomendación sobre directorio de los ficheros de cabecera (includes). El fichero sarlib.c se ha adaptado a kernels recientes que suprimen la estructura tx_inuse.

Si tienes el driver ya compilado en un paquete rpm para tu distribución-versión de kernel-procesador entonces puedes ver la información y el contenido de este tecleando rpm -qilp nombre_paquete_con_driver_compilado.rpm


9.2 Compilación e instalación

Antes de proceder a la compilación/instalación del software necesitamos tener instalados todos los paquetes requeridos. En http://sourceforge.net/projects/accessrunner encontrarás la mayoría de estas herramientas si no las tuvieras en los cdroms de tu distribución.

Buena parte de distribuciones tienen las herramientas y librerías dentro de paquetes rpm (para facilitar la instalación y desinstalación de ellas). Ejemplo de ello son RedHat, Mandrake y Suse. No obstante, puede que te sea más fácil utilizar los asistentes/programas de tu distribución para instalar estas herramientas y librerías, en el caso de Suse puedes utilizar la herramienta Yast2. Puedes instalar los paquetes rpm de la siguiente manera:

rpm -Uvh nombre_paquete.rpm (instalará o actualizará un paquete rpm, debes encontrarte en el mismo directo donde se encuentra el paquete rpm, este se instalará en el directorio correcto)

Si quieres instalar una versión vieja del mismo paquete porqué funciona mejor que la nueva entonces deberás forzar la instalación:

rpm -Uvh –force nombre_paquete.rpm

(force va con dos guiones delante)

Si te sucede que no puedes instalar el paquete aún forzándolo entonces puede que tengas que borrar algún paquete anterior. Utiliza el siguiente comando:

rpm -e nombre_paquete

(sin la extensión rpm y sin el tipo de procesador i586, i386, ejemplo: rpm -e ppp-2.4.1-10, puedes utilizar rpm -q ppp para conocer la versión del paquete a desinstalar)

Si quieres ver la información de un paquete rpm no instalado teclea lo siguiente:

rpm -qip nombre_paquete.rpm

Lo mismo para una paquete rpm ya instalado:

rpm -qi nombre_paquete_sin_procesador_ni_extensión

Si quieres ver el contenido de un paquete rpm no instalado teclea lo siguiente:

rpm -qlp nombre_paquete.rpm

Lo mismo para una paquete rpm ya instalado:

rpm -ql nombre_paquete_sin_procesador_ni_extensión

Si por algún motivo te interesa un archivo del paquete rpm lo puedes obtener con la siguiente instrucción:

rpm2cpio nombre_paquete.rpm | cpio -idv nombre_archivo_que_quieres

Si quieres todos los archivos teclea:

rpm2cpio nombre_paquete.rpm | cpio -idv

(se descomprimirán en el directorio actual)

Si quieres conocer la versión de un paquete instalado teclea:

rpm -q nombre_paquete_sin_versión_ni_procesador_ni_extensión

Ejemplos:

rpm -Uvh libusb-0.1.6-3.i386.rpm (instalación de la librería libusb para ejecutar el driver)

rpm -Uvh libusb-devel-0.1.6-3.i386.rpm (instalación de la librería libusb para compilar el driver)

rpm -Uvh linux-atm-2.4.1-1.i386.rpm (instalación de las herramientas atm para ejecutar y compilar el driver)

rpm -e ppp-2.4.1 (desinstalación del paquete ppp)

rpm -Uvh ppp-2.4.1-6plf.i586.rpm (instalación nuevo ppp, obligatorio si vas a utilizar el protocolo ppp)

rpm -Uvh kernel-source-2.4.20-8.i386.rpm (instalación del código fuente del kernel necesario para compilar el driver)

rpm -Uvh libglade-0.17-11.i386.rpm (instalación de la librería libglade para ejecutar el panel de información)

rpm -Uvh libglade-devel-0.17-11.i386.rpm (instalación de la librería libglade-devel para compilar el panel de información)

rpm -Uvh libxml-1.8.17-8.i386.rpm (instalación de la librería libxml para ejecutar el panel de información)

rpm -Uvh libxml-devel-1.8.17-8.i386.rpm (instalación de la librería libxml-devel para compilar el panel de información)

rpm -q libusb (para ver la versión de la librería libusb que tenemos instalada)

rpm -q libusb-devel (para ver la versión de la librería libusb-devel que tenemos instalada)

Si en tu distribución te falta algún rpm este lo puedes encontrar en:

http://rpm.pbone.net/

http://rpmfind.net/


Para la distribución Debian puedes optar por instalar los paquetes que puedes encontrar en:

http://www.debian.org/distrib/packages

Para instalar un paquete en concreto utiliza: dpkg -i nombre_paquete.deb

Para instalar un paquete y sus dependencias: apt-get install nombre_paquete_sin_procesador_ni_extensión

Para ver los paquetes instalados: dpkg -l "*"

Ejemplos:

dpkg -i libusb-0.1-4_0.1.5-4_i386.deb (instalación de la librería libusb para ejecutar el driver)

dpkg -i libusb-dev_0.1.5-4_i386.deb (instalación de la librería libusb para compilar el driver)

dpkg -l "libusb*" (lista los paquetes instalados que empiezan por libusb)

dpkg -i kernel-source-2.4.18_2.4.18-9_all.deb (instalación del código fuente del kernel necesario para compilar el driver, probablemente tendrás (después de la instalación de este paquete) un archivo kernel*.bz2 en /usr/src para descomprimir con bunzip2 y después desempaquetar con tar)

apt-get install libusb-0.1-4 (instalación de la librería libusb para ejecutar el driver)

apt-get install libusb-devel (instalación de la librería libusb para compilar el driver)

apt-get install atm-dev (instalación de las herramientas atm para compilar el driver)

apt-get install atm-tools (instalación de las herramientas atm para ejecutar el driver)

apt-get install kernel-source-2.4.18 (instalación del código fuente del kernel 2.4.18)

o bien instalar los rpm con la herramienta alien:

apt-get install alien (esto instalará el programa alien)

alien nombre_paquete.rpm (esto instalará el paquete rpm indicado mediante el programa alien)


Una vez tengas todas las herramientas y librerías instaladas procederemos a compilar e instalar el driver si tienes el código fuente de este o a instalar directamente el driver si tienes el rpm que contiene el driver ya compilado. En este último caso te basta teclear rpm -Uvh nombre_paquete_con_driver_compilado.rpm para instalar el driver (debes encontrarte en el directorio donde se encuentra el paquete). Una vez instalado el rpm ya puedes ir directamente al apartado de configuración 9.3 de este manual. Si tienes el código fuente del driver antes de compilarlo se deben seguir los siguientes pasos para adaptar la configuración del código fuente del kernel al kernel que estás ejecutando:

  1. Normalmente el código fuente del kernel lo habrás instalado en un directorio dentro de /usr/src. Este directorio seguramente tendrá un nombre del estilo linux-2.4.x o linux-2.4.x-y donde x corresponde a la versión de un kernel 2.4 e y a la revisión (por ejemplo, linux-2.4.20-8). Fíjate que este nombre debe coincidir exactamente con la versión del kernel que ejecutas (teclea uname -r para conocer la versión que estás ejecutando actualmente). Si no coincidiera es muy probable que la ejecución del driver compilado con esta versión te produzca un cuelgue del sistema. Una vez hayas comprobado que tienes el código fuente del kernel correcto crearemos un enlace de la siguiente manera:

cd /usr/src (nos colocamos en el directorio /usr/src)

ln -sf linux-2.4.x-y linux (creamos un enlace al directorio correspondiente a tu versión, ahora se puede acceder al directorio /usr/src/linux como si accedieras a /usr/src/linux-2.4.x-y, si existiera un enlace anterior puedes borrarlo con rm linux y después creas el enlace con ln -sf linux-2.4.x-y linux)

  1. Colócate dentro del directorio linux:

cd linux

  1. Ejecuta la siguiente orden (no es necesario para RedHat, Mandrake y Suse):

make mrproper

  1. Ejecuta el comando siguiente y después de marcar las opciones guarda la configuración (no es necesario para RedHat, Mandrake y Suse):

make menuconfig (para configurar en modo texto o bien "make xconfig" para configurar en modo gráfico)

Debes de escoger las opciones siguientes:

Code maturity level options

[*] Prompt for development and/or incomplete code/drivers

Loadable module support

[*] Enable loadable module support

[*] Set version information on all module symbols

[*] Kernel module loader

Networking options

<*> Packet socket

<*> Unix domain sockets

[*] TCP/IP networking

[*] Asynchronous Transfer Mode (ATM)

USB support

<*> Support for USB

[*] Preliminary USB device filesystem

<M> UHCI

<M> OHCI

En el caso de utilizar RFC1483/2684 routed debes de escoger también estas opciones:

Networking options

[*] Asynchronous Transfer Mode (ATM)

[*] Classical IP over ATM

En el caso de utilizar PPP sobre Ethernet debes de escoger también estas opciones:

Networking options

[M] RFC1483/2684 Bridged protocols

Network Device Support

<M > PPP (point-to-point protocol) support

<M> PPP Deflate compression

<M> PPP over Ethernet (EXPERIMENTAL)

En el caso de utilizar PPP sobre ATM debes de escoger también estas opciones:

Network Device Support

<M > PPP (point-to-point protocol) support

<M> PPP Deflate compression

<M> PPP over ATM

Y debes de desactivar la siguiente opción (para todos los casos):

Processor type and features

[ ] Symmetric multi-processing support

  1. Después de guardar la configuración tecleamos lo siguiente (no es necesario para RedHat, Mandrake y Suse):

make dep

  1. Este paso solo es aplicable a la distribución RedHat:

cp ./configs/kernel-2.4.20-i686.config .config

(en el caso de utilizar otra compilación de kernel cambia el fichero kernel-2.4.20-i686.config por el que corresponda, mira dentro del directorio configs)

  1. Este paso solo es aplicable a la distribución Suse:

cp /boot/vmlinuz.config .config


Ahora ya podemos proceder a compilar el software del módem. Para ello haz lo siguiente:

  1. Nos vamos al directorio del driver:

cd /usr/cxacru

  1. Desde ese directorio compilamos e instalamos el software con el siguiente comando:

make (ahora este comando sirve para todos los módems soportados)


Si todo ha ido bien los programas y scripts se habrán copiado en /usr/sbin y el módulo del kernel se habrá instalado bajo un directorio de /lib/modules correspondiente a la versión del kernel que estés ejecutando. Ahora solo queda poner la configuración del driver.


9.3 Configuración del entorno

Es preferible que tengas el sistema de archivos USB montado antes de iniciar el módem (aunque en el script de arranque del módem lo montará en el caso que no se encuentre montado). Si utilizas una distribución que no carga automáticamente el controlador USB y monte el sistema de archivos tendrás que añadir al fichero /etc/fstab la linea siguiente y ejecutar el comando mount -a (normalmente no tendrás que añadir esta linea ni ejecutar el comando mount, antes de hacer estos cambios prueba a instalar los paquetes kudzu y hotplug):

none /proc/bus/usb usbdevfs defaults 0 0

Si tienes un kernel reciente entonces utiliza usbfs en vez de usbdevfs. Antes de conectar el módem añade al fichero /etc/hotplug/blacklist una linea que ponga usbcam (parece que intenta cargar el módulo usbcam al tratarse de un dispositivo de clase cero, ¿no tendrían que haber puesto el fabricante 0xff y en Manufacturer su nombre? En el caso del módem Olitec Modem USB ADSL Versión 3 no hace falta que hagas esto).
Ahora ya puedes conectar el módem si no lo tuvieras conectado. Comprueba que tecleando cat /proc/bus/usb/devices te aparezca en una parte del texto mostrado algo similar a lo siguiente:

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0572 ProdID=cafe Rev= 0.01
S: Manufacturer=-
S: Product=ADSL USB MODEM
S: SerialNumber=67882636
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 7 Cls=00(>ifc ) Sub=00 Prot=00 Driver=(none)
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=84(I) Atr=03(Int.) MxPS= 8 Ivl=200ms

El siguiente paso es proceder a la configuración. Tendrás que editar el archivo /etc/cxacru y el archivo /etc/resolv.conf.

El archivo /etc/cxacru viene con la siguiente configuración:

# Config file for Conexant AccessRunner

# Driver mode
DRIVER_MODE=1 # 1 = normal, 2 = debug, 3 = normal+max speed (without ask adsl status), 4 = debug+max speed (without ask adsl status)

# Protocol
PROTOCOL_MODE=1 # 1 = RFC1483/2684 routed, 2 = PPP over ATM (pppoa), 3 = RFC1483/2684 bridged, 4 = PPP over Ethernet (pppoe)

# Paths
BINARY_PATH="/usr/sbin"
ATM_PATH=""

# ADSL
# if OPEN_MODE is blank then cxload uses default mode acoording VID & PID
# Values for OPEN_MODE are:
# 0 = auto selection, G.Handshake
# 1 = auto selection, T1.413
# 2 = G.Handshake
# 3 = ANSI T1.413
# 4 = ITU-T G.992.1 (G.DMT)
# 5 = ITU-T G.992.2 (G.LITE)
OPEN_MODE=

# ATM
VPI=8
VCI=32

# Specific for RFC1483/2684 routed/bridged
# if IP_ADDRESS is blank in bridged mode then it uses DHCP to get IP
IP_ADDRESS=
NETMASK=255.255.255.0
GATEWAY=

En la variable DRIVER_MODE se puede asignar el valor 1 para ejecutar el driver sin información adicional de debug y asignar 2 si queremos ver que sucede con el driver (los mensajes quedaran en /var/log/messages o en /var/log/syslog o los podrás ver mediante el comando dmesg). También podemos usar los valores 3 y 4 que se corresponde con lo anterior excepto que no se preguntará sobre el estado de la linea ADSL.
Debes indicar el protocolo utilizado en la variable PROTOCOL_MODE asignando 1 (RFC1483/2684 enrutado) si tu proveedor es Telefónica con IP estática, Yacom, Wanadoo o asignando 2 (PPP sobre ATM) si tu proveedor es Eresmas, Arrakis o asignando 4 (PPP sobre Ethernet) si tu proveedor es Telefónica con IP dinámica.
A continuación cambia los datos de VPI y VCI. Si tienes una conexión con Telefónica o de Yacom deja los valores 8 y 32 que ya aparecen por defecto. En el caso de utilizar RFC1483/2684 enrutado (IP fija de Telefónica, Yacom) debes poner en IP_ADDRESS la dirección IP pública asignada por el proveedor, en NETMASK la máscara 255.255.255.0 y en GATEWAY la misma IP pero acabada en .1 o .2 (por ejemplo, si tienes IP = 80.10.30.40 entonces pon GATEWAY = 80.10.30.1). Si tuvieras algún mensaje “no route to host” al iniciar el driver entonces los valores de IP, máscara y gateway no están correctos (puede que tengas que poner la máscara y el gateway que te proporcionó tu proveedor).
Finalmente debes introducir los servidores DNS que vas a utilizar (aquellos que nos permiten conocer la IP de un ordenador a partir de un nombre), normalmente indicaremos el servidor primario y el secundario (en formato numérico, por ejemplo, 194.224.52.36 para el servidor primario de DNS y 194.224.52.37 para el servidor secundario de DNS). Estos datos de los servidores DNS debes introducirlos en el fichero /etc/resolv.conf. Ejemplo:

nameserver 194.224.52.36
nameserver 194.224.52.37


Te dejo unas cuantos servidores DNS que podrás utilizar dependiendo de tu proveedor (es preferible utilizar los que te hayan proporcionado):

Para Telefónica, Yacom, Infonegocio, Terra:

194.224.52.36 (ns1.telefonica-data.com) y 194.224.52.37 (ns2.telefonica-data.com).
194.179.1.100 (minerva.ttd.net) y 194.179.1.101 (artemis.ttd.net).
213.4.132.1 (dns1.terra.es) y 213.4.141.1 (dns2.terra.es).

Para Wanadoo:

62.37.237.140 (dns1.wanadoo.es) y 62.37.236.200 (dns2.wanadoo.es).

Para Eresmas:

62.81.16.197 (ramblas.red.retevision.es) y 62.81.0.1 (mayor.red.retevision.es).

Para Arrakis:

195.5.64.2 (ns1.landsraad.net) y 195.5.64.6 (ns2.landsraad.net).


En el caso de utilizar una conexión PPP sobre Ethernet (Telefónica con IP dinámica) deberás de configurar los siguientes archivos (debes desinstalar el paquete ppp de tu distribución si este no tiene el plugin pppoe.so e instalar uno que lo tenga, si utilizas el paquete rp-pppoe entonces no hace falta teclear los archivos siguientes y debes configurar la conexión ejecutando adsl-setup e indicando que utilizarás el interface nas0):

Archivo /etc/ppp/options :

lock
defaultroute
noipdefault
noauth
holdoff 4
maxfail 25
persist
asyncmap 0
name adslppp@telefonicanetpa
user adslppp@telefonicanetpa
lcp-echo-interval 2
lcp-echo-failure 7
plugin /usr/lib/pppd/2.4.1/pppoe.so
nas0

El directorio /usr/lib/pppd/2.4.1/ indicado para el archivo pppoe.so puede diferir según tu instalación, busca donde se encuentra, por ejemplo tecleando "find /usr/lib/pppd/ -name pppoe.so".


Archivo /etc/ppp/chap-secrets:

adslppp@telefonicanetpa * adslppp

(entre adslppp@telefonicanetpa y * hay un tabulador y entre * y adslppp también)


Archivo /etc/ppp/pap-secrets:

adslppp@telefonicanetpa * adslppp

(entre adslppp@telefonicanetpa y * hay un tabulador y entre * y adslppp también)


Si tu proveedor utiliza PPP sobre Ethernet y no es Telefónica entonces cambia adslppp@telefonicanetpa por el usuario asignado y adslppp por el password asignado.


En el caso de utilizar una conexión PPP sobre ATM (Eresmas, Arrakis) deberás además de seguir la explicación siguiente:

Debes de utilizar una versión de ppp con el plugin pppoatm (si tienes una versión más reciente que no soporte el plugin pppoatm desinstala e instala el paquete rpm que encontrarás en http://prdownloads.sourceforge.net/accessrunner/ppp-2.4.1-6plf.i586.rpm?download).

Tienes que modificar el fichero options que se encuentra en el directorio /etc/ppp con los siguientes datos:

lock
defaultroute
noipdefault
noauth
sync
noaccomp
nopcomp
noccp
novj
holdoff 4
persist
maxfail 25
passive
asyncmap 0
lcp-echo-interval 2
lcp-echo-failure 7
name any
user any
plugin /usr/lib/pppd/2.4.1/pppoatm.so
VPI.VCI

Tienes que sustituir VPI y VCI por el valor que tenga tu proveedor, para Arrakis la linea quedará como 0.35 y para Eresmas 8.35. Además en el caso de Eresmas debes de sustituir any en name y user por el usuario y contraseña proporcionada (name erexxxx, user erexxxx o name rtxxxx, user rtxxxx).

El directorio /usr/lib/pppd/2.4.1/ indicado para el archivo pppoatm.so puede diferir según tu instalación, busca donde se encuentra, por ejemplo tecleando "find /usr/lib/pppd/ -name pppoatm.so".

Puede que también tengas que modificar el user@domain y el password de los archivos chap-secrets y pap-secrets por el valor que te haya asignado tu proveedor (para Eresmas/Retevisión se necesitan estos archivos):

# client server secret IP addresses
user@domain * password

(entre user@domain y * hay un tabulador y entre * y password también)


Para PPP puedes utilizar que coja los servidores de DNS automáticamente si creas un enlace como el siguiente en vez de ponerlos a mano dentro del fichero /etc/resolv.conf (siempre y cuando tengas usepeerdns en el fichero /etc/ppp/options):

ln -sf /etc/ppp/resolv.conf /etc/resolv.conf

Una vez realizada la configuración ya podemos activar el módem iniciando por ejemplo el equipo si has realizado la instalación con el paquete rpm o bien ejecutando el comando cxstart.sh si has compilado el driver. En este último caso verás si la inicialización se ha realizado con éxito porqué te aparecerá la linea /usr/sbin/cxload.sh con éxito (successful) y la linea /usr/sbin/cxnetXup.sh con éxito (successful) donde X canviará o no aparecerá según el protocolo utilizado. Para el rpm verás que al iniciar el ordenador aparecerá en un momento "Starting cxacru" y ok o done si se ha inicializado todo correctamente.
Si al ejecutar cxstart.sh obtienes un error indicando que no encuentra el programa atmarpd entonces localízalo con find / -name "atmarpd" y añade el camino en la variable ATM_PATH del fichero de configuración /etc/cxacru.
Para comprobar que el driver se ha cargado correctamente, si tecleas lsmod tendría que aparecer cxacru (driver normal) o cxacrudbg (driver que muestra información de debug). Si tienes algún problema puedes ejecutar dmesg y verás que mensajes da o bien comprobar el archivo /var/log/messages o /var/log/syslog según distribución de Linux (podrás comprobarlo siempre y cuando utilices el driver en modo debug). También en /proc/net/atm/ tendría que haber un fichero con el nombre Conexant AccessRunner:0, dentro de él hay las estadísticas de transmisión de información (si no se ha enviado/recibido información estará a cero).

Al inicializar el módem puede aparecerte en el archivo de log de tu sistema el mensaje "atmsvc: no signaling demon". Este mensaje aparece porqué se utiliza un circuito permanente (PVC) en vez de uno dinámico (SVC), puedes ignorar el mensaje.

Si no ha habido ningún error tiene que aparecerte en el fichero /proc/net/atm/pvc un texto parecido a este:

Itf VPI VCI AAL RX(PCR,Class) TX(PCR,Class)
0 8 32 5 0 UBR 0 UBR CLIP, Itf:atm0, Encap:LLC/SNAP

y en el fichero /proc/net/atm/arp:

IPitf TypeEncp Idle IP address ATM address
atm0 PVC LLC 45 217.126.2.2 0.8.32

Cuando quieras apagar el ordenador o desconectar el módem antes debes de ejecutar el comando cxstop.sh si es que lo has arrancado manualmente, es decir, tecleando cxstart.sh. En el caso del rpm al apagar el equipo este ya lo hará automáticamente porqué se ha instalado como un servicio. En el caso de la compilación del driver si quieres que se ejecute automáticamente los scripts cxstart.sh y cxstop.sh al encender y apagar la máquina debes de instalar el servicio cxacru (hazlo una vez hayas comprobado que el driver te funciona correctamente). Para ello vete al directorio scripts del driver y desde allí ejecuta make add_service. Si algún día debes de eliminar el servicio ves al mismo directorio y ejecuta make remove_service. Si por algún motivo al arrancar Linux no tuvieras conectado el módem, entonces el servicio de inicialización del módem no se cargaría. Aún así puedes ejecutar el servicio más tarde, conectando el módem y arrancando el servicio mediante una aplicación de arranque SysV o bien ejecutando /etc/init.d/cxacru start. Si quieres parar el servicio puedes hacerlo tecleando /etc/init.d/cxacru stop (el directorio /etc/init.d puede variar según la distribución que utilices, ver fichero Makefile del directorio scripts). Si al arrancar Linux tuvieras problemas debidos a la utilización de un kernel nuevo o bien por la carga automática del driver puedes arrancar sin cargar el driver tecleando "linux single" en la linea de boot (cuando se carga el gestor de arranque, justo antes de arrancar Linux) o bien utilizando la opción failsafe del menú del arranque (esto dependerá del gestor de arranque utilizado).


9.4 Panel de información

En el directorio panel de dentro del directorio cxacru hay el software que muestra un panel de información del módem, parecido al que hay en Windows del propio fabricante del módem. Para poderlo utilizar previamente debe estar cargado el módulo del kernel (cxacru o cxacrudbg). Para la ejecución de este programa se requiere tener instalada las librería libglade y libxml. Una vez compilado, instalado y cargado el driver del módem puedes teclear cxpanel para que te aparezca.

El panel de información consta inicialmente de 3 pestañas: versión, transmisión/configuración y estado ADSL. Pulsando el botón avanzado aparece una cuarta pestaña con información para usuarios avanzados (permite conocer la calidad de la linea y los errores que se han producido en el medio).

La pestaña versión muestra la versión del módulo del kernel que se está utilizando, la versión del propio panel de información, la versión del hardware que se encuentra en el módem, la versión del firmware enviado al módem y la dirección MAC. Ver imagen siguiente:


La pestaña transmisión/configuración da información acerca del número de celdas ATM enviadas/recibidas, el número de celdas OAM loopback recibidas correctamente y destinadas a nosotros, la dirección VCI y VPI que se utilizan actualmente. El módulo del kernel permite enviar celdas ATM aunque no esté encendida la conexión ADSL, por tanto, podemos saber si hay algún proceso que intenta enviar información al driver viendo como se va incrementando el número de celdas ATM enviadas. En el caso de no tener bien configurada la conexión de red esta pestaña nos mostrará el valor 0 para la dirección VCI y VPI.. Ver imagen siguiente:


La pestaña estado ADSL nos informa si nuestro módem se encuentra conectado con el otro módem de la central, el modo de apertura que el módem utiliza para conectar, el modo en que opera actualmente, el camino de datos utilizado, el número de desconexiones que se han producido y la velocidad máxima de bajada y subida por la linea ADSL. En el caso de no haber conexión solo se mostrará el estado de la conexión, el modo de apertura y el número de conexiones perdidas. Si el módem se encuentra conectado muestra un indicador led en verde, si no está conectado un indicador led en rojo y si está probando de conectar un indicador led en amarillo. Ver imagen siguiente:


El botón borrar nos sirve para poner a cero las estadísticas (celdas ATM enviadas/recibidas, celdas OAM loopback recibidas, conexiones perdidas). El mismo botón avanzado nos sirve para mostrar y ocultar la pestaña avanzado. Ver imagen siguiente:



9.5 Actualización del driver

Para instalar una versión nueva del driver te basta con desinstalar el driver anterior e instalar el nuevo. En el caso del paquete rpm elimina el driver anterior con rpm -e cxacru (la configuración del fichero /etc/cxacru queda guardada en /etc/cxacru.rpmsave) e instala el nuevo con rpm -Uvh nombre_driver_compilado.rpm En el de tener el código fuente del driver colócate en el directorio /usr/cxacru y teclea make uninstall, a continuación borra el directorio completo del driver (cólocate en /usr con cd /usr y borra el directorio completo del directorio cxacru con rm -rf cxacru), después descomprime el paquete tgz desde el directorio /usr tal como se indica en el apartado 9.1 de este manual.


10. Información para desarrolladores

Esta información se refiere a las personas que quieran modificar alguna parte del código fuente.

El software se ha divido en varias partes para proporcionar un mejor rendimiento. Por una parte tenemos el software que inicializa el módem (fichero cxload.c) que una vez inicializado no interviene más y por otra parte el módulo del kernel (fichero cxacru.c) que solamente se encarga de la gestión del envío/recepción de celdas ATM. La parte que se ejecuta constantemente se ha desarrollado como un módulo del kernel para conseguir mayor rendimiento en vez de una aplicación en espacio de usuario. Aunque el módem sea plug&play se ha constituido unos scripts de inicialización para no tener que poner demasiado código en el driver del kernel (la inicialización una vez realizada ya no la vamos a utilizar más, consume espacio innecesario).

El comando make del directorio init tiene varias posibilidades:

make -> compila los programas sin mensajes de debug

make debug -> compila los programas con mensajes de debug (los nombres de los ejecutables acaban en dbg)

make debugt -> compila los programas con mensajes de debug y muestra la información que se envía por el puerto USB (los nombres de los ejecutables acaban en dbgt)

make clean -> elimina los programas ejecutables que se han generado tras la compilación

make install -> instala los ejecutables que no tienen información de debug

make uninstall -> desinstala los programas instalados con make install

El comando make del directorio module tiene varias posibilidades:

make -> compila el módulo con y sin información de debug (cxacrudbg y cxacru respectivamente)

make clean -> elimina archivos que se han generado después de la compilación (ejecutables y temporales)

make install -> instala el driver con y sin información de debug (cxacrudbg y cxacru respectivamente)

make uninstall -> desinstala los programas instalados con make install


11. Bibliografía

En este apartado comento las direcciones más interesantes que he encontrado acerca del bus USB, la tecnología ATM, el servicio ADSL y el diseño y desarrollo de drivers. Hay muchas otras direcciones, pero creo que estas os pueden ser útiles:


USB:


ATM:


ADSL:

En http://www.protocols.com puedes encontrar información concisa y breve sobre diferentes protocolos (consulta la explicación sobre ATM).


Diseño y desarrollo:

Driver de Alcatel para el Alcatel SpeedTouch USB en Linux:


Driver de Benoit Papillault para el Alcatel SpeedTouch USB en Linux:


Driver para el módem ECI Hi-Focus ADSL USB en Linux:


Driver para el módem Sagem F@st 800/840 en Linux:


Driver para el módem Olitec Modem USB ADSL Versión 3 en Linux:


Driver para el módem 3Com ADSL Modem USB (3cp4218) en Linux:


Otros:


Documentos:


Lista de módems ADSL: http://www.iol.unh.edu/consortiums/adsl/adsl_company.html

Lista de chips ADSL: http://www.infotech.tu-chemnitz.de/chipweb/dsl/