Ubuntu, Lucid Lynx, eeePC, RaLink RT2860 et wifi WPA

Une fois n’est pas coutume, j’upgrade Ubuntu vers la dernière release, et là, le wifi me fait des misères. Ca marchait ça marche plus etc.
Dans le cas présent, j’ai upgradé un ASUS eeePC (peu importe le modèle, je crois qu’ils sont tous concernés car basés sur à peu près la même puce wifi) depuis la release précédente (Karmic Koala) où tout marchait très bien.
Voici le problème et des solutions.

Les symptomes

Après l’upgrade, on se retrouve en kernel 2.6.32-22. Le wifi fonctionne par exemple sur un réseau en WPA2, mais ça n’accroche pas sur un réseau WPA (certains disent WPA mixte WPA2, j’en sais rien).
Autant utiliser du WPA2. Oui d’accord, mais ma freebox, elle fait que du WPA…
=> Le driver RT2860 est buggé dans ce noyau.

Les logs

Vous verrez qu’on tourne en rond entre « l’association » avec le point d’accès et le rescan des réseaux ça rate X fois, puis on abandonne pour de bon :

May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 1 of 5 (Device Prepare) scheduled...
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 1 of 5 (Device Prepare) started...
May 19 19:33:17 ubuntu NetworkManager:   (wlan0): device state change: 6 -> 4 (reason 0)
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 2 of 5 (Device Configure) scheduled...
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 1 of 5 (Device Prepare) complete.
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 2 of 5 (Device Configure) starting...
May 19 19:33:17 ubuntu NetworkManager:   (wlan0): device state change: 4 -> 5 (reason 0)
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0/wireless): connection 'Auto folie' has security, and secrets exist.  No new secrets needed.
May 19 19:33:17 ubuntu NetworkManager:   Config: added 'ssid' value 'folie'
May 19 19:33:17 ubuntu NetworkManager:   Config: added 'scan_ssid' value '1'
May 19 19:33:17 ubuntu NetworkManager:   Config: added 'key_mgmt' value 'WPA-PSK'
May 19 19:33:17 ubuntu NetworkManager:   Config: added 'psk' value ''
May 19 19:33:17 ubuntu NetworkManager: nm_setting_802_1x_get_pkcs11_engine_path: assertion `NM_IS_SETTING_802_1X (setting)' failed
May 19 19:33:17 ubuntu NetworkManager: nm_setting_802_1x_get_pkcs11_module_path: assertion `NM_IS_SETTING_802_1X (setting)' failed
May 19 19:33:17 ubuntu NetworkManager:   Activation (wlan0) Stage 2 of 5 (Device Configure) complete.
May 19 19:33:18 ubuntu NetworkManager:   Config: set interface ap_scan to 1
May 19 19:33:18 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:33:23 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:33:23 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:33:23 ubuntu kernel: [  660.417251] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:33:23 ubuntu kernel: [  660.417895] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:33:23 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:33:28 ubuntu wpa_supplicant[3187]: Authentication with 66:f2:bc:b8:cc:30 timed out.
May 19 19:33:28 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:33:28 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:33:33 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:33:33 ubuntu kernel: [  670.433534] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:33:33 ubuntu kernel: [  670.434373] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:33:33 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:33:33 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:33:38 ubuntu wpa_supplicant[3187]: Authentication with 66:f2:bc:b8:cc:30 timed out.
May 19 19:33:38 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:33:38 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:33:43 ubuntu kernel: [  680.449828] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:33:43 ubuntu kernel: [  680.450463] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:33:43 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:33:43 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:33:43 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:33:48 ubuntu wpa_supplicant[3187]: Authentication with 66:f2:bc:b8:cc:30 timed out.
May 19 19:33:48 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:33:48 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:33:53 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:33:53 ubuntu kernel: [  690.468163] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:33:53 ubuntu kernel: [  690.468883] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:33:53 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:33:53 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:33:58 ubuntu NetworkManager:   wlan0: link timed out.
May 19 19:33:58 ubuntu wpa_supplicant[3187]: Authentication with 66:f2:bc:b8:cc:30 timed out.
May 19 19:33:58 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:33:58 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:34:03 ubuntu kernel: [  700.491916] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:34:03 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:34:03 ubuntu kernel: [  700.492792] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:34:03 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:34:03 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:34:08 ubuntu wpa_supplicant[3187]: Authentication with 66:f2:bc:b8:cc:30 timed out.
May 19 19:34:08 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:34:08 ubuntu NetworkManager:   (wlan0): supplicant connection state:  disconnected -> scanning
May 19 19:34:13 ubuntu kernel: [  710.512617] ===>rt_ioctl_giwscan. 5(5) BSS returned, data->length = 636
May 19 19:34:13 ubuntu wpa_supplicant[3187]: Trying to associate with 66:f2:bc:b8:cc:30 (SSID='folie' freq=2412 MHz)
May 19 19:34:13 ubuntu NetworkManager:   (wlan0): supplicant connection state:  scanning -> associating
May 19 19:34:13 ubuntu kernel: [  710.513600] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)
May 19 19:34:13 ubuntu wpa_supplicant[3187]: Association request to the driver failed
May 19 19:34:18 ubuntu NetworkManager:   Activation (wlan0/wireless): association took too long.
May 19 19:34:18 ubuntu NetworkManager:   (wlan0): device state change: 5 -> 6 (reason 0)
May 19 19:34:18 ubuntu NetworkManager:   Activation (wlan0/wireless): asking for new secrets
May 19 19:34:18 ubuntu NetworkManager:   (wlan0): supplicant connection state:  associating -> disconnected
May 19 19:34:18 ubuntu wpa_supplicant[3187]: Authentication with 00:00:00:00:00:00 timed out.
May 19 19:34:33 ubuntu NetworkManager:   wlan0: link timed out.

