我刚刚尝试按照说明更新我的 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 脚本。