太长不看版本

只要能够确认你用的是 Intel CPU,并且使用 Grub 引导 Arch Linux 操作系统,那么,运行以下两条命令就足够了:

$ sudo pacman -S intel-ucode
$ LANG=en_US && sudo grub-mkconfig -o /boot/grub/grub.cfg

正式版本

ArchWiki: Microcode 中提到:

处理器制造商发布对处理器微码的稳定性和安全性更新。虽然微码可以通过 BIOS 进行更新,但 Linux 内核也可以在引导期间应用这些更新。这些更新提供了对系统稳定性至关重要的错误修复。如果没有这些更新,您可能会遇到虚假崩溃或难以跟踪的意外系统暂停。

我有一台生产日期是 2016-05-03 的 Lenovo ThinkCentre M4500s-N000 台式机, CPU 是 Intel(R) Celeron(R) CPU G1840 @ 2.80GHz。在 Arch Linux 操作系统中,使用下述命令安装相应的软件:

$ sudo pacman -S intel-ucode iucode-tool

这些软件是:

intel-ucode: Microcode update files for Intel CPUs
iucode-tool: Tool to manipulate Intel® IA-32/X86-64 microcode bundles

然后检查一下:

$ sudo modprobe cpuid
$ sudo bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
iucode_tool: system has processor(s) with signature 0x000306c3
microcode bundle 1: (stdin)
selected microcodes:
001/143: sig 0x000306c3, pf_mask 0x32, 2018-04-02, rev 0x0025, size 23552
$ grep microcode /proc/cpuinfo
microcode : 0x1d
microcode : 0x1d
$ dmesg | grep microcode
[ 0.043198] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x22 (or later)
[ 0.605838] microcode: sig=0x306c3, pf=0x2, revision=0x1d
[ 0.605951] microcode: Microcode Update Driver: v2.2.

果然有微码需要更新,并且在开机时还因为微码版本过低而报错(现有版本是 0x1d,要求更新到 0x22 或以上版本,而 Intel 已经发布了 0x25 版本)。

我是使用 Grub 引导操作系统的,因此,在安装微码软件包后,使用以下命令重新生成 Grub 配置以激活更新:

$ LANG=en_US && sudo grub-mkconfig -o /boot/grub/grub.cfg

然后重新启动计算机以更新微码。使用以下命令验证微指令已在启动时更新:

$ dmesg | grep microcode
[ 0.000000] microcode: microcode updated early to revision 0x25, date = 2018-04-02
[ 0.612232] microcode: sig=0x306c3, pf=0x2, revision=0x25
[ 0.612268] microcode: Microcode Update Driver: v2.2.
$ grep microcode /proc/cpuinfo
microcode : 0x25
microcode : 0x25

的确,微码已经更新到 0x25 版本了,并且在开机时也不报错了。并且,只要以后定期使用以下命令进行更新:

$ sudo pacman -Syu

那么,就可以更新到微码的最新版本了。

注意,用这种方法更新微码,仅是更新内存中的微码,并不写回 CPU 中。所以以后每次开机都会更新微码。

相关文章

  1. ArchWiki: Microcode
  2. Firefox 帮助:更新处理器微码