====== 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 [[http://andesi.org/forum/viewtopic.php?t=4022&highlight=|Andesi]] et un fil analogue sur [[http://www.wlanfr.net/forum.php?op=mess&pid=3399|Wlanfr.net]].
Les sources sont donc à télécharger sur [[http://sourceforge.net/project/showfiles.php?group_id=93482|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-.tar.gz
===== Compilation =====
==== Création des deux paquets ndiswrapper ====
Se placer dans le dossier ndiswrapper récemment décompressé :
/home/user# cd ndiswrapper-
/home/user/ndiswrapper-# ./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
==== 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.
# 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 (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 (aucune description n'est disponible)
ii ndiswrapper-utils 0.12-1 User space tools for ndiswrapper
un ndiswrapper-utils-0.12 (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 [[http://ndiswrapper.sourceforge.net/phpwiki/index.php/List|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 [[http://www.lea-linux.org/trucs/item.539.html|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 [[http://www.wlanfr.net/|wlanfr.net]] sur lesquels poser des questions.