英特尔处理器微码更新(MCU)软件包提供了一种针对安全公告和功能问题(包括勘误)发布更新的机制。此外,MCU 还负责启动 SGX 飞地(在支持 SGX 功能的处理器上)、实现复杂行为(例如 assists)等。应用 MCU 的首选方法是使用系统 BIOS。对于英特尔的某些处理器,还可以使用操作系统在运行时更新 MCU。此处共享的英特尔微码软件包包含针对那些支持操作系统加载 MCU 的处理器的更新。
更新微码有助于缓解 CPU 中的某些潜在安全漏洞,并解决某些可能导致不可预测系统行为(如挂起、崩溃、意外重启、数据错误等)的功能问题。要了解有关向英特尔处理器应用 MCU 的更多信息,请参阅微码更新指南。
此软件包提供给 Linux 发行商,以便纳入其操作系统版本中。英特尔建议通过操作系统供应商更新机制获取最新的 MCU。一个很好的出发点是操作系统和软件供应商。专家用户可以在操作系统供应商机制之外直接更新微码。但是,此方法较为复杂,如果操作不当可能会导致错误。此类错误可能包括但不限于系统冻结、无法启动、性能影响、逻辑处理器加载不同的更新以及某些更新不生效。因此,此方法应仅由专家用户尝试。
MCU 最好从 BIOS 加载。某些 MCU 只能从 BIOS 应用。此类 MCU 绝不会打包在此软件包中,因为它们不适合通过操作系统分发。OEM 可能会收到微码更新软件包,这些软件包是此软件包内容的超集,用于纳入 BIOS。
操作系统供应商可以选择提供内核可用于早期加载的 MCU。例如,Linux 可以在内核启动序列的早期应用 MCU。在没有可用 BIOS 更新的情况下,早期加载是更新处理器微码的次优选择。微码状态在电源重置时会被重置,因此需要在每次启动过程中加载 MCU。
建议使用 initrd 方法加载 MCU,因为此方法会在最早的时间加载 MCU,以获得最大的覆盖范围。无法容忍停机的系统可以使用后期加载方法在无需重启的情况下更新运行中的系统。
处理器签名是一个用于标识英特尔处理器型号和版本的编号。可以通过 CPUID 指令、lscpu 命令或 /proc/cpuinfo 的内容获取。它通常以 3 个字段表示:系列(Family)、型号(Model)和步进(Stepping)。
例如,如果处理器通过 CPUID 指令 返回值“0x000906eb”:
对应的 Linux 格式化文件名将是“06-9e-0b”,其中:
处理器可能针对多种平台类型实现。英特尔处理器在 MSR(17H) 中有一个 3 位平台 ID 字段,用于指定最多 8 种平台类型。针对特定处理器型号的 MCU 文件可能支持多个平台。MCU 支持的平台 ID 是一个 8 位掩码,其中每个置位位表示该 MCU 支持的一种平台类型。在 Linux 中,可以使用 msr-tools 中的 rdmsr 读取处理器的平台 ID。
intel-ucode 目录包含以 family-model-stepping 格式命名的二进制 MCU 文件。大多数现代 Linux 发行版都支持此文件格式。它通常位于 /lib/firmware 目录中,可以按照下面的后期加载更新说明通过微码重新加载接口进行更新。
要更新早期加载的 initrd,请咨询您的 Linux 发行版如何打包用于早期加载的 MCU 文件。某些发行版使用 update-initramfs 或 dracut。在尝试下面的后期加载流程之前,请使用操作系统供应商推荐的方法,以确保 MCU 文件已更新以用于早期加载。
要将 intel-ucode 软件包更新到系统:
/sys/devices/system/cpu/microcode/reload 存在$ git clone https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files.git 或$ wget https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/archive/main.zipintel-ucode 目录复制到 /lib/firmware,覆盖 /lib/firmware/intel-ucode/ 中的文件$ echo 1 > /sys/devices/system/cpu/microcode/reload$ sudo update-initramfs -u$ sudo reboot$ dmesg | grep microcode 或$ cat /proc/cpuinfo | grep microcode | sort | uniq如果您使用操作系统供应商方法应用 MCU,则上述步骤可能已在更新过程中自动完成。
intel-ucode-with-caveats 目录包含需要特殊处理的 MCU。BDX-ML MCU 在此目录中提供,因为它需要 Linux 内核中的特殊提交,否则更新它可能会导致意外的系统行为。操作系统供应商在打包 BDX-ML MCU 用于后期加载之前,必须确保发行版中包含后期加载程序补丁(在 linux-kernel-patches 中提供)。
linux-kernel-patches 目录包含解决与应用 MCU 相关的各种问题的内核补丁。
$ printf "%x\n" <number_to_convert_to_hex>$ iucode_tool -l intel-ucode | grep -wF sig(需要 iucode_tool 软件包)$ od -t x4 <Family-Model-Stepping> 将读取 <Family-Model-Stepping> 中指定的微码二进制头的前 16 个字节。第三个块是微码版本。例如:
$ od -t x4 06-55-040000000 00000001 *02000065* 09052019 00050654有关详细信息,请参阅 license 文件。
有关详细信息,请参阅 security.md 文件。
有关详细信息,请参阅 releasenote.md 文件。
英特尔技术的特性和优势取决于系统配置,并且可能需要启用硬件、软件或服务激活。性能因系统配置而异。请咨询您的系统制造商或零售商,或在 www.intel.com 了解更多信息。
没有任何产品或组件是绝对安全的。
此处提供的所有信息如有变更,恕不另行通知。请联系您的英特尔代表以获取最新的英特尔产品规格和路线图。
所描述的产品和服务可能包含称为勘误的缺陷或错误,这些缺陷或错误可能导致与已发布规格的偏差。当前已表征的勘误可应要求提供。
英特尔按“原样”提供这些材料,不提供任何明示或暗示的保证。
© Intel Corporation。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。
*其他名称和品牌可能是其各自所有者的财产。
| 保留 | 扩展系列 | 扩展型号 | 保留 | 处理器类型 | 系列代码 | 型号编号 | 步进 ID |
|---|
| 31:28 | 27:20 | 19:16 | 15:14 | 13:12 | 11:8 | 7:4 | 3:0 |
| xxxx | 00000000b | 1001b | xx | 00b | 0110b | 1110b | 1011b |