Mots-Clés ‘Wifi’

Configuration de l’adaptateur Wifi Broadcom BCM4322 sous Linux/Slackware/Salix OS

Samedi 4 janvier 2014

J’ai récemment acquis l’ordinateur portable Dell Precision M4400, sur lequel j’ai installé une distribution Linux. J’évoquerai en détail cette installation dans un prochain article, mais je souhaitais d’abord m’attarder sur un des seuls (pour ne pas dire le seul) points qui n’a pas été pris en charge par défaut : l’adaptateur Wifi Broadcom BCM4322.

C’est malheureusement un problème récurrent lorsqu’on installe Linux sur un ordinateur pourvu d’un adaptateur Wifi. Ce n’est d’ailleurs pas un hasard si mes articles précédents sur le même thème (un premier consacré à la clé Hercules Wireless N USB mini, et un deuxième consacré à la clé Amarina 54Mbps Wireless USB Adapter) font partie des articles les plus lus de mon blog.

L’ordinateur portable Dell Precision M4400 présente donc l’adaptateur Wifi Broadcom BCM4322, comme j’ai pu le constater clairement avec l’outil en ligne de commandes lspci :

# lspci -nn
…
0c:00.0 Network controller [0280]: Broadcom Corporation BCM4322 802.11a/b/g/n Wireless LAN Controller [14e4:432b] (rev 01)

Avec ma distribution Linux courante, Salix OS 13.37 (fondée sur Slacware Linux 13.37), l’adaptateur Wifi était par défaut détecté par le module b43, inclus dans le noyau Linux. Malheureusement, l’interface réseau n’était pas créée, et un outil comme iwconfig n’affichait aucune interface Wifi.

Par ailleurs, j’ai observé les messages suivants dans dmesg:

[   11.473082] b43-phy0: Broadcom 4322 WLAN found (core revision 16)
[   11.488189] b43-phy0 ERROR: FOUND UNSUPPORTED PHY (Analog 8, Type 4, Revision 4)
[   11.488733] b43: probe of ssb0:0 failed with error -95
[   11.489014] Broadcom 43xx driver loaded [ Features: PMLS, Firmware-ID: FW13 ]

La documentation officielle du pilote b43 est assez claire. Elle donne l’état des lieux de la prise en charge des puces Broadcom.

Pour le contrôleur avec l’identifiant 14e4:432b, la documentation indique que le module b43 a une prise en charge partielle à partir du noyau Linux 2.6.39. Salix OS 13.37 présentant le noyau Linux en version 2.6.37, j’ai dû me retourner vers l’alternative (malheureusement propriétaire) indiquée par la documentation : le module wl, fourni indépendamment du noyau par Broadcom dans un paquet nommé « 802.11 Linux STA driver ».

Ce module est disponible dans le paquet broadcom-sta, mis à disposition par le dépôt SlackBuilds.org :

# slapt-src --search broadcom
broadcom-sta:5.100.82.112 - broadcom-sta (Broadcom wireless drivers)

Malheureusement, l’installation de ce paquet avec slapt-src échoue, le paquet source ne pouvant être téléchargé :

# slapt-src -i broadcom-sta
The following packages will be installés:
broadcom-sta
Voulez-vous continuer ? [y (oui) / N (non)] y
Récupération de README...Réalisé
Récupération de broadcom-sta.SlackBuild...Réalisé
Récupération de broadcom-sta.info...Réalisé
Récupération de doinst.sh...Réalisé
Récupération de slack-desc...Réalisé
Récupération de http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz...Raté

Un article du blog « rog notes » donne les instructions à suivre pour contourner ce problème. Je les reprends ici en les adaptant à Slackware 13.37 et en les complétant :
1) Télécharger le paquet source (hybrid-portsrc_x86_…tar.gz) correspondant au système requis (32 ou 64 bits), ainsi que le paquet slackbuild (broadcom-sta.tar.gz), sur la page SlackBuilds.org.
2) Se déplacer dans le répertoire où ont été sauvés les fichiers téléchargés, puis extraire le paquet slackbuild.

# tar xvfz broadcom-sta.tar.gz

3) Se déplacer dans le répertoire broadcom-sta créé puis y copier le paquet source.

# cd broadcom-sta
# cp -a ../hybrid-portsrc_x86_…tar.gz

4) Se connecter en tant qu’administrateur (root) puis générer le paquet Slacware. Attention : ceci nécessite que des outils de développement (compilateurs, bibliothèques, …) soient installés sur le système.