Le matos est le suivant (lspci -vv) :

01:00.0 Network controller: RaLink RT2860
	Subsystem: RaLink Device 2790
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 
	Kernel driver in use: rt2860
	Kernel modules: rt2860sta

Solutions

Tout est très bien décrit ici : https://bugs.launchpad.net/ubuntu/+source/linux/+bug/496093.

Noyau 2.6.33

Pas encore dispo dans Lucid Lynx, mais apparement il règle le problème. A suivre avec les updates de la distribution.

Ancien noyau

Coup de bol, j’ai l’ancien noyau toujours dispo (2.6.31-21) depuis l’upgrade (il n’a supprimé que les vraiment anciens). Avec lui tout marche. Je peux le garder par défaut en attendant que le 2.6.33 fasse partie de Lucid Lynx, s’il en fera partie un jour (probable).
Pour l’instant, je m’en sers pour pouvoir quand même downloader ce qu’il faut pour appliquer l’une des méthodes ci-dessous :)

Backport du driver dans un 2.6.32 spécifique

La méthode qui consiste à utiliser un backup 2.6.32 fait par un gentil monsieur est elle-même déconseillée par le gentil monsieur. C’est pourtant simple sur le papier : tu récupères le paquet, tu l’installes, tu rebootes.
Je suis son conseil, finalement, et j’opte pour la solution où on recompile le driver, malgré des désavantages. Voir ci-dessous.
Sinon, c’est le commentaire 80 qu’il faut lire.

Recompilation du bon driver

Commentaire 107 sur le post mentionné précédemment
Le désavantage, c’est que si demain Ubuntu met à jour le 2.6.32-22 en -23, il faudra recommencer la manip’.
Je décris cette méthode car apparement le bug réapparait régulièrement depuis Ubuntu « Intrepid Ibex », donc certains liens sont devenus obsolètes. Ca vous évitera de vous taper les 4 pages de remarques de tout le monde.
Ce qui compte, c’est qu’à-la-fin-ça-marche.

Installation des outils minimums de compilation de kernel

sudo aptitude install linux-headers-`uname -r` build-essential

Récupération du driver chez le fabricant

Partez de là (site principal => Software => Linux). Et vous sélectionnez cette ligne là : « RT2860PCI/mPCI/CB/PCIe(RT2760/RT2790/RT2860/RT2890) ».
En direct, tant qu’ils ne refondent pas tout leur site, ça donne ce fichier.

Compilation et installation du machin

Décompressez (tar -xvjf 2010_01_29_RT2860_Linux_STA_v2.3.0.0.tar.bz2) et allez modifier dans les sources le fichier 2010_01_29_RT2860_Linux_STA_v2.3.0.0/os/linux/config.mk.
Vous reperez et mettez « y » (yes) aux lignes suivantes :

HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

Ensuite, vous passez root. Non, « sudo ma_commande » ne revient pas au même dans le cas présent, dixit l’auteur.
Donc :

sudo su
cd 2010_01_29_RT2860_Linux_STA_v2.3.0.0
make && make_install

Ca mouline 10 minutes (c’est lent un eeePC :) ).
Et on le charge :

modprobe rt2860sta

Enfin, si tout marche, vous ajouterez la ligne :

rt2860sta

dans le fichier /etc/modules pour que ça tienne après reboot.

Conclusion

Linux et le wifi, ça a toujours été le bordel.
Maintenant, j’ai opté pour une méthode simple : avant d’upgrader Ubuntu, je télécharge l’ISO, je crée une clef USB Bootable Live Persistante avec ce merveilleux outil, je boote, je teste tout. Ensuite si ça passe, alors je migre. Sinon j’attends, ou j’aide à débugger si j’ai que ça à foutre.

Update de dernière minute : rien à faire, il chargeait tout le temps l’ancien driver rt2860sta de /lib/modules/le_bon_kernel. J’ai fini par écraser l’ancien avec le nouveau. Ils sont dans 2 arborescences différentes. Je ne l’ai plus sous la main, mais tentez un find /lib/modules/ -name "rt2860sta.ko" -exec ls -l {} \\; pour voir, compte-tenu de la date, lequel est lequel. Tambouillez un coup et hop, votre driver marche enfin. Au forceps.

Vus : 1574
Publié par Michauko : 64