Linux 上的持久微码更新

Linux 上的持久微码更新

我刚刚尝试按照说明更新我的 Intel Core i3-3217U 处理器的微代码英特尔。我使用的是 Linux Mint Debian 版本 2(3.16.0-5-amd64 内核)。

我做了什么:

  • 有一个/sys/devices/system/cpu/microcode/reload
  • 没有/lib/firmware/intel-ucode,只有/lib/firmware/intel。无论如何,我从下载的包中添加了该文件夹。
  • 根据指令,我执行了

    echo 1 > /sys/devices/system/cpu/microcode/reload
    

cat /proc/cpuinfo | grep microcode给了我0x1f,这是更新后的版本 - 但只有在系统运行时才有效。重启后我又回到了0x12

我怎样才能使更新永久生效?

答案1

您无法使英特尔微代码更新永久生效,必须在每次启动后加载。微代码存储在 CPU 中的易失性 RAM 中。

答案2

我发现我可以利用 debian 软件包中的代码将微码加载到初始 ramdisk英特尔微码。目前这是微代码的旧版本,但它们可以被覆盖。

安装软件包后,我手动删除了所有文件,/lib/firmware/intel-ucode并用英特尔下载的新版本替换它们。之后我可以initrd.img-<kernel version>使用

update-initramfs -u

grub-mkconfig也会执行这个。

据我了解,intel-ucode.img另一个答案中提到的是所谓的“早期 initramfs 档案”。似乎软件包中包含的 initramfs-tools 钩子脚本会自行选择是将更新模块放在单独的 .img 中还是放在主 initrd.img 中。

编辑:似乎新的微码版本已经登陆不稳定的包。依赖项没有改变,所以它们可能在 Debian stretch(或 jessie,我仍在使用)上工作。我怀疑新软件包版本只需几天就会被移植。然后,安装就足够了。

答案3

作为中间解决方案,当微码更新尚未移植到 Debian 时,您可以按照 Intel 说明安装微码更新后将“echo 1 > /sys/devices/system/cpu/microcode/reload”添加到 /etc/rc.local。这是一个相当晚的修补,但如果您信任您的启动环境,可能没问题 :)

答案4

微代码更新在启动期间应用,因此应将其添加到引导加载程序中,例如 GRUB2 或 systemd-boot。更具体地说,/boot/intel-ucode.img(或此文件位于系统上的任何位置)应作为启动过程的第一个 initrd 映像添加(但它应该不是替换正常的 initrd 映像)。安装微码更新包后,grub-mkconfig 脚本通常会自行处理此问题,但您可以检查 /boot/grub/grub.cfg 文件是否有类似的行:

initrd  /intel-ucode.img /initramfs-linux.img

如果没有,您可以重新安装微码包,或者手动运行 grub-mkconfig 脚本。

相关内容