$ su
$ ./broadcom-sta.SlackBuild

5) Copier le paquet Slackware généré dans /tmp et nommé broadcom-sta…_Sb0.tgz (mieux vaut garder ce paquet quelque part en cas de besoin).

$ cp -a /tmp/broadcom-sta…_Sb0.tgz ./

6) Installer le paquet Slackware.

$ installpkg broadcom-sta..._Sb0.tgz

7) Décharger le module b43 (ainsi que le module ssb lié) puis charger le module wl (fraîchement installé).

$ modprobe -r b43 ssb
$ modprobe wl

8) Utiliser l’utilitaire de son choix (iwconfig, wicd, NetworkManager) afin de configurer l’interface réseau qui devrait normalement avoir été créée. Attention : dans mon cas, cette interface réseau porte l’identifiant eth1, et non le classique wlan0.

9) Ajouter les modules b43 et ssb dans la liste noire des modules afin de s’assurer que c’est bien le module wl qui sera pris en compte lors du redémarrage du système.

$ echo "blacklist ssb" >> /etc/modprobe.d/blacklist
$ echo "blacklist b43" >> /etc/modprobe.d/blacklist

Merci à Roger du blog « rog notes » pour l’astuce. J’espère que cet article sera utile à toute personne confrontée à l’installation d’un pilote pour un adaptateur Wifi Broadcom.

 

Installation et configuration de la clé Amarina 54Mbps Wireless USB Adapter sous Linux

Samedi 26 février 2011

Dans un précédent article, je vous avais expliqué comment j’avais installé et configuré Frugaware 1.3 (Haven) sur l’ordinateur de mon frère. Il me restait une dernière étape à expliquer, qui est, à mon humble avis, plutôt indépendante du modèle d’ordinateur ou de la distribution Linux : l’installation et la configuration de la clé USB Wifi de mon frère.

Il s’agit d’une clé de marque Amarina et de modèle Wireless Lan USB 54M 802.11G 54 Mbps (cf. page du produit).

Malheureusement, la clé n’est pas reconnue automatiquement sous Frugalware 1.3 (Haven) et il a fallu chercher longuement avant de pouvoir la faire fonctionner.
Comme souvent avec ce genre de produit, ce n’est pas vraiment la marque et le modèle du produit qui compte, mais la puce (chipset) qui est à l’intérieur.

La commande lsusb retourne la ligne suivante :

Bus 001 Device 002: ID 148f:2070 Ralink Technology, Corp.

Ceci laisse penser que la puce est une Ralink Technology 2070.

 

Mon frère et moi avons d’abord essayé d’utiliser le pilote ndiswrapper (pilote faisant office de sur-couche au dessus des pilotes Windows).

Pour cela, nous avions besoin des pilotes Windows. Le seul élément donné par le constructeur était un exécutable Windows (extension .exe). Nous avons cherché tous les moyens d’extraire les pilotes de cet exécutable. En vain… Nous avons finalement dû exécuter le fichier sur une machine Windows XP, ce qui revient à procéder à l’installation du pilote. Nous avons ainsi pu récupérer le pilote (pour cela, il suffit de chercher un fichier *.inf dans c:\windows).

Nous avons alors utilisé le pilote (un fichier .inf et des fichiers associés dans un même répertoire) pour configurer ndiswrapper. Malheureusement, cela n’a rien donné. Je ne me souviens pas du problème exact mais je me rappelle qu’une erreur survenait lors de l’initialisation du périphérique.

 

Nous nous sommes rabattus sur l’installation du pilote natif pour Linux. Pour cela, nous avons suivi les instructions données sur une discussion du forum Ubuntu.
Etant donné que les instructions sont données un peu dans tous les sens, et qu’elles sont incomplètes pour les dernières versions du noyau, ou inadaptées pour Frugalware 1.3 (Haven), je me permets de les résumer :

1) Télécharger les sources du pilote nommé RT3070USB(RT307x) sur la page Support Linux du site web de Ralink Technology, ou via le lien proposé sur la discussion du forum Ubuntu.

2) Prendre les droits root.

su -

3) Installer les sources du noyau.

pacman-g2 -S kernel-headers kernel-source

4) Désarchiver le paquet téléchargé et se déplacer dans le répertoire créé.

tar jxvf /2009_0525_RT3070_Linux_STA_v2.1.1.0.bz2

cd 2009_0525_RT3070_Linux_STA_v2.1.1.0

