Configuration WiFi des PC de bureau

Gazette Linux n°152 — Juillet 2008

Nicolas Provost

Adaptation française et relecture 

Article paru dans le n°152 de la Gazette Linux de juillet 2008.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

1. Introduction
2. ndiswrapper, c'est quoi ?
2.1. Le projet ndiswrapper
2.2. Pourquoi avoir acheté une carte sans-fil PCI ? et pourquoi pas USB ?
3. madwifi ou "fou de wifi" !
4. La bonne méthode
5. Un dernier effort
6. Conclusion

[Celui qui n'a jamais commis d'erreur n'a jamais tenté d'innover - Albert Einstein]

Pour commencer, permettez-moi de citer les deux sources qui me paraissent les plus pertinentes, et auxquelles je me suis toujours referré pour déterminer quelle carte réseau sans-fil PCI serait la meilleure pour mon ordinateur personnel fonctionnant sous Fedora Core 5 :

A - Les cartes Netgear compatibles avec "madwifi"
B - Liste de cartes tous fabricants confondus

Je n'envisageais pas d'acheter une carte réseau sans-fil USB ; après réflexion, j'ai décidé d'acheter une carte Netgear WG311. Rétrospectivement, je reconnais que j'aurais dû vérifier plus sérieusement avec les listes précédentes si ce modèle Netgear était fourni avec des pilotes pour GNU/Linux. Comme cela n'était pas le cas, j'ai fini par utiliser "ndiswrapper" pour que cela fonctionne.

