miércoles, 20 de febrero de 2008

Conceptronic C54RU en Mandriva 2007

(adaptador Wireless 54Mbps USB 2.0)

Parece que esta página se está conviertiendo en un foro de Linux, pero no es así, sino que me estoy pegando últimamente mucho configurando las máquinas que tengo en casa y ya que me pongo, lo cuento en la bitácora por si le sirve a alguien más... También tengo que admitir que a veces me vuelvo a pegar con el mismo problema más adelante y no recuerdo la solución, asi que estos artículos también me sirven como apuntes para mí mismo, conmigo mismo. Ante todo, espero que perdonéis la longitud de este artículo, pero el tema se complicó bastante y prefiero explicarlo con todo el mayor detalle posible.

Un reto que tenía hace tiempo era hacer funcionar el adaptador WLAN Conceptronic C54RU en el PC donde tengo instalada Mandriva 2007.

Por lo que he podido encontrar en Internet, parecen existir dos formas de hacerlo funcionar:

La primera de ellas consistiría en utilizar ndiswrapper con los drivers de Windows. Por desgracia no encuentro el CD de instalación que me vino con el adaptador USB. Además mirando en la web de Conceptronic, todo lo que encuentro son ejecutables de Windows. Por si me faltasen razones, también he leido que el comportamiento de ndiswrapper con este driver no es muy estable y a veces cuelga el sistema.

La segunda forma de hacerlo funcionar consiste en utilizar unos drivers creados por Ralinktech.

Pero antes de meterme en el ajo, haré un paréntesis para indicar qué driver necesité descargar. Haciendo una búsqueda en ese sitio del que todo el mundo habla, "linux conceptronic c54ru" me llevó a una página de los foros de ubuntu-es.

Al ejecutar el comando "lsusb" (como usuario root), no me encontré con el identificador "14b2:3c02" del que hablan en el artículo, así que no pude seguir los pasos con el controlador rt2500 que utilizan. Una nueva búsqueda con mi identificador "14b2:3c22" me llevó a esta otra página donde indican que el controlador a utilizar es el rt73, ya que ese es el identificador de la versión 2 del "parato".

Volviendo a la página de Ralinktech, pulsando en "support" (arriba), "linux" (izquierda), llegamos a la página de drivers de Ralinktech. En ella encontramos la lista de drivers que han desarrollado. Veo el driver rt73 y me lo bajo. La versión que hay es la 1.1.0.0, del 17/01/2008, así que parece bastante modenna.

Pues nada, una vez con el driver en formato tar.bz2, hay que descomprimillo:

bunzip2 2008_0117_RT73_Linux_STA_Drv1.1.0.0.tar.bz2

Depués, extraello todo:
tar xvf 2008_0117_RT73_Linux_STA_Drv1.1.0.0.tar

Me voy pa'dentro de la carpeta:
cd 2008_0117_RT73_Linux_STA_Drv1.1.0.0

Ahí dentro hay dos carpetas: "Module", que me imagino que será el módulo del driver para Linux y "WPA_Supplicant-0.5.8", que también me imagino que será un cliente para que el "parato" funcione con WPA. Que ya es mucho imaginar, ya, pero uno tiene una imaginación muy fértil. Imaginado todo esto, me introduzco en el "dirictorio" Module:
cd Module

Como uno es muy leido, le echo un vistazo al fichero README:
less README

Por lo que indican por aquí, existe un Makefile.4 para los kernels de la rama 2.4 y un Makefile.6 para los kernels de la rama 2.6. Mi sistema es de la rama 2.6, lo cual se puede ver mediante el siguiente comando:
uname -a
Linux nombredemimaquina 2.6.xx blah blah blah

Asín que nada, ya siguiendo los pasos del README, primero se copia el Makefile adecuado:
cp Makefile.6 Makefile

Luego se ponen permisos de ejecución a Configure, aunque sólo lo indican para la versión 2.4:
chmod 755 Configure

Se ejecuta el comando para configurar la compilación:
make config

En este momento indica las ubicaciones de los componentes necesarios:
Linux kernel source directory : /usr/src/linux-2.6.xx...
Module install directory : /lib/modules/2.6.xx.../kernel/drivers/net

Se ejecuta la compilación del módulo:
make all

Una vez compilado (parece que hubo suerte, aunque me indicó algún WARNING en las versiones de los módulos que no sé si me afectará en el futuro), se instala el módulo:
make install

Después, hay que copiar el firmware del cacharro. En mi caso no existía la carpeta de destino (uh-oh), así que la creé primero:
mkdir /etc/Wireless
mkdir /etc/Wireless/RT73STA
cp rt73.bin /etc/Wireless/RT73STA/

Aquí tuve que hacer un pequeño paréntesis para instalar en mi otro PC (en el que tengo Ubuntu) el paquete "sysutils", ya que el siguiente paso del README requiere utilizar el comando dos2unix. En este caso lo instalé en ubuntu mediante el gestor de paquetes de Synaptic. Seguro que este es uno de esos pasos que te hacen dar para perder un poco el tiempo, pero en fin, después de instalarlo, convertí el fichero desde este PC:
dos2unix rt73sta.dat

