NDISWrapper

Algunos fabricantes de tarjetas WiFi solo crean drivers para Windows. Esto, en principio, no tiene nada de malo (no podemos obligar a un fabricante a sacar drivers para los cientos de sistemas operativos que hay en el mundo), si no fuera por el hecho de que las especificaciones de su hardware se mantienen en secreto. Esto *sí* que es malo, porque impiden que alguien ajeno a la empresa cree un driver.

NDISWrapper es un software que permite emplear los drivers windows de las tarjetas WiFi en Linux. Lo que hace es adaptar el API del kernel Linux al API que implementa el driver windows. Es algo así como un traductor. NDISWrapper es libre y gratuito.

Para usar NDISWrapper, lo primero es asegurarse de que tu tarjeta está soportada:

http://ndiswrapper.sourceforge.net/joomla/index.php?/component/option,com_openwiki/Itemid,33/id,list/

Si tu tarjeta aparece por ahí (o si no aparece pero quieres probar fortuna), usar NDISWrapper es realmente sencillo.

Siento decirte que para esta tarea tendremos que emplear la consola como root :)

Resumen para el impaciente

Si ya controlas de Linux, el resumen es:

  1. evita que los drivers de linux de tu tarjeta se carguen
  2. instala las fuentes del kernel
  3. bájate la última versión de NDISWrapper
  4. compila e instala
  5. carga el driver de windows con ndiswrapper -i loquesea.inf
  6. modprobe ndiswrapper
  7. iwconfig ....

Eliminar drivers que no queremos usar

Lo primero es asegurarse de que ningún driver Linux va a interferir. Algunas distros (la mayoría) cargan automáticamente los drivers que ellos creen que son los mejores. Esto hay que evitarlo. Para ello, hay que añadir a /etc/modprobe.d/blacklist los nombres de los módulos que se cargan cuando la tarjeta WiFi se detecta.

Por ejemplo, al conectar mi tarjeta wifi USB, en los mensajes del kernel aparecen entradas con los nombres “rt2500usb”, “rt73usb”, “p54usb”. Estos drivers son los que queremos eliminar. Si hago “lsmod” (listar los módulos -drivers- cargados) y me leo con cuidado la lista de módulos cargados, veo que, efectivamente, aparecen los anteriores; también veo (fijándome en la tercera columna de la salida de lsmod) que hay otros módulos (rt2x00usb, rt2x00lib, prism54usb, p54common) que están siendo usados por los primeros (rt2500usb, rt73usb, p54usb). Esto ocurre porque los primeros módulos tienen dependencias y necesitan a los segundos para funcionar.

Así pues, tenemos siete drivers que queremos dejar de usar. Edito /etc/modprobe.d/blacklist y añado al final del todo lo siguiente:

blacklist rt2500usb
blacklist rt2x00usb
blacklist rt2x00lib
blacklist rt73usb
blacklist prism54usb
blacklist p54usb
blacklist p54common

ahora podemos optar por descargar uno a uno los drivers (con el comando rmmod) o bien reiniciar la máquina. Lo que más rabia te de.

Instalando las fuentes del kernel

Lo primero que hay que hacer es tener las fuentes de tu kernel. Debes saber qué versión del kernel estás usando. Nada más fácil:

uname -a

Esto devolverá un mensaje diciendo qué versión de kernel tienes. Si, por ejemplo, tienes la 2.6.24-6-686, entonces tendrás que instalar las fuentes para esa versión. En algunas distribuciones tienes la oportunidad de instalar sólo las cabeceras (headers). Yo te recomiendo que instales las fuentes completas, porque a veces te puede venir bien.

Asegúrate de que en /usr/src hay un enlace simbólico llamado “linux” que apunta a la carpeta que contiene las fuentes del kernel con la versión que estés usando. Por ejemplo, si uso el 2.6.24-6-686 y he instalado las fuentes de esta versión, tendré una carpeta llamada

/usr/src/linux-2.6.24-6-686

así que si hago

cd /usr/src
ls -las

tendré que ver algo así como

[...] linux -> linux-sources-2.6.24-6-686

Si no lo veo, o si “linux” no apunta a donde debe apuntar, no hay problema:

cd /usr/src
rm linux 
ln -s linux-sources-2.6.24-6-686 linux

(no te apures por ese “rm linux”, esto no es dañino para tu sistema). Esto borra el enlace simbólico “linux” y crea otro llamado igual que apunta al directorio correcto.

Ten en cuenta que los nombres de los directorios (linux-sources-2.6.24-6-686 en este caso) pueden diferir dependiendo de tu distribución.

Compilando NDISWrapper

Una vez tengamos las fuentes del kernel, navegamos por la web de ndiswrapper para descargar la última versión. Lo guardamos, por ejemplo, en /root. Obviamente tendrás que ser root para poder dejar el .tar.gz en ese directorio. Yo lo voy a descargar desde la terminal con wget.

cd /root
wget http://downloads.sourceforge.net/ndiswrapper/ndiswrapper-1.52.tar.gz?modtime=1201988892&big_mirror=0
tar xvzf ndiswrapper-1.52.tar.gz
<code>

compilamos e instalamos:

<code>
cd ndiswrapper-1.52

Si ya tienes alguna instalación vieja de NDISWrapper, asegúrate de eliminarla:

make uninstall

Ahora compilamos:

make

Y si si todo va bien, instalamos:

make install

Haciendo esto se te instalan los drivers de ndiswrapper y un par de comandos de la terminal que serán útiles.

Por fin: usando NDISWrapper

Coge el CD de drivers de windows y móntalo. Navega por el CD hasta encontrar los drivers de windows para tu tarjeta. Los drivers suelen llamarse xxxxx.inf así que haz:

ndiswrapper -i xxxxx.inf

Si todo va bien, el driver estará listo:

ndiswrapper -l

así que ya tienes el driver de windows disponible en tu Linux. Cárgalo:

modprobe ndiswrapper

y deberías ver una nueva interfaz:

iwconfig

A partir de ahi, deberás configurar la nueva interfaz con el ESSID de la red y los parámetros de seguridad que necesites.

 
wiki/ndiswrapper.txt · Última modificación: 2008/05/18 02:47 por voiser
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki