Firmwares manquants dans Debian ? Apprenez à gérer le problème

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 : http://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.

Commentaires

  1. Merci, je garde le lien vers ce billet dans un coin, ça pourra toujours servir ;-)

  2. La solution du gestionnaire de paquets est très contraignante et inefficace si le firmware manquant touche la carte réseau ou un contrôleur SCSI. Par contre le netinstall non officiel est très intéressant, je crois que je vais le mettre de côté.
    Debian s’est tiré une balle dans la jambe surtout face à CentOS en retirant tous ces firmwares indispensables.

    • sytoka a écrit:

      En pratique, les choses sont maintenant propre avec une séparation claire et on trouve dans non-free les paquets qu’il faut. Au boulot, cela ne nous a poser aucun réel problème.

      Je crois au contraire que debian s’est retiré une épine du pied en faisant cela. C’était un tâche importante qui traînait depuis longtemps et qui a chaque nous sortie devait faire l’objet d’un vote.

      Si on commence à mélanger libre et non libre, on se sais jamais ou cela s’arrête… jusqu’au jour ou l’on se retrouve coincés. CentOS est un petit projet qui n’a pas forcément les ressources humaines pour tout mener à bien.

  3. TuxGasy a écrit:

    J’ai ces messages d’erreurs à chaque fois que je lance update-initramfs :

    W: Possible missing firmware /lib/firmware/nouveau/fuc41ad for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/fuc41ac for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/fuc409d for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/fuc409c for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc4_fuc41ad for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc4_fuc41ac for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc4_fuc409d for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc4_fuc409c for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc3_fuc41ad for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc3_fuc41ac for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc3_fuc409d for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc3_fuc409c for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc0_fuc41ad for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc0_fuc41ac for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc0_fuc409d for module nouveau
    W: Possible missing firmware /lib/firmware/nouveau/nvc0_fuc409c for module nouveau

    apt-file ne me trouve rien et je n’ai pas trouvé de solution sur la toile. Si quelqu’un à une solution, merci d’avance.

  4. Merci pour le billet
    Sur mon netbook Mini9 la puce wi-fi broadcom s’est mise à ne plus fonctionner correctement, je suppose un souci à la suite d’une mise à jour.
    J’ai trouvé la solution, par contre il ne semble pas prévu de corriger le bogue dans Debian qui est pourtant connu https://www.debian-fr.org/wifi-broadcom-bcm4312-802-11b-g-plus-de-connexion-t35881.html?sid=05b1c6e775932b4d801fce6652703f05#p362091

    • Le rapport de bogue n’est pas sur le bon paquet. Il s’agit d’un bogue noyau. Je te suggère d’en réouvrir un sur le paquet « linux-2.6″ en résumant le problème. Mais le mieux serait d’obtenir un correctif au niveau du noyau officiel… il ne devrait pas être nécessaire d’avoir à ajouter un tel fichier.

      • Merci, j’ai posté le rapport de bogue #647012
        J’en profite pour signaler une chose
        Je fais relativement souvent des rapports de bogue pour GNOME, Firefox et j’en ai fait pas mal pour Ubuntu. Je n’utilise pas de logiciel local de courriel, seulement une interface Web.
        La méthode de rapport de bogue pour debian est très contraignante. Etant donné que ce système est censé permettre la remontée d’information, je trouve ça dommage car je suis persuadé beaucoup jettent l’éponge avant de comprendre comment ça marche

        • On le sait, on en parle régulièrement mais on est assez content de la situation actuelle. Si tout le monde faisait des rapports de bogue, on croulerait sous les bugs inexploitables. Là en demandant un minimum d’investissement ca fait un certain filtre.

          Et si on compare la qualité moyenne du rapport de bogue chez Debian et chez Ubuntu on voit tout de suite la différence. Ceci dit utiliser un webmail ne complique pas vraiment le process… tu peux facilement coller la sortie de reportbug –template dans ton webmail. Et vérifier les bogues présents dans ton navigateur web ou alors avec reportbug-ng.

          • « tu peux facilement coller la sortie de reportbug –template dans ton webmail » oui c’est ce que j’ai fait
            Merci des tes explications sur le filtre ;-)

  5. kurgan231 a écrit:

    Bonjour,

    pourquoi ne mentionnez-vous pas la possibilité d’intégrer directement l’ensemble des firmware à l’initrd de son image d’install comme mentionné dans l’article ci-dessous par exemple:

    http://wiki.debian.org/DebianInstaller/NetbootFirmware

    désolé si je suis hors sujet

    • Parce que je ne connaissais pas ce lien et parce que l’installation par netboot est généralement faite par des personnes qui sont à l’aise avec Debian… merci pour le lien en tout cas!

  6. Bonjour,
    ne serait-il pas possible de créer un paquet non libre pour débutants (ou nuls comme moi) qui installerait un groupe de firmwares équivalent à ceux qui étaient installés dans les précédents noyaux?
    Personnellement je serais prêt à ajouter un dépôt supplémentaire dans ma sources.list qui offrirait un tel paquet avec les firmwares associés.

    Je suis un mauvais élève qui utilise un noyau 2.6.37 parce qu’aucun des autres noyaux qui sont sortis par la suite n’a fonctionné correctement sur ma Debian (j’en ai probablement loupé qui devaient fonctionner) – le noyau 3.0.0 encore pire que les autres. Je suis conscient et inquiet par le fait que cette situation n’est absolument pas pérenne.

    Toutes ces manips (mille merci de nous avoir fourni le mode d’emploi) me semblent compliquées, lourdes et dévoreuses de temps.
    Penser qu’un système d’exploitation moderne va demander à ses utilisateurs de détecter/chercher/installer eux-même les firmwares les plus importants (on ne parle pas ici uniquement du matériel exotique) me rend dubitatif. Je pense aussi que Debian se tire une balle dans le pied.

    Je comprend tout à fait les enjeux et y souscrit entièrement.
    Il me semble néanmoins important d’offrir une alternative moderne et simple (paquet+dépôt externe) pour offrir une chance aux débutants de faire le pas vers Linux et aux autres de ne pas être dégouttés d’un système devenant trop compliqué.