Mise à jour : Debian 10.5 / Buster
Certains composants électroniques nécessitent pour fonctionner le chargement préalable de logiciels embarqués, appelés firmware ou microcode, dans la terminologie Linux / Debian :
Sommaire
$ sudo dmesg |grep firmware |grep iwlwifi
[ 16.680309] iwlwifi 0000:00:14.3: firmware: direct-loading firmware iwlwifi-9000-pu-b0-jf-b0-46.ucode
[ 16.680522] iwlwifi 0000:00:14.3: loaded firmware version 46.a41adfe7.0 9000-pu-b0-jf-b0-46.ucode op_mode iwlmvm
[ 16.752205] iwlwifi 0000:00:14.3: Allocated 0x00400000 bytes for firmware monitor.
Le ficher du firmware a pour nom iwlwifi-9000-pu-b0-jf-b0-46.ucode et on peut vérifier sa présence dans /usr/lib/firmware
$ locate iwlwifi-9000-pu-b0-jf-b0-38.ucode
/usr/lib/firmware/iwlwifi-9000-pu-b0-jf-b0-38.ucode
$ sudo dmesg |grep firmware |grep failed
[ 3.089112] i915 0000:00:02.0: firmware: failed to load i915/kbl_dmc_ver1_04.bin (-2)
[ 3.089116] i915 0000:00:02.0: Direct firmware load for i915/kbl_dmc_ver1_04.bin failed with error -2
Le fichier du firmware a pour nom i915/kbl_dmc_ver1_04.bin et n'a pas été trouvé dans /usr/bin/firmware
$ locate i915/kbl_dmc_ver1_04.bin
Les fichiers sont installables à partir de paquets contenant un ou plusieurs firmwares dans une ou plusieurs versions, pour un ou plusieurs pilotes, pour un ou pluseurs périphériques. Ces paquets contiennent généralement le mot firmware dans leur nom et sont présents dans les sections free, contrib ou non free.
$ sudo aptitude install firmware-linux
firmware-linux est un métapaquet qui installe les paquets firmware-linux-free et firmware-misc-nonfree
$ sudo aptitude install -t buster-backports firmware-linux
Cette installation par défaut, n'est pas nécessaire mais peut permettre de gagner du temps en évitant la recherche et l'installation des firmwares les plus courants.
$ sudo aptitude update apt-file
$ sudo apt-file update
Exemple : Recherche du paquet contenant le microcode i915/kbl_dmc_ver1_04.bin
$ apt-file search i915/kbl_dmc_ver1_04.bin firmware-misc-nonfree: /lib/firmware/i915/kbl_dmc_ver1_04.bin
Dans cet exemple, le paquet recherché est donc firmware-misc-nonfree
$ apt-cache policy firmware-misc-nonfree
firmware-misc-nonfree:
Installé : 20200619-1
Candidat : 20200619-1
Table de version :
*** 20200619-1 100
10 http://deb.debian.org/debian bullseye/non-free amd64 Packages
100 /var/lib/dpkg/status
20190717-2~bpo10+1 100
100 http://deb.debian.org/debian buster-backports/non-free amd64 Packages
20190114-2 500
500 http://deb.debian.org/debian buster/non-free amd64 Package
Tester la section contenant la version souhaitée du fichier : on constate que le fichier est présent dans les trois sections :
$ apt-file search --filter-suites buster i915/kbl_dmc_ver1_04.bin
firmware-misc-nonfree: /lib/firmware/i915/kbl_dmc_ver1_04.bin
$ apt-file search --filter-suites buster-backports i915/kbl_dmc_ver1_04.bin
firmware-misc-nonfree: /lib/firmware/i915/kbl_dmc_ver1_04.bin
$ apt-file search --filter-suites bullseye i915/kbl_dmc_ver1_04.bin
firmware-misc-nonfree: /lib/firmware/i915/kbl_dmc_ver1_04.bin
$ sudo aptitude install -t buster-backports firmware-misc-nonfree
Vérifier que le firmware est désormais disponible
$ sudo updatedb
$ locate /lib/firmware/i915/kbl_dmc_ver1_04.bin
/usr/lib/firmware/i915/kbl_dmc_ver1_04.bin
$ aptitude search '!~s/ ~nfirmware ~i'
i A firmware-linux-free - micrologiciels binaires pour des pilotes du noyau
$ aptitude search '~scontrib ~nfirmware ~i'
$ aptitude search '~snon-free ~nfirmware ~i'
i firmware-iwlwifi - Binary firmware for Intel Wireless cards
i firmware-misc-nonfree - Binary firmware for various drivers in the Linux
Il est possible de lister tous les firmwares associés à un pilote, par exemple i915 avec la commande
$ sudo modinfo -F firmware i915
i915/bxt_dmc_ver1_07.bin
i915/skl_dmc_ver1_27.bin
i915/kbl_dmc_ver1_04.bin
i915/glk_dmc_ver1_04.bin
i915/cnl_dmc_ver1_07.bin
i915/icl_dmc_ver1_09.bin
i915/tgl_dmc_ver2_04.bin
i915/skl_huc_2.0.0.bin
i915/skl_guc_33.0.0.bin
i915/bxt_huc_2.0.0.bin
i915/bxt_guc_33.0.0.bin
i915/kbl_huc_4.0.0.bin
i915/kbl_guc_33.0.0.bin
i915/glk_huc_4.0.0.bin
i915/glk_guc_33.0.0.bin
i915/kbl_huc_4.0.0.bin
i915/kbl_guc_33.0.0.bin
i915/cml_huc_4.0.0.bin
i915/cml_guc_33.0.0.bin
i915/icl_huc_9.0.0.bin
i915/icl_guc_33.0.0.bin
i915/ehl_huc_9.0.0.bin
i915/ehl_guc_33.0.4.bin
i915/tgl_huc_7.0.3.bin
i915/tgl_guc_35.2.0.bin
$ sudo modprobe -r nom_du_module && sudo modprobe nom_du_module
Vérifier dans dmesg que le firmware a été correctement chargé.
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.6.0-0.bpo.2-amd64
W: Possible missing firmware /lib/firmware/i915/icl_dmc_ver1_09.bin for module i915
W: Possible missing firmware /lib/firmware/i915/tgl_dmc_ver2_04.bin for module i915
W: Possible missing firmware /lib/firmware/i915/skl_huc_2.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_huc_2.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_huc_4.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/glk_huc_4.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_huc_4.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/cml_huc_4.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/cml_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/icl_huc_9.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/ehl_huc_9.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/ehl_guc_33.0.4.bin for module i915
W: Possible missing firmware /lib/firmware/i915/tgl_huc_7.0.3.bin for module i915
W: Possible missing firmware /lib/firmware/i915/tgl_guc_35.2.0.bin for module i915
$ apt-file search --filter-suites bullseye i915/tgl_guc_35.2.0.bin
firmware-misc-nonfree: /lib/firmware/i915/tgl_guc_35.2.0.bin
Installer le paquet correspondant
$ sudo aptitude install -t bullseye firmware-misc-nonfree
et vérifier la disparition des avertissements lors de la mise à jour de l'initramfs
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.6.0-0.bpo.2-amd64
Un dispositif de détection et chargement automatique des firmwares manquant est disponible via isenkram
$ sudo aptitude install isenkram-cli
$ sudo isenkram-autoinstall-firmware
info: looking for firmware file iwl-debug-yoyo.bin requested by kernel
info: some kernel driver requested extra firmware files: iwlwifi-ma-a0-gf-a0-59.ucode iwlwifi-ma-a0-mr-a0-59.ucode iwlwifi-QuQnj-b0-hr-b0-59.ucode iwlwifi-QuQnj-b0-jf-b0-59.ucode iwlwifi-so-a0-gf-a0-59.ucode iwlwifi-so-a0-hr-b0-59.ucode iwlwifi-so-a0-jf-b0-59.ucode iwlwifi-SoSnj-a0-gf4-a0-59.ucode iwlwifi-SoSnj-a0-gf-a0-59.ucode iwlwifi-SoSnj-a0-hr-b0-59.ucode iwlwifi-SoSnj-a0-mr-a0-59.ucode renesas_usb_fw.mem rtl_bt/rtl8723b_config.bin rtl_bt/rtl8723bs_config.bin rtl_bt/rtl8723ds_config.bin rtl_bt/rtl8723ds_fw.bin rtl_bt/rtl8761a_config.bin rtl_bt/rtl8821a_config.bin iwl-debug-yoyo.bin
info: locating packages with the requested firmware files
info: determining whether enabling other components is required
info: No new firmware package with requested firmware detected.