Transformer une carte Wi-Fi en carte « AirPort Extrême »

Il y a quelques jours, j’expliquais comment installer une carte Wi-Fi Broadcom dans un MacBook blanc pour obtenir la compatibilité AirDrop. Ca fonctionne plutôt bien, mais — petit problème — la carte n’est pas reconnue comme une carte AirPort Extrême mais comme une « carte sans fil de tierce partie ».
In English.


Comme ça ne me plaît pas, j’ai cherché un peu. Et il est en fait possible de « transformer » une carte Wi-Fi Broadcom en carte AirPort Extrême, grâce à Linux. Ca reste assez compliqué à mettre en place si vous ne connaissez pas un minimum Linux, mais si la ligne de commande ne vous fait pas peur, c’est faisable. Dans la suite, je vais donc vous expliquer comment flasher une carte Broadcom (ici la BCM4322 utilisée pour la bidouille AirDrop).

On va dire que vous savez lancez Linux (dans mon cas Ubuntu) sur une machine. Il est a priori possible de le faire directement sur le Mac, en installant Linux, mais comme ma machine n’a qu’un SSD de 32 Go, j’ai utilisé un autre ordinateur. Il est possible d’utiliser un Live CD ou une distribution sur clé USB, mais ça m’a posé des problèmes pour la mise à jour du noyau (qui était dans une version trop ancienne) et j’ai donc installé Ubuntu 11.04 sur le disque dur.

Attention : si la carte est une BCM4322, il faut au moins un noyau 2.6.39 pour que ça fonctionne. Je suis passé en 3.0 pour le test.

J’ai utilisé le tutorial que vous pouvez trouvez ici, avec quelques petites différences.

D’abord, il faut lancer le Terminal. Une fois dedans, il faut taper « lspci » et vérifier que la carte Broadcom est bien reconnue. Une ligne comme la suivante devrait apparaître :

« Network Controler : Broadcom Corporation BCM4322, etc. »

Ensuite, on doit installer quelques logiciels.

sudo apt-get install build-essential
sudo apt-get install curl
sudo apt-get install git-core

Quelques minutes dans mon cas.

Ensuite les commandes suivante :

sudo apt-get install b43-fwcutter
sudo apt-get install firmware-b43-installer (obligatoire avec Unbuntu 11.04)
sudo modprobe b43

sudo git clone git://git.bu3sch.de/b43-tools.git
cd b43-tools/ssb_sprom
sudo make

sudo cp ssb-sprom /usr/sbin/

sudo chmod 755 /usr/sbin/ssb-sprom
sudo chown root:root /usr/sbin/ssb-sprom

SSB_SPROM=$(find /sys/devices -name ssb_sprom)

Puis

echo $SSB_SPROM

Si la commande renvoie un truc « /sys/device/pci/ des nombres /ssb_sprom », c’est bon. Si c’est vide, c’est que la carte n’est pas reconnue par le pilote b43 et qu’il faut s’arranger (si possible) pour que ça passe. Avec une BCM4322, comme ici, un noyau 2.6.39 (au moins) est nécessaire.

sudo cat $SSB_SPROM > ssb_sprom_copy

sudo ssb-sprom -i ssb_sprom_copy -P

Cette commande devrait vous donner une liste d’informations sur la carte Wi-Fi. Selon la carte, il va falloir changer les valeurs subv (fabricant), subp (produit), ccode (pays) et regrev (validation, 0x0001 pour les USA et 0x0002 pour l’Europe). Dans mon cas, j’ai indiqué que la carte était un modèle FR au lieu d’un modèle DE.

Pour les valeurs, elles dépendent de la carte utilisée. Voici les valeurs pour les cartes Broadcom classiques :

BCM4311 – Vendor 0x106b / Product 0x0087
BCM4321 – Vendor 0x106b / Product 0x008c
BCM4322 – Vendor 0x106b / Product 0x0093
BCM4328 – Vendor 0x106b / Product 0x008b

sudo ssb-sprom -i ssb_sprom_copy –-subv 0×106b –-subp 0×0093 –ccode FR –regrev 0x0002 -o new_ssb_sprom_copy

On tape la commande suivante pour vérifier que les valeurs subp et subv ont bien été changées.

sudo ssb-sprom -i new_ssb_sprom_copy -P

La dernière commande va permettre de flasher la carte, donc on met l’ordinateur sur secteur et on attend bien que ce soit terminé.

sudo cp new_ssb_sprom_copy $SSB_SPROM

Il faut attendre un peu que le système flashe la carte, et ensuite c’est bon. Plus qu’à remettre la carte dans un MacBook et ça a fonctionné.