9. Notes sur le support matériel et les firmwares

Après d'âpres discussion au sein de la communauté des développeurs Debian, il a été décidé de publier les logiciels binaires dans des paquets de la catégorie non-free. Les firmwares dont l'installation est présentée ici entrent justement dans cette liste de paquets dédiés.

9.1. Interfaces de type Intel

Les interfaces de marque Intel™ nécessitent un firmware spécifique pour fonctionner correctement. Ce logiciel binaire est aujourd'hui distribué via un paquet baptisé firmware-iwlwifi qui supporte les différentes familles de contrôleurs de la marque.

Les copies d'écran ci-dessous montrent qu'il n'est plus nécessaire de télécharger manuellement ces firmwares à partir de sites différents pas toujours faciles à identifier.

$ dpkg -l firmware-iwlwifi | grep -2 ^ii
||/ Nom                Version   Description
+++-==================-=========-===================================================================
ii  firmware-iwlwifi   0.16      Binary firmware for Intel Wireless 3945, 4965 and 5000-series cards
$ dpkg -L firmware-iwlwifi | grep ucode
/lib/firmware/iwlwifi-4965-2.ucode
/lib/firmware/iwlwifi-3945-1.ucode
/lib/firmware/iwlwifi-4965-1.ucode
/lib/firmware/iwlwifi-5000-1.ucode
/lib/firmware/iwlwifi-3945-2.ucode

Le logiciel binaire est appelé automatiquement lors du chargement du pilote d'interface en mémoire pendant l'initialisation du système.

$ dmesg |grep iwl3945 |grep firmware
iwl3945 0000:0c:00.0: firmware: requesting iwlwifi-3945-2.ucode
iwl3945 loaded firmware version 15.28.2.8

Une fois ce chargement en mémoire effectué l'interface wlan0 doit être prête pour les étapes de configuration suivantes et accessible via la commande iwconfig.

9.2. Interfaces de type Broadcom b43

Avec l'arrivée du noyau 2.6.26, les interfaces PC-CARD de type BCM4306 de la marque Broadcom™ sont intégrées dans les outils mac80211 sous le nom b43.

Ce même noyau 2.6.26 est intégré dans la version stable de la distribution Debian GNU/Linux baptisée Lenny. Il est donc justifié de préciser quelques éléments sur l'utilisation de ce type d'interface avec cette nouvelle génération de logiciel de pilotage.

Tout d'abord, il est préférable de reprendre la reconnaissance et le recensement des interfaces réseau à zéro pour que les entrées Wi-Fi soient correctement positionnées.

C'est le démon udev qui à la charge de «convertir» les références des composants électriquement actifs reconnus par le noyau en entrées de type périphérique dans le système d'exploitation. Ce démon est fourni par le paquet du même nom et les règles de nommage des interfaces réseau sont placées dans le répertoire /etc/udev/rules.d. Voici les informations sur l'état du système utilisé pour la rédaction de cette section.

# dpkg -l udev |grep ^ii
ii  udev       0.125-6                 /dev/ and hotplug management daemon

# ll /etc/udev/rules.d/ |grep net
-rw-r--r-- 1 root root  537 aoû 31 14:42 70-persistent-net.rules
-rw-r--r-- 1 root root 3,1K aoû 31 14:40 75-persistent-net-generator.rules

Si l'interface Wi-Fi a précédemment été configurée sous la référence bcm43xx, il faut effacer le fichier 70-persistent-net.rules à l'aide de la commande # rm /etc/udev/rules.d/70-persistent-net.rules et redémarrer le système. On se croirait sous Windoze !

Une fois que le nouveau jeu de règles est activé, on obtient les entrées suivantes dans le nouveau fichier 70-persistent-net.rules.

# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x8086:0x1229 (e100)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:d0:59:9d:29:c6", \
                  ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x14e4:0x4320 (b43)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:12:17:b6:9c:98", \
                  ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