Una vez con el fichero "güeno", me lo llevé a la máquina del Mandriva, sí, esa que llevamos un buen rato trasteando, y copié el fichero en la ubicación indicada por el README:
cp rt73sta.dat /etc/Wireless/RT73STA/rt73sta.dat

Ahora quedaba probarlo, vamos allá:
/sbin/insmod rt73.ko
insmod: error inserting 'rt73.ko': -1 File exists

¡Sorpresa! ¿Creías que iba a funcionar todo a la primera? ¡Iluso! Un vistazo con el comando "lsmod" me indicaba que efectivamente, el módulo estaba insertado, así que intenté eliminarlo:
rmmod rt73

Pero no se deja, así que muy a mi pesar, ejecuto la solución Hasefroch: reiniciar a ver si por casualidad carga el módulo nuevo... Todo está colocado en su sitio, ¿no? El adaptador USB en un puerto, los ficheros en las ubicaciones que decía el README, los cojones de corbata... A lo mejor suena la flauta por casualidad, oyes. Así que le doy a reiniciar y al poco de arrancar, el PC se queda totalmente cuajado. ¡Siiiiii! ¡Tomaaaaaaa! ¡Tomaaaaaaaa! Más rápido que Frenando Alonso, si es que no hay nadie con mi pericia para colgar sistemas operativos.

Desenchufo el adaptador USB, vuelvo a reiniciar y por lo menos esta vez arranca. El módulo rt73 sigue cargado, Vaya usted a saber si es el antiguo o el nuevo. Quizá debería haberlo dicho antes, pero hace tiempo que probé una versión más antigua de este driver; me funcionó una temporada y dejó de hacerlo de repente. Esta es la segunda vez que lo intento, ya que he visto la nueva versión en la web de Ralink... Una vez arrancado de nuevo, vuelvo al punto del README donde me quedé, a ver si puedo ejecutar los comandos que me faltan:
/sbin/ifconfig rausb0 inet MI_IP up

No muestra ningún mensaje de error, pero un rápido ping me indica que no tengo red. Ejecutando "ifconfig" de nuevo (esta vez sin parámetros), veo que me ha configurado el interfaz rausb0. Ejecuto el comando "iwconfig" y veo que no está puesto el ESSID de la WLAN:
iwconfig
rausb0 RT73 WLAN ESSID:""
Blah blah blah

Esto me suena de la otra vez... a ver si encuentro los comandos que me faltaban para establecer el SSID, la contraseña, el router...
iwconfig rausb0 essid MI_ESSID_WLAN
iwconfig rausb0 key s:MICLAVEWLAN
route add default gw IP_DE_MI_ROUTER

¡Cáspita, me ha dejado poner la ESSID y la clave, pero no me funciona el comando route:
SIOCADDRT: La red es inaccesible

[cabezazo contra el teclado] [cabezazo contra el teclado] [juramento en arameo] [ara meo y aramis movengo] [cabezazo contra el teclado]

En este punto lo dejé el primer día. Llega un momento en que por más que pienses, la solución no aparece y encima te amargas, así que a veces es mejor detenerse e intentarlo más adelante con la mente más fresca.

El segundo día me seguía preocupando el mensaje repetitivo que me aparecía al iniciar Mandriva y que me obligaba a desenchufar el adaptador y hacer un reset en frío con el botón del PC. El mensaje decía algo parecido a esto:
unregister netdevice: waiting for rausb0 to become free

Así que introduje esa frase en google y aunque en un principio me desilusioné porque me apareció sólo esta página en alemán, dentro de ella mencionaban el artículo WifiDocs/Device/Belkin F5D7050 ver 3000 (Ralink rt73 driver) que sí estaba en inglés. Este artículo es el que me llevó finalmente por el camino correcto, aunque todavía tuve que deducir algunas cosas.

En el artículo se explican los pasos que yo ya había seguido para compilar e instalar el módulo rt73.ko, pero había un par de detalles que no había realizado:

Al intentar ejecutar el siguiente comando, no encontraba la carpeta "extra":
ls /lib/modules/`uname -r`/extra

Creé la carpeta y copié dentro el fichero rt73.ko como el artículo decía que debía estar. Más adelante me di cuenta de que al ejecutar "make install", en realidad la carpeta "extra" se había creado en un lugar diferente, (/lib/modules/`uname -r`custom/extra) aunque no sé si es normal. En fin, dejé el fichero duplicado en los dos sitios.

Me había saltado también la configuración de la red, y este era el paso crucial. El problema vino cuando quise buscar el fichero /etc/network/interfaces, ya que al tratarse de un artículo sobre Ubuntu, no podía encontrar el equivalente para Mandriva. Se me ocurrió ejecutar el comando "route" y me di cuenta de que la tabla de direcciones y redes que me aparecía, no tenía nada que ver con la realidad actual de mi red. Recordé vagamente que esas eran las direcciones del router antiguo que tuve, pero ¿cómo lo configuré aquella vez?

