Introducción a NdisWrapper
Desarmando al diablo...
- ¿Tenemos, los usuarios de Gnu/Linux, que sufrir las penas de un fabricante injusto?
¡NO! ¡Tenemos NdisWrapper! =¬)
Contents
¿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>