2021-05-12 14:32:11
Linux 更新處理器微程式碼 CPU microcode
2020-06-16 16:57:23
Linux 更新處理器微程式碼 CPU microcode簡單記錄
Kernel 設定
當前Linux kernel 中microcode
模組已提供Intel/AMD CPU更新介面, 設定以下引數啟用此模組:
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_MICROCODE_INTEL_LIB=y
此模組提供三種不同的方式介面:
1. /dev/cpu/microcode
,通過第三方工具(如microcode_ctl)將microcode
中對應當前系統cpu的ucode
寫入即可更新 ; kernel 3.9
以後版本需開啟 kernel設定引數保持相容;
CONFIG_MICROCODE_OLD_INTERFACE=y
- sysfs介面,
echo 1 > /sys/devices/system/cpu/microcode/reload
核心將自動查詢/lib/firmware/intel-ucode/
目錄下基於當前CPU(格式為:family-model-stepping)更新檔案並執行更新操作; EARLY
方式,kernel在初始化後,載入混合了microcode
cpio與initrdramfs
的initrd自動完成更新操作; 需kernel3.9
之後版本並開啟設定引數:
CONFIG_MICROCODE_INTEL_EARLY=y
CONFIG_MICROCODE_AMD_EARLY=y
CONFIG_MICROCODE_EARLY=y
microcode更新
確認當前待更新microcode
CPU 版本及步進等資訊:
cat /proc/cpuinfo |grep "model|microcode|stepping|family" |head -n 5
cpu family : 6
model : 45
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
stepping : 7
microcode : 0x70a
可知當前CPU ucode 檔案為* 06-2d-07
*
下載CPU microcode
AMD’s Operating System Research Center.
Intel’s download center.
解壓為一個單一檔案: microcode.dat
下載[microcode_ctl] (https://fedorahosted.org/microcode_ctl/)
方法一
使用 microcode_ctl 1.7版本中microcode_ctl
直接更新即可:
microcode_ctl -u microcode.dat
方法二
使用 microcode_ctl v2.x intel-microcode2ucode
轉換工具.
cp microcode.dat /lib/firmware/
cd /lib/fimware
# 解碼 microcode.dat 並在當前目錄下生成基於`intel-ucode`目錄的CPU更新檔案
intel-microcode2ucode microcode.dat
# 通知核心自動更新
echo 1 > /sys/devices/system/cpu/microcode/reload
方法三
已知當前CPU更新檔案為06-2d-07
, 建立混合initrd:
mkdir initrd
cd initrd
mkdir -p kernel/x86/microcode
# Intel CPU檔名為 GenuineIntel.bin; AMD CPU 檔名為 AuthenticAMD.bin
cp /lib/firmware/intel-ucode/06-2d-07 kernel/x86/microcode/GenuineIntel.bin
find . | cpio -o -H newc >../ucode.cpio
cd ..
cat ucode.cpio /boot/initrd.img > initrd-ucode.img
修改grub設定引數,重新啟動即可完成更新.
initrd initrd-ucode.img
更新完成
cat /proc/cpuinfo |grep "model|microcode|stepping|family" |head -n 5
cpu family : 6
model : 45
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
stepping : 7
microcode : 0x710
......
註
RHEL/CentOS 7 在系統安裝時會自動更新當前CPU microcode
, 用的是方式2&方式3共存方式, 所有CPU microcode
都包含在microcode_ctl
中:
cat /usr/lib/systemd/system/microcode.service
[Unit]
Description=Load CPU microcode update
After=basic.target
ConditionVirtualization=false
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/bash -c "echo 1 > /sys/devices/system/cpu/microcode/reload"
[Install]
WantedBy=basic.target
cpio -t < initramfs-3.10.0-327.el7.x86_64.img
.
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
early_cpio
36 blocks
其他Linux發行版未測試,相信應該也是一樣.
本文永久更新連結地址:http://www.linuxidc.com/Linux/2018-01/150225.htm
相關文章