更新計算機處理器微碼

黃志斌發表於2019-02-03

太長不看版本

只要能夠確認你用的是 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 幫助:更新處理器微碼

相關文章