jueves, 30 de junio de 2005

USB BELKIN F5D7050 (chipset ralink) en Linux

Tras numerosos intentos, he conseguido que mi mochila usb Belkin F5D7050 funcione en linux. ¿Cómo lo he conseguido? Podría decir que por pura casualidad.

Mis primeros intentos se dirigieron hacia el driver ndiswrapper. Este controlador permite cargar los controladores para windows en linux. Con una versión antigua, que tenía en un disco "vivo", probé a cargar los controladores originales y sólo conseguí un kernel panic. Entonces busqué en el controlador de windows la marca del chipset, y averigué que usaba chipset ralink (OJO: muchas belkin F5D7050 no usan chipset ralink) y busqué un controlador alternativo en la página de ralink. Sin embargo, ese controlador no me funcionó, ni siquiera forzando el código de fabricante y producto con ndiswrapper -d

El siguiente intento, con una versión actualizada de ndiswrapper, tuvo que esperar unos meses, porque yo tenía Solaris 10 instalado y no quería desinstalarlo; por lo tanto, no tenía un lugar donde meter el código fuente de un kernel para compilarlo (las particiones Solaris 10 no se pueden leer desde linux; o al menos yo no lo conseguí ni coMO unix slices ni como ufs). Cuando eliminé el solaris (frustrado porque no había manera de instalar un servidor X funcional), metí un debian, en el que, al principio, tuve exactamente los mismos problemas que en el solaris. Además, maldecí de lo mío, porque yo buscaba las kernel-sources y resultó que no estaban en el DVD 1 sino en el DVD 2. Pero ¡oh maravilla! resulta que los linux modernos llevan una versión reducida de las kernel sources llamada "kernel headers" (para confusión de quienes, como yo, estamos acostumbrados a que los "kernel headers" sólo contengan /usr/src/include).

El caso es que el nuevo ndiswrapper tampoco me funcionó, a pesar de que en el Wiki de ndiswrapper hay quien afirma que funciona.

Busqué ralink en el google y encontré un driver para la ralink rt2500 en 2400.sf.net. Problema: después de compilarlo, vi que no era un driver para usb, sino para pci.

Mi siguiente alternativa fue el driver ural. Es un driver muy majete, basado en madwifi, que permite monitorización pero... cuesta dios y ayuda hacer que se ponga en marcha. Normalmente, sólo he conseguido que comience a mostrar la lista de redes, o a conectarse a una red fija, después de instalarlo y desinstalarlo varias veces, iniciar KWifimanager otras tantas, cambiar la configuración y volver al mismo punto, etcétera. En definitiva, que no os lo recomiendo, porque, además, lo más lejos que he llegado con él es a conectarme a redes sin encriptar, y la mía está encriptada.

La última alternativa es el driver de ralink, cuya versión usb apareció el día 1 de este mes (o sea, hace 29 días). Es un driver que causa grandes problemas a la hora de usar redes encriptadas, pero que puede llegar a conectarse si se usa la aplicación suministrada por el fabricante, que necesita libstdc++.so.6. No me digáis cómo, pero con la aplicación funciona en redes encriptadas, mientras que con iwconfig no lo hace, a pesar de los consejos incluidos en el archivo.


Pero para usar el driver de ralink tendréis que cambiar su código fuente, para añadir el VID y el PID de Belkin a vuestro driver. Lo podéis hacer manualmente, o podéis aplicar este parche (edit: nota, hay que agregar 2 tabs antes de cada "0x"):

-----Corta aquí-----rt2570sw.h.diff-----Corta aquí-----
130a131,132
> #define BELKINVID 0x050D //belkin, use with care
> #define BELKINPID1 0x7050
139a142
> {USB_DEVICE(BELKINVID,BELKINPID1)},
-----Corta aquí-----rt2570sw.h.diff-----Corta aquí-----


Para aplicar el parche, copiad el texto de arriba, guardadlo como rt2570sw.h.diff en el directorio en que se han descomprimido los archivos fuente del driver de ralink, y escribid (en una terminal o consola):
diff rt2570sw.h<rt2570sw.h.diff

luego, podéis crear los drivers.
Si usáis un kernel 2.4.x, tenéis que escribir:
cat Makefile.4 >Makefile
make config
make all
make install


