Installation de NDISwrapper

Article écrit et wikisé par Pathe

Attention : ce tutoriel est assez ancien. De nombreuses cartes wifi sont désormais supportées directement par le noyau. Renseignez-vous à ce sujet avant d'utiliser ndiswrapper ! Avec l'aide de la commande lspci vous pourrez déterminer quel chipset utilise votre carte. Googlisez « Debian + votre carte » pour vérifier si elle est supportée ou non. Si elle l'est, je vous renvoie, à titre d'exemple, au tutoriel suivant : Utiliser une carte wifi Broadcom BCM43XX.

Certaines cartes WiFi n'ont pas encore de pilotes Linux. NDISwrapper vous permet de les utiliser en émulant les pilotes conçus pour le système d'exploitation Fenêtres.

Pré-requis

Kernel-headers

Il faut s'assurer d'avoir le kernel-header correspondant à son noyau. Seuls les kernel-headers sont indispensables ; le reste vient par un jeu de dépendances. La commande uname -r renvoyant le numéro du noyau, il suffit donc de faire :

**apt-get install kernel-headers-`uname -r`

Outils de compilation

En règle générale, tous les outils nécessaires sont installés par défaut si l'on choisit les paquets “développement” lors de l'installation initiale de Debian.

Dans le cas présent, je suis certain qu'il faut gcc et libc6-dev.

Je ne suis pas expert : n'hésitez pas à améliorer ce point.

Le compilateur C de GNU est livré en standard, je crois ; la librairie non. Donc :

# apt-get install gcc
# apt-get install libc6-dev

Outils WiFi

Installer les wireless-tools

# apt-get install wireless-tools

cela installe les outils iwconfig, iwlist, etc…

Sources de ndiswrapper

La version de ndiswrapper fournie par debian (actuellement 0.12+1.0rc2-1) ne fonctionne pas avec debian sarge ! Voir la quatrième page du fil correspondant sur Andesi et un fil analogue sur Wlanfr.net.

Les sources sont donc à télécharger sur SourceForge.

Choisir la version désirée dont on télécharge l'archive (~100 kB).

Décompression de l'archive

Décompresser l'archive dans le dossier /home/user :

/home/user# tar -zxvf ndiswrapper-<numéro_de_version>.tar.gz

Compilation

Création des deux paquets ndiswrapper

Se placer dans le dossier ndiswrapper récemment décompressé :

/home/user# cd ndiswrapper-<numéro_de_version>
/home/user/ndiswrapper-<numéro_de_version># ./debian/rules binary

La fonction est bien ./debian/rules binary !

Cette opération crée les deux paquets ndiswrapper-modules-2.6.8-2-686_0.12-1_i386.deb et ndiswrapper-utils_0.12-1_i386.deb. Ils sont au même niveau que le dossier ndiswrapper lui-même :

/home/user# ls ndis*
ndiswrapper-0.12
ndiswrapper-modules-2.6.8-2-686_0.12-1_i386.deb
ndiswrapper-utils_0.12-1_i386.deb
<code>
==== Installation des paquets ====
Il est impératif d'installer ''ndiswrapper-utils'' avant ''ndiswrapper-modules'', car l'installation du second de ces modules dépend de celle du premier.
<code># dpkg -i ndiswrapper-utils

puis

# dpkg -i ndiswrapper-modules

Vérifier qu'ils sont bien installés :

