27 febrero 2007

Tarjetas Compatibles (II)

Esta tarea que se antoja sencilla en la mayoría de los casos, puede darnos más de un quebradero de cabeza. Es más, dependiendo de la distribución que hayamos instalado en nuestro equipo, podemos encontrarnos con la agradable sorpresa de que la tarjeta puede funcionar, simplemente, con la introducción de los datos de configuración de la red inalámbrica. Pero, en otros muchos casos, es posible que tengamos que vérnoslas con uno de los mayores tabúes de Linux: la compilación.

Desde aquí animo a los novatos en este sistema operativo a intentarlo. En mis inicios tuve necesidad de compilar no sólo los drivers para un infame aparato, mal conocido como winmodem, sino que hube de enfrentarme a la compilación del kernel o núcleo de Linux cuando usaba Guadalinex 2004, basada en Debian Sarge. Fue mi primera gran experiencia y debo decir que me resultó especialmente grato. Para los que mecesiten saber cómo hacerlo les invito a visitar los foros de Guadalinex, un sitio donde suelo estar con asiduidad.

¿Cómo compilar el driver?

Ahora bien, si lo que pretendemos es compilar nuestro propio driver de Linux a partir de las fuentes obtenidas del fabricante [o, muy frecuentemente, de las que nos hemos bajado del sitio del equipo de desarroladores del driver libre], debemos, al igual que con otras muchas compilaciones, instalar previamente las cabeceras [headers] y/o las fuentes [source] del kernel correspondiente a la versión del núcleo de Linux instalado en nuestro sistema. Cada distribución tiene su propio método de instalación y conviene consultar los manuales o guías donde se detalla cómo hacerlo. En mi caso, voy a explicar cómo proceder si usamos una distribución basada en Debian [si estuviese basada en Ubuntu, procedemos de idéntica forma, pero cuando se haga referencia un comando que deba usarse como root, se antepondrá a la sintaxis del mismo el prefijo sudo].

  • Las cabeceras o headers del kernel suelen encontrarse como linux-headers o kernel-headers. Para saber exactamente la vesión que debemos descargarnos, podemos consultar en un terminal la versión exacta del kernel de Linuz mediante el comando uname -a. Suelen venir en el cd de instalación de la dsitribución y también se pueden descargar de los repositorios usando el programa Synaptic o desde un terminal mediante el siguiente comando como root [está claro que las cifras X.Y.z se corresponden con valores particulares en cada caso]:
apt-get install kernel-headers-2.X.Y-z
  • Para bajar la fuentes del kernel [kernel-source o linux-source, según la distro usada] de la misma versión del núcleo que tenemos instalado, podemos usar, igualmente, Synaptic o tiramos de línea de comando, como se ha explicado con las cabeceras, pero sustituyendo headers por source. Si no las encontramos, se pueden bajar del sitio http://kernel.org , con la diferencia que en el primer caso se crean de forma automática dos enlaces simbólicos que apuntan ambos al directorio /usr/src/linux-2.X.Y [donde X.Y se corresponden con la versión del kernel instalada] y en el segundo debes desempaquetar los paquetes en el directorio /usr/src y crear los enlaces simbólicos como root con el siguiente comando:
ln -s /usr/src/linux-2.X.Y /lib/modules/version-kernel/build
ln -s /usr/src/linux-2.X.Y /usr/src/linux

Seguidamente, y una vez que nos hemos bajado los drivers de la tarjeta, debemos seguir las instrucciones que se acompañan, normalmente en un archivo de texto llamado readme, para proceder a la compilación e instalación del driver. Son dos o tres pasos sencillos que no deben ser causa de mayores problemas. En el peor de los casos, si ocurre algún error, el sistema nos devuelve un mensaje en el que se nos indica el origen de aquél.

¿Cómo instalar el driver?

Finalmente, y una vez que tenemos el driver compilado y el módulo que gestiona el uso de la interfaz inalánbrica o wifi, sólo queda cargarlo en el kernel y configurar la conexión. Para cargar el módulo, ya sea compilado por nosotros mismos o bien porque lo trae precompilado la distro que estemos usando [por ejemplo, Guadalinex v4, basada en Ubuntu Edgy, trae compilados los módulos de bastantes tarjetas, por lo que tiene un magnífico nivel de reconocimiento de hardware], simplemente hay que ejecutar como root [anteponer sudo para distros basadas en Ubuntu] el comando modprobe modulo_tarjeta. Con esto cargamos en el kernel el módulo que se encarga de hacer que nuestro sistema se entienda con el dispositivo inalámbrico [wifi]. A veces, se requiere editar como root el archivo /etc/modules y añadir al final del mismo una nueva línea con el nombre del módulo que gestiona nuestra tarjeta. Yo suelo usar como editor de texto Gedit, por lo que procedemos a abrir un terminal y ejecutamos el comando gedit /etc/modules, añadimos al final una nueva línea con el nombre del módulo que gestiona nuestra tarjeta. Para comprobar que nuestro driver ha sido cargado, podemos leer el informe de módulos del kernel cuando ejecutamos en un terminal el comando lsmod.

