如何在Linux上安装/更新英特尔微码固件

时间:2020-01-09 10:41:01  来源:igfitidea点击:

如何使用命令行选项在Linux上为Intel/AMD CPU安装或更新微码固件?
微码不过是Intel或AMD提供的CPU固件。

Linux内核可以在引导时更新BIOS而不用更新BIOS。
处理器微代码存储在RAM中,内核在每次引导时都会更新微代码。
这些来自Intel/AMD的微代码更新需要修复错误或应用勘误表以避免CPU错误。

本教程将学习如何使用Intel在Linux上提供的软件包管理器或处理器微代码更新来安装AMD或Intel微代码更新。

如何找出微码的当前状态

以超级用户身份运行以下命令:

# dmesg | grep microcode

输出示例:请注意,您的CPU完全可能没有微码更新。
在这种情况下,它将如下所示:

[    0.952699] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[    0.952773] microcode: Microcode Update Driver: v2.2.

如何使用程序包管理器在Linux上安装英特尔微码固件

Linux附带了用于转换和部署x86/amd64的CPU微代码更新的工具。
在Linux上安装AMD或Intel微码固件的过程如下:

  • 打开终端应用
  • Debian/Ubuntu Linux用户类型:``sudo apt install intel-microcode`
  • CentOS/RHEL Linux用户类型:``sudo yum install microcode_ctl`

软件包名称如下所示,用于流行的Linux发行版:

  • microcode_ctl和linux-firmware CentOS/RHEL微代码更新包
  • 英特尔微码Debian/Ubuntu并克隆英特尔CPUS的微码更新包
  • amd64-微代码Debian/Ubuntu并为AMD CPU克隆微代码固件
  • linux-firmware用于AMD CPU的Arch Linux微代码固件(默认情况下已安装,您无需执行任何操作)
  • 用于Intel CPU的intel-ucode Arch Linux微代码固件
  • microcode_ctl,linux固件和ucode-intel Suse/OpenSUSE Linux微代码更新包

警告:在某些情况下,微码更新可能会导致启动问题,例如服务器挂起或在启动时自动重置。
该程序对我有用,我是一位经验丰富的sysadmin。
我对任何硬件故障概不负责。
自行承担风险。

例子

在用于Intel CPU的Debian/Ubuntu Linux上执行以下apt命令/apt-get命令:

$ sudo apt-get install intel-microcode

输出示例:必须重新启动该框才能激活micocode更新:

$ sudo reboot

重新启动后进行验证:

# dmesg | grep 'microcode'

输出示例:

[    0.000000] microcode: microcode updated early to revision 0x1c, date = 2014-02-26
[    1.604672] microcode: sig=0x306a9, pf=0x10, revision=0x1c
[    1.604976] microcode: Microcode Update Driver: v2.01 <[email protected]>, Peter Oruba

如果您使用的是RHEL/CentOS,请尝试使用yum命令安装或更新以下两个软件包:

$ sudo yum install linux-firmware microcode_ctl
$ sudo reboot
$ sudo dmesg | grep 'microcode'

如何更新/安装从英特尔站点下载的微码

仅在供应商推荐时使用以下方法,否则请按照上述方法使用Linux软件包。
大多数Linux发行版维护者通过软件包管理器更新微码。
包管理器方法很安全,已通过许多用户测试。

如何为Linux(20160108版本)安装英特尔处理器微码Blob

好的,首先访问AMD或Intel网站以获取最新的微代码固件。
在此示例中,我有一个名为~/Downloads/microcode-20160108.tgz的文件(请不要忘记检查校验和),该文件可能有助于解决故障/Spectre。
首先使用tar命令将其提取:

$ mkdir firmware
$ cd firmware
$ tar xvf ~/Downloads/microcode-20160108.tgz
$ ls -l

输出示例:

drwxr-xr-x 2 Hyman Hyman    4096 Jan  8 12:41 intel-ucode
-rw-r--r-- 1 Hyman Hyman 4847056 Jan  8 12:39 microcode.dat
-rw-r--r-- 1 Hyman Hyman    1907 Jan  9 07:03 releasenote

我仅在CentOS 7.x/RHEL 7.x/Debian 9.x和Ubuntu 17.10上测试了以下说明。
如果看不到/sys/devices/system/cpu/microcode/reload文件,则较早发行版附带的较早内核可能无法工作。
请参阅下面的讨论。
请注意,很少有客户在应用固件更新后重启更高的系统。
具体来说,这些系统针对服务器中使用的客户端和数据中心cpus运行Intel Broadwell和Haswell CPU。
不要在Intel Broadwell和Haswell CPU上应用Intel固件版本20160108。
如果可能,请使用包管理器方法。

确保/sys/devices/system/cpu/microcode/reload退出:

$ ls -l /sys/devices/system/cpu/microcode/reload

您必须使用cp命令将所有文件从intel-ucode复制到/lib/firmware/intel-ucode /:

$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/

您只需将intel-ucode目录复制到/lib/firmware /。
将重载接口写入1以重载微代码文件:

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

更新现有的initramfs,以便下次通过内核加载时:

$ sudo update-initramfs -u
$ sudo reboot

验证微码在启动时已更新或通过echo命令重新加载:

# dmesg | grep microcode