Rendre une ExpressCard compatible Thunderbolt manuellement

Hier, je parlais du Sonnet Echo ExpressCard (Pro), un boîtier permettant d’utiliser des cartes ExpressCard en Thunderbolt. Petit problème, la majorité des cartes ne fonctionnent tout simplement pas, mais il est possible d’adapter les pilotes dans certains cas. Explications.

Faisons simple : le Thunderbolt est un bus PCI-Express externe, mais il y a quelques particularités. La première est la latence de la chaîne, qui est — selon Sonnet — d’environ 6 microsecondes sur le premier périphérique, avec ensuite environ 5 microsecondes par périphérique supplémentaire. Ca implique une latence dans les réponses sur les bus, ce qui peut limiter les performances dans certains cas. Il faut donc des contrôleurs adaptés, capables d’envoyer beaucoup de commandes, ce qui masque la latence. Avec 8 commandes (cas de certains vieux contrôleurs SATA), on aura un débit en écriture plus faible qu’avec un buffer de 32 commandes comme sur les cartes récentes. La seconde, c’est le support du hot-plug, pas toujours présent sur les cartes PCI-Express.

Pour simplifier les choses, Apple utilise un indicateur dans les pilotes, le champ Compatible avec les tunnels. Si la valeur existe, le pilote est compatible Thunderbolt et sera donc chargé pour un périphérique. Comme expliqué hier, certains pilotes standards d’OS X sont compatibles Thunderbolt : les cartes réseau Intel, les contrôleurs AHCI (SATA, eSATA, etc.), les cartes réseau Broadcom, les contrôleurs FireWire, les contrôleurs SDXC et les contrôleurs USB.

En théorie, seuls les pilotes validés par Apple sont donc compatibles Thunderbolt. En pratique, on peut tenter de vérifier si ça fonctionne en ajoutant simplement la compatibilité manuellement. Ca ne fonctionne pas nécessairement, mais j’ai testé avec une carte Wi-Fi et c’est efficace.

Première chose, trouver le pilote utilisé par la carte. Dans mon cas, une ExpressCard Wi-Fi dotée d’une puce BCM4322, un contrôleur Wi-Fi classique bien supporté par Mac OS X. Les pilotes sont dans /System/Library/Extensions, il faut ensuite trouver le bon pilote. Pour le Wi-Fi, c’est IO80211Family.kext, qui contient des pilotes pour plusieurs modèles de contrôleurs. Il faut donc trouver le pilote correspondant et chercher son fichier Info.plist. Dans mon cas, c’est donc le chemin suivant, mais ça varie évidemment en fonction de la carte.

/System/Library/Extensions/IO80211Family.kext/Contents/PlugIns/AppleAirPortBrcm43224.kext/Contents/Info.plist

Ensuite, il faut modifier le fichier, soit en copiant le fichier sur le bureau, soit en utilisant un éditeur de texte caâble de garder les droits (TextWrangler dans sa version issue du site Web de l’éditeur).

Il faut aller dans la section qui commence par…

<dict>
<key>CFBundleIdentifier</key>

…et ajouter les deux lignes suivantes à la fin de la section (avant le </dict>).

<key>IOPCITunnelCompatible</key>
<true/>

Ca indique au système que le pilote est compatible Thunderbolt. Il faut ensuite redémarrer et ça devrait fonctionner.

Avant

Avant


Après

Après

Bien évidemment, ce n’est efficace que si des pilotes existent pour Mac OS X, donc certaines cartes ne fonctionneront pas de cette manière. De plus, ça reste de la bidouille : tous les périphériques n’apprécieront pas nécessairement et on peut supposer que si Apple n’a pas validé tous les pilotes de Mac OS X, c’est que ça ne fonctionne pas nécessairement.