¿Qué drivers vienen precompilados con nuestra distro?

Lo mejor es informarse en el propio cd de instalación, en los foros y en nuesto sistema recién instalado antes de hacer nada. Voy a comentar algunos chipsets junto a los módulos que usan habitualmente:

  • Atheros. El más común de los chipsets de atheros es el ar5212, que funciona con el driver de Madwifi. En Ubuntu Edgy se debe instalar el paquete "linux-restricted-modules" [está motivado porque parte del código que gestiona el uso de la tarjeta no es libre] o bien debemos bajarnos los drivers del sitio http://madwifi.org/ y compilarlos. Guadalinex en sus versiones 3 y 4 los trae compilados y se cargan automáticamente, aunque si fuese necesario cargarlos en el núcleo, basta con ejecutar como root el comando modprobe ath_pci.
  • Ralink. Este fabricante se ha distinguido por liberar el código de sus tarjetas inalánbricas y es, actualmente, una de las mejores opciones de compra. Habitualmente el chipset recibe el mismo nombre o similar que el módulo que lo gestiona. En Guadalinex v4 y Ubuntu Edgy encontramos precompilados los módulos rt2500, rt2570, rt61 y rt73. Una simple búsqueda en nuestro sistema, desde un terminal, con el comando locate rt* nos devuelve la lista de módulos disponibles cuyo nombre empieza por rt. Otra posibilidad es usar en terminal como root el comando modprobe -l | grep "modulo" [el nombre del módulo admite comodines con * y debe ir entrecomillado]. Según he leido, el módulo rt61 no funciona en Edgy, por lo que se debe compilar desde las fuentes [Ubuntu-es], aunque los usuarios de Guadalinex v4 no necesitamos instalar las cabecerasw/headers. Respecto al módulo rt73, si se trata de un dispositivo usb requiere instalar el firmware en el directorio /etc/Wireless/RT73STA [si no existe debe crearse como root], después de haber renombrado el archivo rt73.bin como rt73sta.dat. Si no logras que funciones, quizás debas compilar un nuevo módulo, para lo que te aconsejo seguir esta receta. En el sitio de Ralink y, mejor aun, en el Open Source rt2x00 podemos encontrar más información.
  • Zydas. Fabrica los muy conocidos zd1211 y el menos común zd1201. El zd1211 está presente casi exclusivamente en dispositivos USB y el módulo que lo gestiona, al igual que el zd1201, tiene el mismo nombre que el chipset. Puede obtenerse más información para los drivers de zd1211 y para los de zd1201 en los sitios respectivos. Encontramos compilados ambos módulos en las últimas distribuciones de Linux, particularmente en Guadalinex v3 y v4, por lo que su carga en el sistema es inmediata y sencilla. Sin embargo, parece que en algunos casos, particularmente el zd1211, está dando problemas, por lo que deberás compilar el driver siguiendo las instrucciones del paquete oficial o como se indica en el sitio de Ubuntu Francófono. Como última opción tenemos la de usar Ndiswrapper.
  • Prism54. Es otro de los chipsets que tienen drivers bajo Linux y cuyo módulo respectivo, prism54, está disponible en las versiones mencionadas, al igual que en la mayoría de distribuciones de Linux. Se puede obtener más información del driver en http://prism54.org/. Un caso particular, es el de la tarjeta Senao 3054 ub5 [dispositivo USB Amper de Telefónica de España]. Se ha puesto a punto con Ndiswrapper, aunque no descarto que pueda usarse los drivers de Linux.
  • Intel/IPW. Se vienen usando los chipsets de Intel Pro Wireless, IPW, frecuentemente integrados en numerosos equipos portátiles. Dispone de drivers libres enel sitio de SourceForge para tres modelos diferentes de chipset, el más antiguo ipw2100, el más habitual ipw2200 y el más reciente ipw3945. Algún problema con el firmware en versiones más antiguas complicó su instalación en cierta medida. En el sitio de Guadalinex se explica cómo instalar y compilar ipw2100 y 2200. En cambio para hacer funcionar tarjetas que montan el chipset ipw3945, en Guadalinex v4 disponemos del módulo ya compilado que permite levantar la conexión, incluso arrancando el equipo desde el Live-CD.
  • ACX100/ACX111. El fabricante Texas Instrument [TI] ha conseguido un buen producto con drivers libres que gestionan estas tarjetas, pero en Ubuntu y Guadalinex están dando problemas, por lo que queda el recurso de compilar un nuevo driver o en su defecto usar Ndiswrapper. Se pueden descargar las fuentes del driver y encontrar más información en ACX100 de Sourceforge y en Craig's [para versiones del kernel anteriores a la 2.6.14].
  • Realtek 8180. Una nueva familia de chipsets basados en el 8180 está siendo soportada por Linux. En el sitio de Realtek en SourceForge se encuentra información del proyecto para la familia del rtl8180. En la sección de descargas del sitio oficial de Realtek podemos encontrar drivers para este chip de Realtek.
  • Broadcom. Ha creado una nueva generación de chipsets compatibles con Linux y reconocidos como bcm43xx. Dispone del módulo que la gestiona pero requiere la instalación de firmware propietario, por lo que no es instalada automáticamente. En el sitio de Fentlinux se nos explica cómo usarla con sus propios drivers y con Ndiswrapper.
  • Prism2/2.5/3. Son de las más veteranas entre las tarjetas compatibles y suelen dar cobertura a las más que difíciles conexiones por USB. Más información a través del proyecto Linux-wlan-ng, aunque lleva parado desde el año 2004 por ser material obsoleto que usa el protocolo 802.11b. Caso particular es el de la Amper - Senao SL-2511CDPLUS EXT2 por PCMCIA y la Senao SL-2511UB por USB, ambas de Telefónica y, por tanto, muy populares entre bastantes usuarios. Recomiendo visitar los foros de Guadalinex para saber cómo instalarlas.
  • Atmel. Es también uno de los fabricantes más veteranos y dispone de productos que funcionan exlusivamente con el protocolo 802.11b. En casi todas las distros de Linux se incorporan drivers libres, bajo el proyecto AT76C502. En el sitio de SourceForge se da cobertura a otro proyecto para Linux. Material muy fiable pero clasificado como obsoleto.
