可以通过 /boot/config-<kernel-version>-gentoo
这个配置文件的内容来确认是否正确开启了内核特性以支持 CPU 微码更新:
$ cat /boot/config-5.15.88-gentoo | grep CONFIG_BLK_DEV_INITRD
CONFIG_BLK_DEV_INITRD=y
$ cat /boot/config-5.15.88-gentoo | grep CONFIG_MICROCODE
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
$ cat /boot/config-5.15.88-gentoo | grep CONFIG_MICROCODE_INTEL
CONFIG_MICROCODE_INTEL=y
如果配置文件丢了,决定重新编译内核,那么注意把这些功能编译进内核:
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Processor type and features --->
[*] CPU microcode loading support
[*] Intel microcode loading support
[*] AMD microcode loading support
编辑 /etc/portage/package.use/microcode 写入以下内容:
# for intel cpu microcode
sys-firmware/intel-microcode initramfs
# for amd cpu microcode
sys-kernel/linux-firmware initramfs
给这两个包都配上 initramfs 这个 USE flag 后,在更新 CPU 微码时系统会自动生成 /boot/intel-uc.img 或者 /boot/amd-uc.img 并自动重新生成对应的 initramfs。
这样以后每次微码更新时只需要执行 grub-mkconfig -o /boot/grub/grub.cfg
更新一下 grub 配置即可。
可以通过命令查一下 grub.cfg 里面是否加载了存有微码的 initramfs 文件:
$ grep initrd /boot/grub/grub.cfg
initrd /intel-uc.img /initramfs-5.15.88-gentoo.img
initrd /intel-uc.img /initramfs-5.15.88-gentoo.img
initrd /intel-uc.img /initramfs-5.15.88-gentoo.img
# 要查看匹配到的行的前后内容可以用这条命令,显示的信息更多
$ grep -B 18 -A 1 initrd /boot/grub/grub.cfg
执行 grep microcode /proc/cpuinfo
可以查看当前使用的微码版本。
AMD CPU 的微码更新通常与 sys-kernel/linux-firmware 一起分发:
emerge --ask sys-kernel/linux-firmware
Intel CPU 的微码可以在 sys-firmware/intel-microcode 包中找到,需要单独安装:
emerge --ask sys-firmware/intel-microcode
如果针对这两个包都加了 initramfs 这个 USE flag,那么系统已经自动生成了 /boot/intel-uc.img 或者 /boot/amd-uc.img 并自动重新生成对应的 initramfs 了。
如果没有配置,那么推荐配置一下然后重新安装一下上面提到的两个包。
最后执行 grub-mkconfig -o /boot/grub/grub.cfg
更新一下 grub 配置就完成了。
但如果非得要手动安装微码的话,Intel CPU 照着这篇文档操作 ,AMD CPU 照着这篇文档操作 。这两篇文档太长,而且上文已经给了解决方案了,就不在这翻译了。