Introducción a NdisWrapper

http://screenshots.softonic.com/s2/37000/37732/1_wlan.jpg Desarmando al diablo...

  • ¿Tenemos, los usuarios de Gnu/Linux, que sufrir las penas de un fabricante injusto?
  • ¡NO! ¡Tenemos NdisWrapper! =¬)



¿Qué es NdisWrapper?

Pues, como su nombre indica, es un sistema que nos va a permitir emular los drivers para Windoze XP de nuestra nic wifi "empaquetándolos" para que puedan funcionar en un Linux (propiamente dicho, con Linux como sinónimo de kernel o núcleo). Lo mejor es tener una tarjeta con chip Prism (prism2?) o Atheros, que si bien no son los únicos que tienen drivers nativos para Linux (caso de ZD1201), pero que se encuentra bien documentado en toda la Internet.

Pero, si fuiste como yo y compraste lo que tu bolsillo te dictaba, ¡todavía queda una opción!

¿Mi placa es compatible con NdisWrapper?

Quizá antes de seguir leyendo quieran ver si su placa está dentro de la lista de las placas compatibles con el software.

Para ello,vean la lista.

¿Qué se necesita?

Cabeceras del Kernel (o núcleo) que utilizaremos para correr NdisWrapper

Recordar que para compilar el módulo, al igual que la gran mayoría de los drivers y algunas aplicaciones, necesitaremos las fuentes del kernel que estemos usando. Si estás usando Debian (Ubuntu) y tenés un kernel precompilado (la opción más inteligente a mi entender) podes hacer simplemente:

# apt-get install linux-headers-`uname -r`

NdisWrapper

Ndiswrapper está compuesto por un módulo del kernel (que usaremos como si fuese el módulo de la tarjeta) y su utilitario, el cual nos va permitir las configuraciones propias de NdisWrapper, como la carga, listado, borrado, etc, de nuevos controladores. El módulo viene ya incluido en muchos kernels de las últimas distribuciones (como Ubuntu). Además, en el caso de Debian-Ubuntu, basta hacer lo siguiente para instalar las utilidades:

# apt-get install ndiswrapper-utils

Para usuarios de Debian, la gente de NdisWrapper tiene repositorios oficiales:

deb http://ndiswrapper.sourceforge.net/debian ./

Si NdisWrapper no está incluido en tu distro siempre podemos descargar el módulo, ya sea por CVS o por descarga directa, desde la web del proyecto en Sourceforge http://ndiswrapper.sourceforge.net/ o bien, usa Debian Gnu/Linux ?=¬) .

Después descomprimimos las fuentes y hacemos el clásico:

# make
# make install

Bien, pues ya lo tenemos instalado, continuamos con la carga del módulo al kernel.

Drivers provistos para Windoze XP (o 2000) por el fabricante

Casi siempre, y según la documentación de NdisWrapper, hay que usar los drivers de Windoze XP. Sin embargo, yo use los drivers de Windoze 98 y funciono de todas formas. Estos drivers suelen constar de un archivo con extensión .inf y otro con extensión .sys

IMPORTANTE: Usualmente se precisan sólo estos dos archivos, pero, es recomendable, no borrar ningun archivo que pertenezca al paquete provisto por el distribuidor del driver, hasta que este haya sido cargado correctamente dentro de la plataforma de NdisWrapper.

Instalando los drivers

Avanzamos un poco más:

Nos vamos al directorio donde se encuentren los archivos con los drivers entregados por el fabricante para Windoze XP y hacemos lo siguiente como root:

# ndiswrapper -i driver.inf

En donde "driver.inf" es el nombre completo del archivo que acompaña al drivers. El parametro "-i" es de "install".

Lo que hará NdisWrapper es copiar el archivo .sys y crear una configuración para él (lo podemos encontrar en /etc/ndiswrapper)

Ahora ya podemos empezar a probar. Si hacemos un

# ndiswrapper -l

Esto nos listara los drivers que tenemos instalados con bajo NdisWrapper y si su hardware está presente o no.

Si la nic no está conectada, procedemos a conectarla (para el caso de pcmcia, usb), si la nic es pci, apagamos e instalamos correctamente. Podremos listar los módulos cargados en el utilitario de NdisWrapper para comprobar el estado del dispositivo. Seguidamente cargamos el módulo NdisWrapper propiamente dicho:

# modprobe ndiswrapper

Si ahora miramos en los logs del sistema deberíamos ver como NdisWrapper reconoce la tarjeta.