Por el contrario, si usáis un kernel 2.6.x, tenéis que usar estos comandos:
cat Makefile.6 >Makefile
make config
make all
make install


Aseguráos de leer el README y la información que aparece en IWPRIV.
¡Suerte! La necesitaréis.

EDIT: He visto que el driver no tiene make install, en su lugar hay que copiar el archivo .ko al directorio de módulos. No se olviden de ejecutar depmod. Por otro lado, la utilidad Ralink no está exenta de problemas. Más aquí

EDIT: En rt2400.sf.net SÍ hay un driver para USB, lo que pasa es que no aparece en la página de descargas normal, sino como "versión inestable" o algo así. En realidad, es el driver de ralink, con una pequeña modificación que permite su uso como monitorización (yo lo he usado para comprobar que los paquetes samba que lanza mi ordenador de sobremesa por el cable que lleva hacia el router inalámbrico se difunden en broadcast como texto plano: ¡horror!) Por lo demás, es menos estable que el driver de ralink, y al menos a mí me da más problemas de recepción (90% de paquetes con error de CRC en una ubicación en que el driver de ralink no tiene ningún problema). Ambos drivers tienen cierta tendencia a "irse a dormir", así que si no usamos internet durante cierto tiempo hay que re-activar la conexión, aunque RaConfig 2500 nos diga que ya está activada.
El orden de conexión/activación es:
modprobe rt2570 (o modprobe rausb0 si habéis hecho un alias en /etc/modules.conf)
ifconfig rausb0 up
iwconfig rausb0 essid ESSID_DEL_ROUTER
(añadid iwconfig rausb0 key CLAVE si necesitáis una clave, como en mi caso)
ifconfig rausb0 IP_ADDRESS (o dhclient si el router es capaz de asignaros una IP -- lo que no se recomienda)
route add -net default gw IP_DEL_ROUTER (a menos que hayáis usado dhclient)
RaConfig2500 (no debería ser necesario tras los iwconfig, pero lo es).
Recordad que en el fichero iwpriv.txt tenéis ejemplos de configuración para usar WPA. Recomiendo que, si vuestro router lo admite, uséis WPA, pues en caso contrario vuestos vecinos pueden ver, como comenté hace tiempo, vuestros paquetes (directorios compartidos, correo electrónico que recibís y páginas que visitáis, contraseñas de correo o de ftp, mensajes de correo electrónico...), aunque no se puedan conectar a vuestro router. Un túnel encriptado entre dos ordenadores es otra buena solución).

Be Paranoid!

5 comentarios:

damupi dijo...

En la pagina que te adjunto dice que este usb es compatible, desde la version 1 hasta la 4
La version 4 (v.4) tiene un chipset Zydas pero dicen que tb es compatible.

Todo esto viene para buscar un usb para la ps3...q comida de cabeza.

http://linux-wless.passys.nl/query_part.php?brandname=Belkin

jose dijo...

Gracias, damupi. Como verás en la entrada "más sobre la belkin...", los linux actuales llevan drivers para esta tarjeta. De hecho, recientemente tuve que ceder mi mochila usb (que llevaba una base que la hace apropiada para ordenadores de sobremesa) a mi padre, y cuando me compré una nueva, de otra marca, resultó que llevaba el mismo chipset y me iba... como la seda.

alfatango dijo...

como instalar drivers en debian debo instalar tarjeta de red usb belkin y no puedo y me imposibilita mi portatil entrar en red

josemoya dijo...

En primer lugar, comprueba que tengas una belkin de este modelo (F5D7050) y que use chipset de ralink (algunas belkin de este modelo no usan chipset de ralink). A continuación tienes que instalar un compilador de C (apt-get gcc), a menos que ya lo tengas instalado, y los kernel headers.

Después, desde la página web de ralink, te instalas el driver para linux.

Por si tu tarjeta belkin no usa el chip ralink (es lo más probable, porque, en caso contrario, te funcionaría con un debian actual), prueba a descargarte esta "live distro" de linux, que según dicen lleva drivers para todas las tarjetas imaginables (es la que usaron los que diseñaron el ataque Hamster a los portátiles Macbook):
Backtrack 3

Anónimo dijo...

tengo exactamente el mismo problema!

me ayudas?

danielogrove@gmail.com