5) Modifier le fichier os/linux/usb_main_dev.c pour ajouter la ligne

{USB_DEVICE(0x148F,0×2070)}, /* Ralink 2070L */

juste en dessous de la ligne

#ifdef RT3070

6) Télécharger le patch attaché à la discussion du forum Ubuntu, ou celui attaché à cet article, puis l’appliquer.

cd ..

gunzip /rt3070-2.6.31-compile.patch.gz

patch -p0 < /rt3070-2.6.31-compile.patch

cd 2009_0525_RT3070_Linux_STA_v2.1.1.0/

Ceci est valable pour un noyau de version supérieure ou égale à 2.6.31, ce qui est le cas Frugalware 1.3 (Haven).

7) Modifier le fichier include/iface/rtmp_usb.h afin de remplacer les mots-clés usb_buffer_alloc et usb_buffer_free respectivement par les mots-clés usb_alloc_coherent et usb_free_coherent.

Ceci est valable pour un noyau récent, ce qui est le cas de Frugalware 1.3 (Haven), qui présente le noyau 2.6.35.8.

8) Modifier le fichier os/linux/config.mk pour activer le support WPA (replacer n par y pour la propriété HAS_WPA_SUPPLICANT).

9) Lancer la compilation du pilote.

make

10) Installer le pilote.

make install

11) Charger le pilote.

modprobe rt3070sta

 

Si tout se passe bien, la clé USB Wifi devrait se mettre à clignoter. L’interface réseau ra0 devrait apparaitre sur la sortie de la commande suivante :

ifconfig -a

Enfin, les réseaux Wifi disponibles doivent pouvoir être listés :

iwlist ra0 scan

 

Il reste alors à configurer l’interface réseau en utilisant, par exemple, netconfig ou wicd. Pour une raison complètement inconnue, je n’ai pas réussi à faire fonctionner la clé Wifi avec une adresse IP dynamique (DHCP) mais c’est peut-être dû au routeur utilisé.

 

Malheureusement, je dois avouer que je ne suis pas sûr à 100% de la procédure. Avec mon frère, nous avons dû pas mal tâtonner pour arriver à nos fins. Si j’ai l’occasion, j’essaierai de reconfirmer la procédure.

Comme vous pouvez le constater, le nombre d’opérations à effectuer est assez important. Idéalement, il serait intéressant de faire un paquet Frugalware pour automatiser les instructions et faciliter l’installation du pilote.

Néanmoins, j’espère que cet article sera utile à quelqu’un. Comme d’habitude, n’hésitez pas à laisser un commentaire si vous avez une remarque ou une question.

Mise en veille et Wifi

Lundi 2 août 2010

Aujourd’hui, je désire vous parler de la mise en veille (dite suspend-to-ram ou mode S3) sous Linux.

Dans un précédent article, j’avais évoqué un problème de configuration réseau lors d’un retour de mise en veille. Depuis la version 1.2 (Locris) de ma distribution Frugalware, la mise en veille fonctionne de façon acceptable sur ma machine. J’écris « de façon acceptable » car un problème subsiste: lors d’un retour de mise en veille, la configuration Wifi semble perdue. Cette perte est probablement due au mauvais rechargement du module ndiswrapper (pilote utilisée pour mon adaptateur Wifi). J’ai donc entrepris l’écriture d’un script shell permettant de résoudre ce problème. En voici le contenu :

#!/bin/sh

# Arrêt du réseau
service interfaces stop
modprobe -r ndiswrapper

# Mise en veille
echo -n mem > /sys/power/state

# Redémarrage du réseau
service interfaces start

Le but du script est assez simple : mettre en veille le système, et gérer le retour de mise en veille. La mise en veille est opérée par la partie centrale du script (echo -n mem …). L’opération clé de ce script est modprobe -r ndiswrapper. Elle permet de décharger le module ndiswrapper. Ainsi, lors du retour de la mise en veille et de la configuration du réseau, le module sera automatiquement et proprement rechargé.

Après avoir donné les droits d’exécution à ce script shell, il sera possible de l’exécuter en tant qu’utilisateur root.

Cependant, ma machine est un ordinateur portable, et je trouve pratique que le système se mette en veille lorsque je referme l’écran. Par ailleurs, le clavier de ma machine dispose d’une touche SUSPEND qui n’a, pour l’instant, aucun effet.

