Firmwares

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

1 - Principe

$ 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

2 - Installation des firmwares

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.

2.1 - Installation par défaut

$ 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

2.2 - Installation à partir du nom de fichier du microcode

$ sudo aptitude update apt-file
$ sudo apt-file update
$ 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
$ 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
$ sudo updatedb

$ locate /lib/firmware/i915/kbl_dmc_ver1_04.bin
/usr/lib/firmware/i915/kbl_dmc_ver1_04.bin

2.3 - Liste des paquets de firmware installés

$ 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

2.4 - Liste des firmwares associés à un pilote

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

3 - Chargement

$ sudo modprobe -r nom_du_module && sudo modprobe nom_du_module

4 - 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
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

5 - Installation automatique

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.