Ndiswrapper
¡Este artículo puede reciclarse! Este artículo no cumple los estándares esperados en la wiki de openSUSE. |
Contenido
Introducción
El soporte de drivers para las tarjetas inalámbricas basadas en el chip Atheros ha sido eliminado en la versión 10.1 debido a cuestiones de licencias ([1] y [2] ). Existen dos soluciones disponibles para solventar esto:
- madwifi - un driver para el kernel de Linux totalmente open-source para las tarjetas inalámbricas con el chip Atheros.
- ndiswrapper - una implementación de la API win32 usada en conjunto con los drivers originales de Windows.
Cualquiera de estos métodos debería funcionar, y se recomienda probar en primer lugar madwifi (si tienes una tarjeta basada en Atheros). Si así no se soluciona, lo más probable es que lo haga con ndiswrapper, aunque puedas experimentar algún que otro problema menor. Este artículo describe la manera de echar a andar tu tarjeta con ambos métodos.
Ndiswrapper
Ndiswrapper usa los archivos *.inf de drivers Windows que trae tu hardware para manejar en Linux tu tarjeta inalámbrica.
Algunos fabricantes no liberan las especificaciones de su hardware o no proporcionan drivers para Linux de sus tarjetas inalámbricas. El proyecto Ndiswrapper implementa la API kernel de Windows y la API NDIS (Network Driver Interface Specification) en el kernel de Linux. De esta manera, el driver Windows de una tarjeta de red inalámbrica se enlaza a esta implementación y funciona de forma nativa, tal como en Windows, sin emulación.
¿Dónde obtener Ndiswrapper?
Ndiswrapper está incluido en los CD's de instalación de openSUSE. Usa la utilidad de Instalar/desinstalar software de YaST y comprueba que estén instalados los siguientes paquetes:
- ndiswrapper
- ndiswrapper-kmp-[default|smp|xen]
- wireless-tools
Elige el módulo del kernel kmp apropiado para tu arquitectura. La mayoría necesitarán el "ndiswrapper-kmp-default".
También puedes probar a obtener la versión más reciente directamente desde la web de ndiswrapper.
Obtener los drivers de Windows
Nota: Puedes determinar qué drivers necesitas consultando tu hardware en particular en la lista de compatibilidad de ndiswrapper
Desde tu partición Windows
Si tienes una instalación dual-boot en tu máquina y tu tarjeta funciona correctamente en Windows, entonces la mejor manera de obtener los drivers es tomarlos de la propia partición Windows. Bajo Windows, ve al Administrador de Dispositivos y busca tu tarjeta inalámbrica bajo "Adaptadores de red". Haz clic derecho en el dispositivo y elige Propiedades->Controlador->'Detalles del controlador...'. Aquí deberías encontrar la ruta a un archivo *.sys, normalmente ubicado en el directorio C:\windows\system32\drivers\.
Ahora usarás la funcionalidad "Buscar" de Windows para encontrar el archivo *.inf correspondiente, que no es más que un simple archivo de texto (¡intenta abrirlo!) con una lista de todos los archivos que necesita el driver. Una consulta tipo en Windows podría ser:
Todo o parte del nombre de archivo: | *.inf |
Una palabra o frase en el archivo: | <la ruta del *.sys que encontraste más arriba> |
Buscar en: | Discos duros locales (C:) |
¡Esta búsqueda puede llevar un rato! Cuando haya acabado, busca dentro del archivo *.inf con un editor de texto y mira si necesitas dar con algún archivo más. Si estás de suerte, todos deberían estar en un sólo directorio (por ejemplo C:\Archivos de programa\Atheros\Drivers\). Copia todos estos archivos a un sitio accesible o a una unidad USB que sea accesible desde tu Linux.
Desde el software de instalación del controlador
Hay varios sitios donde puedes empezar a buscar tus controladores, en orden de preferencia:
- el CD de instalación que vino con tu hardware (¿lo tienes, verdad?)
- en el sitio web del fabricante de tu PC o del fabricante de tu tarjeta
- buscando tu archivo *.sys en Google
Si estás de suerte, encontrarás el archivo *.inf correcto y sus archivos relacionados fácilmente. A menudo necesitarás descomprimir un archivo *.cab que contiene toda la relación de ficheros del controlador. Consejo: puedes manejar los archivos *.cab mediante algún sitio web como driveragent.com. Puedes intentar descomprimir estos archivos mediante:
De nuevo, una vez los obtengas, cópialos a algún lugar accesible a tu sistema Linux.
Tratando con múltiples *.inf
Si hay dos o más archivos *.inf no temas, cada uno es para una versión distinta de windows. Mi disco de drivers tiene dos:
bcmwl5a.inf and bcmwl5.inf
El primero es win98; el segundo, para Win2K, Me, y XP. En mi caso, el de windows 98 funcionó y el de XP no.
Instalar tus drivers
Abre una consola y ejecuta su (si no sabes lo que es, el comando su significa "switch user" que sin parámetros se refiere a -- root---. Escribe la password de root).
Ahora escribe:
ndiswrapper -i /ruta/a/los/drivers/bcmwl5a.inf
Asegúrate de incluir la ruta a tu archivo *.inf.
Puedes hacer referencia directamente a cualquier directorio windows. Si la ruta a este directorio contiene espacios en blanco, por ejemplo, "Archivos de programa", es recomendable situarte primero con cd en el directorio del driver:
cd '/windows/donde está el archivo inf' ndiswrapper -i esto_y_aquello.inf
Si todo va bien, escribe:
ndiswrapper -l
Si lo has hecho bien, deberías ver algo como esto:
Installed ndis drivers: <driver name> driver present, hardware present
Donde <driver name> muestra el nombre del driver windows instalado con ndiswrapper.
Si dice "invalid driver" entonces necesitas desinstalar ese driver e intentarlo con otro.
Para desinstalar un driver, tienes que escribir:
ndiswrapper -e <y el nombre del driver a desinstalar>
Una comprobación adicional puede ser mirar en
/etc/ndiswrapper
si hay un directorio con el nombre del driver instalado.
Stick inalámbrico USB
Comentario de Martin Falinski (27.06.06)
Si tienes un stick inalámbrico USB, podría ser una ventaja. Pásale a ndiswrapper el VendorID y el ProductID con el parámetro -d. Busca ambos id's en Yast. Hardware>>Información sobre el hardware>>Categoría USB. Ahí encontrarás el dispositivo y dos números de 4 dígitos o caracteres, como 0437f y 2573.
Para enlazar el dispositivo USB al driver, escribe:
ndiswrapper -d xxxx:xxxx <y el nombre del driver>
echa un vistazo ejecutando:
dmesg
y busca successfully loading/connecting acerca del driver. ¡Si no, vuelve al paso 2!
Si funciona, puedes escribir el alias para ndiswrapper en el modules.conf con
ndiswrapper -m
luego mira si ndiswrapper será cargado con el comando
modprobe ndiswrapper
después podrás configurarlo con Yast
Inicialización de Ndiswrapper
Escribe
modprobe ndiswrapper
Después de que haya funcionado modprobe, si has configurado tu tarjeta en YaST, entonces puedes ejecutar
rcnetwork restart
que es lo mismo que (pero escribiendo menos)
/etc/init.d/network restartpara reiniciar tu administrador de red, y la tarjeta debería activarse correctamente.
Conflictos potenciales y otras cuestiones
Compilar desde el código fuente las versiones 1.46 y anteriores
Ndiswrapper 1.46 y posterior requiere de un kernel 2.6.17 o superior para compilar correctamente. openSUSE 10.2 y posteriores ya vienen con kernels superiores; los usuarios de versiones previas de SUSE necesitarán, o bien actualizar el kernel, o utilizar una versión de Ndiswrapper igual o inferior a la 1.45. Naturalmente, los usuarios que opten por los paquetes precompilados ndiswrapper-kmp-<flavor> que vienen incluidos en los CDs/DVDs pueden obviar este asunto.
Conflictos con NetworkManager
¿Alguien más tiene problemas aquí?
He encontrado, en openSUSE 10.2, que ifup sólo funciona cuando se configura la conexión inalámbrica (dirección IP, encriptación, autenticación, etc) vía YaST.
Estoy usando una Broadcom inalámbrica incluida en un portátil. Usa los drivers bcwl5a.inf.
Cargando Ndiswrapper durante el arranque
Un método que puede funcionar es editar el script de red, en /etc/init.d/network.
Add in a line that says modprobe ndiswrapper
before it gets to the actual
networking script so that ndiswrapper is loaded prior to the script running.
Nota: esto no debería ser necesario si configuras tu interfaz inalámbrica con YaST y especificas 'ndiswrapper' en el campo 'nombre del módulo'. Esto debería cargar el módulo del kernel ndiswrapper en el arranque.
Cargando Ndiswrapper durante el arranque (opensuse 10.3)
En algunos casos (como con los dispositivos inalámbricos USB), al configurar la interfaz wireless con YaST, no se carga automáticamente el módulo ndiswrapper en opensuse 10.3. Para que tu tarjeta wireless funcione durante el arranque, deberás editar el script de red (/etc/init.d/network) (como se describe más arriba).
Otro método es editar el archivo de configuración /etc/sysconfig/kernel, añadiendo ndiswrapper
en la sección MODULES_LOADED_ON_BOOT
(MODULES_LOADED_ON_BOOT="ndiswrapper"
).
Configurar tu tarjeta en YaST
Después de instalar ndiswrapper, abre el Centro de Control Yast (yast2) y ve a la pestaña Dispositivos de red del lado izquierdo. Luego haz clic en el icono Tarjeta de red. Esto abrirá el asistente de Configuración de red. En el "Método de configuración de red" elige "Controlada por el usuario mediante NetworkManager" y pulsa "Siguiente".
En la "Vista resumen", haz clic en "Añadir".
En "Tipo de dispositivo", elige "Inalámbrico" de la lista desplegable, deja todo como está y escribe ndiswrapper en el campo "Nombre del módulo". Pulsa "Siguiente".
En the Network Address Setup, ve a la pestaña "General", y cambia el firewall a "Zona externa". Esto podría cambiar según el caso. Cambia la "Activación del dispositivo" a "Durante el arranque" (o "Conexión mediante Hotplug"). Pulsa en "Siguiente".
En la siguiente pantalla configura los aspectos de tu red. Mi experiencia es que es mejor dejar los campos ESSID y clave de encriptación vacíos y dejar que KDEWallet los configure, de otra manera podría haber conflictos. Most of the time, your Operating Mode will be set to "Managed".
Un caso particular
Me gustaría compartir mi experiencia de echar a andar una tarjeta inalámbrica Broadcom Dell 1390 mini-pci en un portátil Compaq Presario V6000 con dual boot entre Windows Vista Home (32 bits) y openSUSE 10.2 (64 bits). Espero que de esta forma puedas ahorrarte tiempo y frustraciones, si te ves en un caso parecido.
El portátil se conectaba perfectamente a internet desde Vista a través de un router inalámbrico Linksys con encriptación WPA-PSK y con un ESSID sin publicar. El objetivo era lograr la misma funcionalidad desde openSUSE 10.2.
El primer problema fue detectar la tarjeta. Tuve que usar ndiswrapper junto con los drivers bcmwl5.inf y bcmwl564.sys (disponibles mediante el archivo extraíble R151517.EXE desde el centro de descargas Dell). No funcionó ningún otro método.
Entonces intenté configurar la tarjeta mediante YaST, tal como se descibe en el artículo. Aunque se encendía el led azul, y la tarjeta detectaba otras redes seguras, cuando usé iwlist wlan0 scan no encontraba mi red (comprensible, ya que el ESSID de mi red no se muestra). No encontré la manera de configurar los aspectos de seguridad de la red usando YaST. El comando iwconfig mostraba sólo la configuración por defecto. ¡Ésto me frustraba! Entonces decidí usar KNetworkManager y asunto resuelto. Pude configurar la tarjeta según la seguridad de mi red y conectar a internet. Lo único que necesitas es lanzar knetworkmanager cada vez que arrancas, para lo que necesitas ejecutar, por ejemplo:
ln -s /opt/kde3/bin/knetworkmanager ~/.kde/Autostart/knetworkmanager
Ver también
Enlaces externos
¿Aún no sabes cómo va esto?
Visita: http://www.opensuse.wiseportion.com/10.2/ndiswrapper.php