# dpkg -l 'ndis*'
...
||/ Nom                      Version                  Description
+++-========================-
un  ndiswrapper-modules      <néant>                  (aucune description n'est disponible)
ii  ndiswrapper-modules-2.6. 0.12-1                   Linux kernel module for NdisWrapper for 2.6.8-2-686
pn  ndiswrapper-source       <néant>                  (aucune description n'est disponible)
ii  ndiswrapper-utils        0.12-1                   User space tools for ndiswrapper
un  ndiswrapper-utils-0.12   <néant>                  (aucune description n'est disponible)

C'est bien le cas : les deux ii l'indiquent.

ndiswrapper est prêt à fonctionner.

Reste à le mettre en oeuvre.

Mise en oeuvre de ndiswrapper

Télécharger les pilotes correspondant à sa carte.

On trouvera sur SourceForge leur version la plus récente.

Après décompression, copier les fichiers se terminant par .sys et .inf dans un dossier, par exemple piloteswifi :

/home/user/piloteswifi# ls
bcmwl5.sys
lsbcmnds.inf

Dans cet exemple, les fichiers sont bcmwl5.sys et lsbcmnds.inf.

Installer les pilotes avec ndiswrapper

Il est impératif d'effectuer cette opération à partir du dossier contenant lesdits pilotes :

/home/user/piloteswifi# ndiswrapper -i lsbcmnds.inf
ls: /etc/ndiswrapper: Aucun fichier ou répertoire de ce type
Installing lsbcmnds

Cette opération installe ces fichiers dans /etc/ndiswrapper :

# ls /etc/ndiswrapper
lsbcmnds
# ls -al /etc/ndiswrapper/ls*
total 352
drwxr-xr-x  2 root root   4096 2005-03-07 01:15 .
drwxr-xr-x  3 root root   4096 2005-03-07 01:15 ..
-rw-r--r--  1 root root    460 2005-03-07 01:15 14E4:4301:1737:4301.conf
lrwxrwxrwx  1 root root     50 2005-03-07 01:15 14E4:4301.conf -> /etc/ndiswrapper/lsbcmnds/14E4:4301:1737:4301.conf
-rw-r--r--  1 root root    486 2005-03-07 01:15 14E4:4320:14E4:0417.conf
-rw-r--r--  1 root root    486 2005-03-07 01:15 14E4:4320:1737:4320.conf
lrwxrwxrwx  1 root root     50 2005-03-07 01:15 14E4:4320.conf -> /etc/ndiswrapper/lsbcmnds/14E4:4320:1737:4320.conf
-rw-r--r--  1 root root 300928 2005-03-07 01:15 bcmwl5.sys
-rwxr-xr-x  1 root root  29701 2005-03-07 01:15 lsbcmnds.inf

Il est à noter que les chiffres des fichiers se terminant par .conf correspondent au pci_vendor et au pci_driver (voir le site Léa-Linux à ce sujet).

Vérifier ensuite que pilotes et matériel sont bien installés :

# ndiswrapper -l
Installed ndis drivers:
lsbcmnds        driver present, hardware present

Démarrer ndiswrapper.

# modprobe ndiswrapper

Rien ne s'écrit : ce silence vaut pour acquiescement.

Immédiatement après, vérifier dans le dmesg que le module ndiswrapper est bien chargé :

# dmesg | tail
ndiswrapper version 1.0 loaded (preempt=no,smp=no)
ndiswrapper: driver bcmwl5 (Linksys,07/17/2003, 3.30.15.0) added
ACPI: PCI interrupt 0000:00:07.0[A] -> GSI 18 (level, low) -> IRQ 18
ndiswrapper: using irq 18
wlan0: ndiswrapper ethernet device 00:0c:41:13:8e:bf using driver bcmwl5
wlan0: encryption modes supported: WEP, WPA with TKIP, WPA with AES/CCMP

Si cela vous renvoie quelque chose d'approchant, avec la bonne adresse de carte (ici 00:0c:41:13:8e:bf) votre situation est optimale.

Sinon, inutile d'aller plus loin, quelque chose cloche : revenez en arrière.

Configurer sa carte WiFi

La carte est reconnue par le système

Vérifier qu'elle est bien reconnue :

# iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
wlan0     IEEE 802.11g  ESSID:"off/any"
          Mode:Managed  Frequency:2.462 GHz
   ...
   ...
   Missed beacon:0
sit0      no wireless extensions.

C'est le cas.

Trouver le réseau WiFi

Ma carte est là, mais ne détecte rien pour l'instant. D'où :

# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: ...
                    ESSID:"monESSID"
                    Protocol:IEEE 802.11b
                    Mode:Managed
                    Frequency:2.462 GHz (Channel 11)
                    ...
       ...
                    Bit Rate:48 Mb/s
                    Extra:bcn_int=100
                    Extra:atim=0

Lier le point d'accès à la carte.

Dès l'ESSID (c'est à dire le nom) du point d'accès récupéré, l'indiquer au système :

# iwconfig wlan0 essid "monESSID"

Dans cette commande, ne pas oublier de taper les guillemets autour de l'ESSID !

Vérifier que l'information circule bien par la carte :

# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0

Dans cet exemple, il n'y a pas eu à configurer plus avant le routage car la configuration était en DHCP, c'est à dire que c'est le routeur qui attribuait une adresse réseau aux ordinateurs connectés au réseau local.

Automatisation du processus de connexion WiFi

Rajouter le mot “ndiswrapper” dans /etc/modules ; ainsi, ndiswrapper est chargé dès le démarrage.

Modifier /etc/network/interfaces pour que le wifi soit pris en compte dès le démarrage :

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
pre-up iwconfig wlan0 essid "monESSID"

La syntaxe est simple :

  • le # au début d'une ligne la rend inopérante ; dans cet exemple, n'ayant plus un besoin permanent du port ethernet, celui-ci est court-circuité.
  • le auto wlan0 fait démarrer cette interface en même temps que l'ordinateur.
  • iface wlan0 inet dhcp lui indique d'aller récupérer une adresse IP auprès du routeur, dont pre-up iwconfig wlan0 essid “monESSID” fournit l'ESSID (c'est à dire le nom, pardi !).

Et voilà. Ça marche. Ce n'était pas trop long ?

En cas de problème

Un rappel pour les malchanceux : en cas de difficultés, les fonctions…

# cat /var/log/syslog | grep ndis
# dmesg | tail

… vous seront très utiles : elles vous informent de l'état de la relation du système avec ndiswrapper…

Par ailleurs, si lors de l'étape de compilation, vous rencontrez des difficultés et que vous voyez s'afficher parmi diverses lignes un

Can't find kernel sources in /usr/src/linux

vous avez un problème de lien symbolique, c'est à dire que lors de la compilation un fichier ne pointe pas là où il faudrait.

Enfin, il vous reste les merveilleux forums du présent site et de wlanfr.net sur lesquels poser des questions.

 
materiel/installation-de-ndiswrapper.txt · Dernière modification: 18/02/2008 22:56 (modification externe)