Hay algunos chipsets que me he dejado en el tintero [ufff... menos mal... este capítulo se me está haciendo larguísimo, quizás porque he tenido que escribirlo íntegramente desde el principio y he debido reorganizar toda la información], ya que éstos son los que me resultan más conocidos y frecuentes. Dejo en vuestras manos añadir los que falten.

Debo decir que la mayoría de las tarjetas que montan alguno de los chipsets mencionados [casi me arriesgo a decir que todas], funcionan con Ndiswrapper, pero hay que hacer antes una pequeña correción. Se debe editar como root un archivo llamado blacklist [buscar en /etc/hotplug/blacklist para Guadalinex v3/Breezy o en
/etc/modprobe.d/blacklist para Guadalinex v4/Edgy] y añadir una línea al final del texto con el nombre del módulo que haría funcionar el chipset de la tarjeta en v3 y el término blacklist seguido del nombre del módulo para la v4. Con ello conseguimos que no se vuelva a cargar en el inicio del sistema y así evitamos que interfiera con la carga del driver de Ndiswrapper. También nos aseguraremos de descargar el módulo usando como root [ubunteros, recordad el uso de sudo] el comando rmmod nombre_modulo.

El próximo capítulo estará dedicado a la instalación de Ndiswrapper.

¡¡¡ Hasta pronto !!!

;-)

3 comentarios:

Al dijo...

hola. Me compré un usb wifi WISACOM, que lleva el chip zydas.
éste venía con drivers para linux, windows...
supuestamente no debía tener ningún problema con la instalación del "pinganillo" en cuestión pero soy muy novato en linux y no tengo la más remota idea de cómo instalarlo. He leido un montón de foros y demás para ver si consigo instalarlo pero sinceramente no me entero mucho que digamos. ¿podrías explicarme cómo instalar el usb wifi del que hablo?
muchas gracias

ambientix dijo...

Lo primero es confirmar el chipset que monta tu equipo. Para ello ejecuta en un terminal el comando lsusb y busca por en internet por el código ID encontrado.

Otra cuestión muy importante es que indiques que distribución de Linux estás usando y la versión concreta de la misma. Hay diferencias de unas a otras, incluso dentro de la misma distro. Sin esta dato no hay nada que hacer.

Seguidamente, ver el informe generado cuando ejecutas en un terminal el comando lsmod, ya que ahí podrás observar los módulos que carga el sistema y las posibilidades reales de conectar a internet de una forma u otra.

Bien, pues suerte en tu tarea y bienvenido al mundo de Linux.

ambientix dijo...

Parece ser que el chipset de tu tarjeta es el zd1211b, así que para ir entrando en faena, echa una vistazo a los siguientes sitios:

http://www.gatowifi.com/?p=101

http://misapuntes.wordpress.com/2006/11/26/configurar-smcwusb-g-eu-en-ubuntu-606-chipset-zydas/

http://www.linuxwireless.org/en/users/Drivers/zd1211rw

Hasta pronto