Pour améliorer cette situation, j’ai modifié le script du démon acpid, exécuté lorsqu’un évènement ACPI est généré. Il s’agit du fichier /etc/acpi/acpi_handler.sh. En voici le contenu :

#!/bin/sh # Default acpi script that takes an entry for all actions

IFS=${IFS}/
set $@

case « $1″ in
button)
case « $2″ in
power) /sbin/init 0
;;
sleep)
;;
lid)
;;
*) logger « ACPI action $2 is not defined »
;;
esac
;;
*)
logger « ACPI group $1 / action $2 is not defined »
;;
esac

Ainsi, lorsque le bouton « sleep » (touche SUSPEND) ou le bouton « lid » (une sorte d’interrupteur déclenché lorsque l’écran est refermé), le système sera mis en veille.

Grâce à tout cela, je dispose d’une mise en veille fonctionnelle et pratique. Bien entendu, je reste ouvert à vos remarques, suggestions et questions.

Installer la clé Hercules Wireless N USB mini puis se connecter à un réseau Wifi sous Linux

Dimanche 10 janvier 2010

A Noël, on m’a offert la clé Hercules Wireless N USB mini (nom de code : HWNUm-300). Il s’agit une clé USB, très petite (d’où le nom « mini »), de couleur noire, et permettant de se connecter à un réseau Wifi.

Je me suis alors attelé à installer cette clé sur mon système Linux (Frugalware 1.1 Getorin).

J’insère d’abord délicatement la clé en croisant des doigts pour que tout fonctionne correctement. Après quelques instants, je lance ifconfig en ligne de commande. Je m’aperçois avec déception qu’aucune nouvelle interface réseau n’a été créée.

Je lance ensuite lsusb, et là, bonne nouvelle ! Un nouveau périphérique apparaît :

Bus 002 Device 002: ID 06f8:e031 Guillemot Corp.

J’en déduis que la clé USB a bien été reconnue mais que la puce Wifi n’a pas été détectée. J’en conclus que je vais devoir charger le pilote de la puce par moi-même.

Pour cela, je commence par déterminer quelle est la puce utilisée par cette clé. Après une longue recherche, je découvre qu’il s’agit d’une Realtek RTL 8192 SU (RTL8192SU).

J’essaie ensuite de trouver un pilote Linux adéquate à cette puce. Quelques recherches m’amènent à la conclusion suivante: aucun pilote n’est disponible pour la version du noyau Linux (2.6.30) de mon système.

Je me résigne alors à utiliser l’outil ndiswrapper, formidable outil en l’état, mais qui oblige à utiliser le pilote propriétaire pour MS Windows…

Au départ, j’envisage d’utiliser le CD fourni avec la clé USB pour récupérer ce pilote mais la seule chose disponible est un fichier .exe, uniquement exploitable sous MS Windows. Je trouve finalement les pilotes MS Windows sur cette page. Je télécharge l’archive ZIP, la décompresse. J’y trouve le fichier net8192su.inf dans le répertoire WinXP.

Je suis ensuite la page Wiki sur ndiswrapper écrite par la communauté francophone de Frugalware. Toutes les commandes s’exécutent avec succès. Je relance ifconfig et je constate avec joie qu’une nouvelle interface réseau a été créée: wlan0.

Il me reste à configurer ma connexion un réseau Wifi. Pour cela, je ne m’embête pas trop et lance l’outil netconfig, fourni par la distribution Frugalware. Cet outil fonctionne comme une sorte de guide. Il suffit de répondre aux questions posées. A la fin, l’outil va réécrire le fichier /etc/sysconfig/network/default. Prenez donc soin d’en faire une copie de sauvegarde si vous voulez revenir à votre ancienne configuration réseau.

Une fois cela fait, j’ai relancé le service interfaces, qui s’occupe de réinitialiser les interfaces réseau :

service interfaces restart

Un avertissement m’indique que l’adresse par défaut a été utilisée. En relançant ifconfig, j’en ai la confirmation mais je m’aperçois également que mon interface réseau filaire (eth0) n’a pas été désactivée. J’aurais probablement dû arrêter le service interfaces avant de reconfigurer les interfaces réseau avec netconfig

Je décide alors de redémarrer mon système, et là, ô miracle, l’interface réseau wlan0 est pleinement fonctionnelle. Je peux alors me libérer du câble réseau et profiter du surf sur Internet en toute liberté.

J’espère que ce petit retour d’expérience pourra être utile à d’autres personnes. Les commentaires sont ouverts pour tout renseignement complémentaire.