Linux更新microcode之后黑屏,Linux 更新 CPU microcode

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在初始化后,加载混合了microcodecpio与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*

方法一

使用 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发行版未测试,相信应该也是一样.

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值