Vous en avez déjà certainement entendu parler : Debian Squeeze est la première version de Debian dont l’installation standard est dépourvue de firmwares non libres. Ce qui peut entraîner quelques difficultés pour les utilisateurs en ayant besoin. Après une rapide introduction du sujet, nous allons voir comment remédier aux désagréments engendrés par ce changement.
Les firmwares : que sont-ils et comment sont-ils utilisés ?
Du point de vue de l’utilisateur, un firmware (ou microprogramme/microcode) n’est qu’un ensemble de données indispensable au bon fonctionnement d’un matériel donné. Généralement le pilote correspondant charge le firmware dans le périphérique au cours de son processus d’initialisation.
Au sein du noyau Linux, les pilotes utilisent tous la même interface normalisée (request_firmware) pour récupérer le firmware avant de l’envoyer au périphérique. Cette standardisation permet d’embarquer ce dernier directement dans le noyau, ou de le charger à la demande depuis l’espace utilisateur (lorsqu’il est requis).
Debian, à l’instar de la plupart des autres distributions, a choisi la deuxième option. Ainsi, lorsque le noyau a besoin d’un firmware, il envoie une requête en espace utilisateur : udev intercepte la demande (contenant le nom du firmware), et, grâce à sa configuration par défaut (cf. /lib/udev/rules.d/80-drivers.rules
) exécute /lib/udev/firmware.agent
en réponse.
Où sont enregistrés les firmwares ?
Le script shell firmware.agent
essaye de localiser un firmware avant de le renvoyer au noyau via une entrée sysfs. Les répertoires analysés sont les suivants :
- /lib/firmware/$(uname -r)
- /lib/firmware
- /usr/local/lib/firmware
- /usr/lib/hotplug/firmware
Les paquets installant des firmwares les enregistrent habituellement dans /lib/firmware
, et vous pouvez utiliser /usr/local/lib/firmware
lorsque vous en installez manuellement.
Comment savoir si vous en avez besoin ?
Première source d’informations : les messages du noyau vous disant qu’il essaye de charger un firmware, mais n’y arrive pas. Ils ressemblent à ceci :
e100: eth0: e100_request_firmware: Failed to load firmware "e100/d101m_ucode.bin": -2
Ceci étant, le système peut vous informer du problème plus tôt : lorsque vous installez une nouvelle version du noyau Linux, le script de post-installation va parcourir tous les modules chargés (ceux listés par la commande lsmod) et vérifier si chacun de ces derniers, dans leurs versions installées par le dernier noyau, nécessitent ou pas des firmwares. Cette information est également disponible via modinfo :
$ modinfo -F firmware /lib/modules/2.6.32-5-amd64/kernel/drivers/net/e100.ko e100/d102e_ucode.bin e100/d101s_ucode.bin e100/d101m_ucode.bin
Si certains des firmwares requis ne sont pas présents sur le système, vous obtiendrez un message d’avertissement semblable à celui-ci :
update-initramfs affiche également des avertissements similaires :
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64 W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100
L’installateur Debian détecte également le matériel pouvant nécessiter un firmware manquant, et vous permet de le lui passer via une clé USB (soit directement, soit grâce aux paquets correspondants).
Comment trouver et installer les firmwares manquants ?
Maintenant que vous connaissez le nom du firmware manquant, il est relativement facile d’identifier le paquet le proposant. En effet, la description des paquets contient le nom des fichiers de firmwares qu’ils proposent, « apt-cache search <nom_du_firmware> » ramènera ainsi la liste des paquets le contenant.
Utiliser « apt-file » (fourni par le paquet du même nom) est également possible, comme le fait de rechercher via packages.debian.org.
$ apt-cache search d101m_ucode.bin firmware-linux-nonfree - Binary firmware for various drivers in the Linux kernel $ apt-file search d101m_ucode.bin firmware-linux-nonfree: /lib/firmware/e100/d101m_ucode.bin
Si aucune des commandes précédentes ne retourne quoi que ce soit, vous devrez probablement ajouter le dépôt non-free à votre /etc/apt/sources.list (action réalisable également via synaptic). N’oubliez pas sudo apt-file update
, afin de disposer des informations les plus à jour !
Il vous est maintenant possible d’installer le paquet requis, firmware-linux-nonfree dans l’exemple précédent.
Comment installer tous les firmwares, pour être sûr de n’en oublier aucun ?
Comme il n’existe aucun méta-paquet dépendant de tous les paquets de firmwares, la réponse n’est pas simple, et ce d’autant plus que tous les paquets embarquant des firmwares ne se conforment pas à la convention de nommage « firmware-* » (comme par exemple zd1211-firmware).
La « meilleure » option consiste peut-être à effectuer une recherche de termes génériques, comme par exemple :
$ apt-file --package-only search /lib/firmware/ atmel-firmware [...]
et à installer les paquets listés.
Existe-t’il des images CD ou DVD comprenant les firmwares non libres ?
Oui, Debian propose de telles images « netinst » non-officielles pour les architectures i386, amd64 et powerpc. Elles sont téléchargeables ici : http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/.
De mon côté, un jeu de DVD avec les firmwares, et des CD/DVD multi-architectures avec firmwares, sont disponibles dans ma boutique DVD : https://raphaelhertzog.com/go/debian-cd/ (uniquement i386 ou amd64).
L’installateur Debian, avec ces disques, trouvera immédiatement les firmwares requis, vous évitant d’avoir à les charger au moyen d’une clé USB.
D’autres questions ?
Arrivant au terme de cet article, je pense avoir couvert les aspects les plus importants qu’il vous faut connaître au sujet des firmwares dans Debian. Ceci étant, s’il vous reste des questions, n’hésitez pas à les poser en commentaires ! Vos questions (et mes réponses) me permettront d’améliorer ce billet.
Ceci est une traduction de mon article Missing firmware in Debian? Learn how to deal with the problem contribuée par Weierstrass01.
Suivez moi sur Identi.ca, Google+, Twitter et Facebook. Ou abonnez-vous à ce blog par RSS ou par email.