Extrait du site web du projet (http://ndiswrapper.sourceforge.net) :

"De nombreux fabricants ne publient pas les spécifications matérielles ou ne fournissent pas de pilote Linux pour leurs cartes réseau sans-fil. Ce projet implémente l'API (Application Programming Interface) NDIS (Network Driver Interface Specification) du noyau Windows dans le système Linux. Un pilote de périphérique réseau sans-fil peut alors être lié à cette implémentation de telle façon qu'il fonctionne nativement, comme s'il fonctionnait sous Windows, sans émulation binaire."

Extrait du site web du projet (http://www.madwifi.org) :

madwifi.org, c'est [...] une équipe de développeurs bénévoles travaillant sur les pilotes du noyau Linux pour les cartes réseau sans-fil équipées des puces Atheros. Nous proposons actuellement deux pilotes, madwifi et ath5k.

C'est clair... et j'aurais dû réaliser que les pilotes madwifi supportaient les puces Atheros mais pas les puces Marvell équipant la carte PCI Netgear WG311. Je l'ai compris à l'instant où j'ai eu des difficultés à configurer la carte sans-fil.

Dés que j'ai eu la carte PCI sans-fil, j'ai commencé à la configurer après m'être assuré qu'elle était physiquement bien installée dans un slot PCI.

Conformement aux indications du site http://www.madwifi.org j'ai téléchargé le code source de la version 0.9.4 (version la plus récente disponible lors de la rédaction de cet article) et suivi les explications du guide du nouvel utilisateur madwifi. La première partie décrit une installation classique à partir du code source :

[root@thinnai /tmp/madwifi]# ./configure && make && make install
[root@thinnai /tmp/madwifi]# modprobe ath_pci 

Ensuite j'ai procédé à la création de l'interface, et c'est à ce moment que les choses ont mal tourné (pour être honnête, à cause d'une faute d'inattention de ma part).

[root@thinnai ~]# wlanconfig ath0 create wlandev wifi0 wlanmode sta 
wlanconfig: ioctl: No such device 

Je me suis alors referré aux deux listes citées au début de cet article. Les deux indiquaient clairement que la carte PCI Netgear WG311 était supportée par "ndiswrapper" mais pas "madwifi".

Je connaissais alors la seule méthode à appliquer pour configurer ma carte PCI sans fil, à savoir utiliser ndiswrapper. Après avoir lu la documentation de base disponible sur le ndiswrapper wiki, j'ai compris que cela devait être réalisé en deux étapes : tout d'abord installer ndiswrapper à partir des sources, puis télécharger et installer le pilote Windows approprié.

Comment trouver quel pilote Windows doit être téléchargé ? C'est simple, il faut identifier la version de la puce placée sur la carte PCI en suivant les étapes ci-dessous :

  1. utiliser la commande lspci pour trouver l'identifiant de la carte ; ici c'était "01:07.0" (première colonne de la sortie sur l'écran ci-dessous)

  2. utiliser la commande lspci -n avec cet identifiant comme paramètre pour trouver l'ID PCI de la carte (troisième colonne ci-dessous)

  3. dans mon cas, le fabricant de la carte WG311 étant Netgear, j'ai consulté la section M-N de cette liste

  4. l'identifiant de ma carte correspondait à l'item 4 de cette liste ; après avoir vérifié à l'aide de l'ID PCI et de la version de la puce utilisée, j'ai pu alors télécharger le pilote Windows correspondant à ma carte

[root@thinnai:~]#/sbin/lspci|grep -i wireless
01:07.0 Ethernet controller: Marvell Technology Group Ltd. 88w8335 [Libertas] 802.11b/g Wireless (rev 03)
[root@thinnai ~]# lspci -n|grep 01:07
01:07.0 0200: 11ab:1faa (rev 03) 

Note

avant d'installer et de configurer la carte sous GNU/Linux, j'avais installé ces pilotes sous Windows 2000 et vérifié qu'ils fonctionnaient parfaitement.

Cette page wiki détaille les étapes pour installer ndiswrapper à partir des sources et trouver le pilote Windows, entre autres choses.

Il est précisé dans cette documentation qu'il est préférable d'utiliser les pilotes pour Windows XP plutôt que les pilotes pour Windows 2000 ; dans une autre section ("Install Windows driver"), il est écrit que si le pilote Windows fourni par le fabricant fonctionne, alors ce pilote spécifique peut être utilisé. C'est ce qui m'a conduit à télécharger le pilote Windows à l'adresse ci-dessus plutôt que d'utiliser le pilote présent par défaut dans mon installation de Windows.

A partir de la page Wiki du projet ndiswrapper, j'ai téléchargé l'archive tar de la version la plus récente. Comme je l'ai toujours fait avant une installation, j'ai lu la documentation attentivement (au moins les premiers paragraphes du fichier INSTALL). Dans ce cas, les premières étapes de compilation des sources et d'installation des fichiers binaires se sont révélées plutôt classiques.

Me plaçant dans le répertoire /root/ndiswrapper-1.20, j'ai lancé les commandes suivantes :

[root@thinnai ndiswrapper-1.20]# make && make install
[...]
*** WARNING: Kernel is compiled with 4K stack size option (CONFIG_4KSTACKS); many Windows drivers will not
work with this option enabled. Disable CONFIG_4KSTACKS option, recompile and install kernel
[...]
S'il vous arrive de voir ce type de "warnings" à la fin du processus "make", vous pouvez les ignorer sans risque. Ces avertissements n'ont pas altéré le fonctionnement de la carte sans-fil, du moins la carte PCI avec la version de la puce indiquée plus haut.

Comme détaillé ci-dessus, j'ai téléchargé les pilotes pour Windows et suivi religieusement les instructions de la section "Install Windows driver" du fichier INSTALL. Après avoir extrait ce pilote Windows dans un autre répertoire, j'ai suivi les étapes ci-dessous :

[root@thinnai ndiswrapper-1.20]# ls ../ENLWI-G_Driver_Utility_98SE-ME-2000-XP/V1.10/DRIVER/Windows XP
Mrv8000c.cat Mrv8000c.inf Mrv8000c.sys

[root@thinnai ndiswrapper-1.20]# cp ../ENLWI*/*{inf.sys} . # copie les pilotes dans le répertoire courant

[root@thinnai ndiswrapper-1.20]# ndiswrapper -i Mrv8000c.inf # installe les pilotes
Installing mrv8000c
Forcing parameter AdhocGMode|1 to AdhocGMode|0 
Forcing parameter AdhocGMode|1 to AdhocGMode|0

[root@thinnai ndiswrapper-1.20]# ls /etc/ndiswrapper/ # vérifie l'installation
mrv8000c

[root@thinnai ndiswrapper-1.20]# ls /etc/ndiswrapper/mrv8000c/
11AB:1FAA.5.conf 11AB:1FAB.5.conf mrv8000c.inf mrv8000c.sys

[root@thinnai lnx_data]# ndiswrapper -l
Installed drivers: mrv8000c driver installed, hardware present 

Il faut ensuite configurer l'interface sans-fil, rechercher les points d'accès et s'attacher à l'un d'eux. Toutefois, avant d'effectuer ces étapes, j'ai contrôlé la version des utilitaires wifi :

[root@thinnai ~]# rpm -qa | grep -i wireless
wireless-tools-28-0.pre13.5.1

[root@thinnai ~]# iwconfig --version
iwconfig Wireless-Tools version 28
         Compatible with Wireless Extension v11 to v19.

Kernel   Currently compiled with Wireless Extension v19.

wlan0    Recommend Wireless Extension v18 or later,
         Currently compiled with Wireless Extension v19. 

Après cette vérification, j'ai regroupé les commandes suivantes dans un script shell afin de faciliter l'installation et l'activation des pilotes de la carte à la fin de chaque démarrage du système (j'aurais aussi pu réécrire ce script de telle façon que l'interface sans-fil soit activée depuis /etc/init.d).

echo "Activation du module de l'interface sans fil dans le système ..."
modprobe ndiswrapper 
echo "====================================================================" 
echo "Etat des interfaces Ethernet ... " 
/sbin/ifconfig 
echo "====================================================================" 
echo "Activation de l'interface sans fil ... " 
/sbin/ifconfig wlan0 up 
echo "====================================================================" 
echo "Etat des interfaces sans fil ... " 
/sbin/iwconfig 
echo "====================================================================" 
echo "Recherche des points d'accès, attachement à un réseau disponible ..." 
iwlist wlan0 scan 
/sbin/iwconfig wlan0 essid default 
/sbin/iwconfig wlan0 
echo "====================================================================" 
echo "Acquisition d'une adresse IP pour l'interface sans fil ... " 
dhclient wlan0
Les commandes ci-dessous permettent de vérifier l'état de l'interface sans-fil une fois ndiswrapper installé et activé, grâce à la commande "dhclient" :

Acquiring IP address for the wireless interface ...
Internet Systems Consortium DHCP Client V3.0.3-RedHat
[...]
Listening on LPF/wlan0/00:1e:2a:35:2a:79 
Sending on LPF/wlan0/00:1e:2a:35:2a:79 
Sending on Socket/fallback 
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 
DHCPACK from 192.168.0.1 
bound to 192.168.0.147 -- renewal in 39 seconds.
Voici les résultats d'un simple test pour vérifier la connection internet :

[ram@thinnai ~]$ host linuxgazette.net 
linuxgazette.net has address 64.246.26.120 
linuxgazette.net mail is handled by 10 genetikayos.com. 

[ram@thinnai ~]$ ping -c 5 www.eham.net 
PING www.eham.net (69.36.242.135) 56(84) bytes of data. 
64 bytes from atlanta.eham.net (69.36.242.135): icmp_seq=1 ttl=50 time=297 ms 
64 bytes from atlanta.eham.net (69.36.242.135): icmp_seq=2 ttl=50 time=298 ms 
64 bytes from atlanta.eham.net (69.36.242.135): icmp_seq=3 ttl=50 time=298 ms 
64 bytes from atlanta.eham.net (69.36.242.135): icmp_seq=4 ttl=50 time=298 ms 
64 bytes from atlanta.eham.net (69.36.242.135): icmp_seq=5 ttl=50 time=298 ms 

--- www.eham.net ping statistics --- 
5 packets transmitted, 5 received, 0% packet loss, time 3998ms 
rtt min/avg/max/mdev = 297.142/298.288/298.837/0.617 ms 

Lisez patiemment et avec attention les listes citées au début de cet article avant de décider quelle carte vous allez acheter. Si vous devez installer et configurer une carte PCI/USB sans-fil dans un environnement GNU/Linux non supporté par madwifi, alors ndiswrapper est là pour vous sortir du mauvais pas.