# cat /var/log/messages |grep ndiswrapper

localhost kernel: ndiswrapper version 0.10 loaded (preempt=yes,smp=no)
localhost kernel: ndiswrapper: using irq 11
localhost kernel: wlan0: ndiswrapper ethernet device 00:80:5a:22:af:48 using driver conrt.sys
localhost kernel: ndiswrapper device wlan0 supports WPA with AES/CCMP and TKIP ciphers
localhost kernel: ndiswrapper: driver conrt.sys (Conceptronic,03/12/2004, 2.02.02.0000) added

Si todo ha funcionado como debería, sólo nos resta hacer:

# ndiswrapper -m

Así crearemos el alias wlan0 ndisWrapper en /etc/modprobe.d/ndiswrapper. Esto hará que cada vez que usemos la interfaz wlan0, se cargue el módulo ndisWrapper. La interfaz se puede levantar normalmente con

# ifconfig wlan0 up

De ahora en mas, "wlanX" sera manipulada como una interfaz de red wireless comun. Por consiguiente, deberas configurarla como tal, o sea:

# iwconfig wlan0 mode [modo_a_utilizar] essid [tal] key [cual] ap any

Si no sabes como hacer para configurar la interfaz, te recomiendo que mires documentación al respecto, ya que esto da por sentado los conocimientos básicos de una configuración de red.

Problemas conocidos

Usando kernels precompilados de Debian

He encontrado recientemente (Septiembre 2005) que, en el caso de utilizar un kernel precompilado de Debian (igual que en Ubuntu) se necesita compilar el módulo ndiswrapper con gcc 3.3, nada difícil, sólo que en el punto 1.2.2 en vez de hacer

# make
# make install

SE DEBE HACER

# make CC=gcc-3.3
# make CC=gcc-3.3 install

¡Una carga incorrecta equivale a un dolor de cabeza!

El proceso que se lleva acabo en 1.3, para la carga del driver provisto por el fabricante bajo Windoze XP, debe arrojar un resultado similar a este:

Caso correcto 1

# ndiswrapper-1.3rc1# ndiswrapper -i ../Driver/WLANPCI.inf
Installing wlanpci

# ndiswrapper-1.3rc1# ndiswrapper -l
Installed ndis drivers:
wlanpci         driver present

En este caso, el nic no se encontraba conectado, pero el driver estaba cargado correctamente.

Caso correcto 2

# ndiswrapper-1.3rc1# ndiswrapper -i ../Driver/WLANPCI.inf
Installing wlanpci

# ndiswrapper-1.3rc1# ndiswrapper -l
Installed ndis drivers:
wlanpci         driver present, hardware present

En este caso, el nic se encontraba conectado y el driver estaba cargado correctamente.

Caso INcorrecto

# ndiswrapper-1.3rc1# ndiswrapper -i ../Driver/Wland.inf
Installing Wland

# ndiswrapper-1.3rc1# ndiswrapper -l
Installed ndis drivers:
Wland     invalid driver!

En este caso, el controlador cargado estaba corrupto, o bien, el driver no correspondía a una placa wireless, o bien, el driver no era el adecuado. Solución: Conseguir la última versión existente para Windoze XP de nuestra nic desde el Web del fabricante.

Soporte (inglés)

Wiki

http://ndiswrapper.sourceforge.net/wiki

Preguntas Frecuentes

http://ndiswrapper.sourceforge.net/wiki/FAQ

Foros

http://ndiswrapper.sourceforge.net/forums

Lista de Correo

http://sourceforge.net/mail/?group_id=93482

IRC

irc.freenode.net:6667 #ndiswrapper

Enlaces

http://ndiswrapper.sourceforge.net/

http://ndiswrapper.sourceforge.net/wiki/

http://ndiswrapper.sourceforge.net/mediawiki/index.php/Distributions

http://ndiswrapper.sourceforge.net/mediawiki/index.php/List

Aclaración

Es MUY recomendable pasar por el Wiki de NdisWrapper, es muy completo y tiene mucha documentación sobre el software y sobre los drivers nativos que están disponibles. ¡Muy detallado! Todas las cosas que se comentan son derivados de mis experiencias, usar bajo vuestra responsabilidad (y sí, a ver si todavía me echás la culpa a mí de tus errores! ?=¬) )

Colaborador

MarianoDererkVelez (aka_shift-u) <dererk AT NOSPAM madap . com . ar>

Wiki: IntroduccionNdiswrapper (last edited 2008-09-28 09:18:30 by localhost)

USLA