Suite à ce bug https://youtrack.jetbrains.com/issue/JBR-2310 qui provoquait des crash violents du système en utilisant un IDE jetbrains, voici un moyen pour ajouter un microcode à l'initrd.
Sur https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/issues/39 le mainteneur indique que le microcode 150 est dispo sur https://github.com/platomav/CPUMicrocodes/blob/master/Intel/cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin, mais ensuite on en fait quoi ?
Je l'ai mis dans /boot, ma seule partition non chiffrée, et en lisant une doc intel je vois qu'ajouter une ligne dans la conf grub devrait permettre de le charger avant l'initrd, j'essaie avec
linux /vmlinuz-5.7.0-0.bpo.2-amd64 root=/dev/mapper/nvme-root ro quiet initrd /cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin initrd /initrd.img-5.7.0-0.bpo.2-amd64
mais ça marche pas… (le /cpu… désigne bien /boot/cpu…) probablement un pb du format du fichier.
Voici une méthode pour l'ajouter à l'init rd qui a fonctionné chez moi, mais attention, ne pas copier / coller ça sans bien comprendre ce que ça fait ! Et assurez-vous d'avoir un autre moyen de démarrer si cette procédure cassait le boot de votre machine.
# On regarde les microcodes installés /usr/sbin/iucode_tool -tb -lS /lib/firmware/intel-ucode/* /boot/cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin /usr/sbin/iucode_tool: system has processor(s) with signature 0x000706e5 […] selected microcodes: 059/001: sig 0x000706e5, pf_mask 0x80, 2020-03-12, rev 0x0078, size 107520 # ok, 78 c'est bien celui qu'on a déjà, cf `grep microcode /proc/cpuinfo` # on regarde s'il détecte le 150 (0x96) dans le .bin qu'on a téléchargé /usr/sbin/iucode_tool -tb -lS /lib/firmware/intel-ucode/* /boot/cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin /usr/sbin/iucode_tool: system has processor(s) with signature 0x000706e5 […] selected microcodes: 082/001: sig 0x000706e5, pf_mask 0x80, 2020-06-16, rev 0x0096, size 108544 # il est bien sélectionné par défaut (0x0096 => 9×16+6 = 150), on l'ajoute à la liste de /lib/firmware/intel-ucode iucode-tool -v --write-firmware /boot/cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin iucode-tool: processed 1 valid microcode(s), 1 signature(s), 1 unique signature(s) iucode-tool: selected 1 microcode(s), 1 signature(s) iucode-tool: Writing microcode firmware file(s) into /lib/firmware/intel-ucode iucode-tool: 06-7e-05: cannot write to, or create file: File exists iucode-tool: no files were written into /lib/firmware/intel-ucode # le fichier 06-7e-05 existait déjà, on le renomme avec les conventions dpkg mais un autre nom marcherait aussi) mv /lib/firmware/intel-ucode/06-7e-05 /lib/firmware/intel-ucode/06-7e-05.dpkg-dist # on recommence iucode-tool -v --write-firmware /boot/cpu706E5_plat80_ver00000096_2020-06-16_PRD_4A457385.bin iucode-tool: processed 1 valid microcode(s), 1 signature(s), 1 unique signature(s) iucode-tool: selected 1 microcode(s), 1 signature(s) iucode-tool: Writing microcode firmware file(s) into /lib/firmware/intel-ucode iucode-tool: 06-7e-05: 1 microcode entries written, 108544 bytes iucode-tool: 1 file(s) were written into /lib/firmware/intel-ucode # ok, on vérifie qu'il serait bien sélectionné /usr/sbin/iucode_tool -tb -lS /lib/firmware/intel-ucode/* […] selected microcodes: 059/001: sig 0x000706e5, pf_mask 0x80, 2020-06-16, rev 0x0096, size 108544 # c'est tout bon, reste à l'inclure dans l'initrd update-initramfs -u
Et après un reboot, `grep microcode /proc/cpuinfo` sort bien `0x96`.