Avec ces règles, la liste des interfaces obtenues via les commandes ifconfig (et|ou) iwconfig fait bien apparaître les entrées wlan0 et wmaster0.

  • Commande de configuration du niveau Wi-Fi :

    # iwconfig
    lo        no wireless extensions.
    
    eth0      no wireless extensions.
    
    wmaster0  no wireless extensions.
    
    wlan0     IEEE 802.11  ESSID:"open"
              Mode:Managed  Frequency:2.427 GHz  Access Point: 00:1D:45:B7:EF:00
              Bit Rate=54 Mb/s   Tx-Power=27 dBm
              Retry min limit:7   RTS thr:off   Fragment thr=2352 B
              Encryption key:off
              Link Quality=91/100  Signal level=-37 dBm  Noise level=-69 dBm
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    
  • Commande de configuration du niveau réseau IP :

    # ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:d0:59:9d:29:c6
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Boucle locale
              inet adr:127.0.0.1  Masque:255.0.0.0
              adr inet6: ::1/128 Scope:Hôte
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:88 errors:0 dropped:0 overruns:0 frame:0
              TX packets:88 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0
              RX bytes:5312 (5.1 KiB)  TX bytes:5312 (5.1 KiB)
    
    wlan0     Link encap:Ethernet  HWaddr 00:12:17:b6:9c:98
              inet adr:192.168.1.6  Bcast:192.168.1.255  Masque:255.255.255.0
              adr inet6: fe80::212:17ff:feb6:9c98/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:13362 errors:0 dropped:0 overruns:0 frame:0
              TX packets:15606 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000
              RX bytes:8907944 (8.4 MiB)  TX bytes:1824997 (1.7 MiB)
    
    wmaster0  Link encap:UNSPEC  HWaddr 00-12-17-B6-9C-98-77-6C-00-00-00-00-00-00-00-00
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    

Le logiciel de pilotage intégré à l'interface ou firmware est fourni par le constructeur LinkSys™. Le contenu de ce logiciel est protégé puisque seuls les binaires sont fournis. Il n'est donc pas possible de le recompiler à partir des sources comme on le fait couramment avec le noyau Linux. Cependant, l'interface entre le noyau et ce logiciel binaire est possible. C'est ce qui est fait dans le cas du pilote b43. C'est un module du noyau Linux qui fait appel au firmware constructeur pour utiliser les fonctions Wi-Fi.

La distribution Debian GNU/Linux fournit un paquet baptisé b43-fwcutter qui permet de télécharger le firmware et de l'installer dans l'arborescence du système d'exploitation. Voici les informations le paquet et sur l'arborescence d'installation.

# dpkg -l b43* |grep ^ii
ii  b43-fwcutter      1:011-5     Utility for extracting Broadcom 43xx firmware

# ls -l /lib/firmware/b43*

L'utilisation du firmware se retrouve dans les messages systèmes lors de l'activation de l'interface ; au démarrage par exemple. La commande # dmesg | less permet de parcourir les messages correspondants. Voir les lignes débutant par firmware: dans la copie d'écran ci-dessous.

b43-pci-bridge 0000:06:00.0: enabling device (0000 -> 0002)
ACPI: PCI Interrupt 0000:06:00.0[A] -> Link [C142] -> GSI 11 (level, low) -> IRQ 11
PCI: Setting latency timer of device 0000:06:00.0 to 64
ssb: Sonics Silicon Backplane found on PCI device 0000:06:00.0
b43-phy0: Broadcom 4306 WLAN found
phy0: Selected rate control algorithm 'pid'
Broadcom 43xx driver loaded [ Features: PMLR, Firmware-ID: FW13 ]
<snipped>
input: b43-phy0 as /class/input/input6
firmware: requesting b43/ucode5.fw
firmware: requesting b43/pcm5.fw
firmware: requesting b43/b0g0initvals5.fw
firmware: requesting b43/b0g0bsinitvals5.fw
b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10)
Registered led device: b43-phy0::tx
Registered led device: b43-phy0::rx
Registered led device: b43-phy0::radio
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
ADDRCONF(NETDEV_UP): eth0: link is not ready
ADDRCONF(NETDEV_UP): wlan0: link is not ready
wlan0: Initial auth_alg=0
wlan0: authenticate with AP 00:1d:45:b7:ef:00
wlan0: RX authentication from 00:1d:45:b7:ef:00 (alg=0 transaction=2 status=0)
wlan0: authenticated
wlan0: associate with AP 00:1d:45:b7:ef:00
wlan0: RX AssocResp from 00:1d:45:b7:ef:00 (capab=0x421 status=0 axml:id=2)
wlan0: associated
wlan0: switched to short barker preamble (BSSID=00:1d:45:b7:ef:00)
ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

Ces messages systèmes sont la conséquence du chargement des modules de pilotage du noyau Linux. On obtient la liste des modules relatifs à l'interface à l'aide de la commande donnée ci-après.

# lsmod | grep b43
b43                   110748  0
rfkill                  5652  3 rfkill_input,b43
rng_core                3940  1 b43
mac80211              139680  1 b43
led_class               3908  1 b43
input_polldev           3752  1 b43
ssb                    33476  1 b43
pcmcia                 29548  2 b43,ssb
firmware_class          6816  2 b43,pcmcia
pcmcia_core            31892  5 b43,ssb,pcmcia,yenta_socket,rsrc_nonstatic

À partir de là, les opérations de configuration de l'interface de réseau sans-fil n'ont rien de spécifique au modèle de composant utilisé. Il n'y a plus qu'à se référer aux sections ci-dessus.