Después de mucho buscar por Internet y por mi máquina, por fin llegué al fichero mágico que tenía que modificar:
/etc/sysconfig/network-scripts/ifcfg-rausb0

En este fichero se anotan todas las propiedades para que el interfaz rausb0 pueda levantarse al ejecutar un comando como "ifcfg rausb0 up". El interfaz puede configurarse con IP estática o mediante un servidor DHCP (en ese caso habrá que usar después un cliente como dhclient para obtener la dirección IP desde el router). En mi caso lo configuré en modo estático. Indico los nombres de las variables a utilizar en el fichero ifcfg-rausb0, pero la configuración dependerá de la red que tenga cada uno:
DEVICE=rausb0
BOOTPROTO=static
IPADDR=direccion_ip
BROADCAST=direccion_de_broadcast
NETMASK=mascara_de_red
NETWORK=direccion_de_red
GATEWAY=direccion_del_router
WIRELESS=yes
METRIC=10
MII_NOT_SUPPORTED=no
USERCTL=no
MS_DNS1=direccion_dns_primario
MS_DNS2=direccion_dns_secundario
RESOLV_MODS=yes

Toma jeroma. Los recuerdos vuelven a mí, golpeándome desde todas direcciones. La primera vez estuve leyéndome la documentación de los drivers wifi y otro montón de páginas para ver si podía hacer que funcionase WPA con el adaptador, pero fue superior a mí, un verdadero infienno que no quiero recordar. Ahora mismo esto va con WEP y clave hexadedimal, que no es lo más seguro del mundo, pero es que ya paso de tanta historia.

Pues nada, una vez que está creado el fichero ifcfg-rausb0, reinicié (no sé si era necesario), y finalmente volví a meter todos los comandos para levantar la red:
ifconfig rausb0 up
iwconfig (para comprobar que había levantado el interfaz)
/etc/rc.d/init.d/network restart (para reiniciar el subsistema de red)
route (para comprobar que las tablas, esta vez, estaban correctas)
iwconfig rausb0 essid MI_ESSID_WLAN
iwconfig rausb0 key s:MI_CLAVE_WLAN
route add default gw direccion_ip_del_router

En ese momento apareció el iconito de la red WIFI en la barra de tareas y... mmmmmhhhhh qué placer, señoras y señores, después de dar tantos tumbos.

En principio, una vez que se han seguido los pasos anteriores para instalar el módulo rt73, esto debería funcionar sin problema cada vez que arranque Mandriva, siempre que tengamos en cuenta lo siguiente:

  • Encender el ordenador sin tener enchufado el adaptador WIFI (a mí se me queda colgado con el mensaje "unregister netdevice: waiting for rausb0 to become free" si lo tengo enchufado al encender).
  • Una vez ha arrancado Mandriva, enchufar el adaptador WIFI al puerto USB.
  • Ejecutar los comandos necesarios para configurar la red WIFI, que podemos tener en un script para mayor comodidad y en teoría deberían ser estos tres:
  • iwconfig rausb0 essid MI_ESSID_WLAN
  • iwconfig rausb0 key s:MI_CLAVE_WLAN
  • route add default gw direccion_ip_del_router


Espero que le sirva a alguien para no dejarse los ojos y los ánimos como a mí. A disfrutarlo.

3 comentarios:

Anónimo dijo...

Hola compañero
Acabo de encontrar tu blog gracias a que estoy instalando el "parato" no se que ruta ponerle al componente, me podrias indicar que ruta habria que poner
Un saludo

Unknown dijo...

Buenas
Estoy siguiendo los pasos como tu dices, pero en el momento de poner una ruta no se cual poner o como hacerlo, ¿tengo que crear esa carpeta? o ¿hay que poner la ruta y la creara sola?
Hasta ahora has sido de gran ayuda tu blog, contesta cuando puedas
Un saludo

redondeado dijo...

Hola, y perdón por tardar tanto en contestar, a veces miro poco el blog.

No sé exactamente a qué componente te refieres... Cuando se ejecuta "make config" las rutas que aparecen las toma dependiendo de la configuración del sistema. Cuando se instala el módulo con "make install", el instalador copia el fichero rt73.ko en esa ruta, aunque a mí no me lo cargaba correctamente desde ahí al arrancar el sistema.

Después, para copiar el firmware, sí que tuve que crear la carpeta "/etc/Wireless/RT73STA". Más adelante en el artículo, después de quedarme atascado, también tuve que crear la carpeta "/lib/modules/`uname -r`/extra" para poner ahí el fichero rt73.ko (desde aquí sí que lo cargaba).

Por último, el paso más complicado fue darme cuenta de que la vez anterior había creado el fichero "/etc/sysconfig/network-scripts/ifcfg-rausb0" donde está descrita la configuración de la red sin cables.

No sé si esto te ayudará mucho, el caso es que yo me pegué bastante con el aparato hasta que fui reuniendo los pasos a seguir de los diferentes artículos. Espero que tengas suerte.

Un saludo.