什么是 MSR CFG Lock 解锁?
MSR(Model Specific Register)是x86架构中的概念,指的是在x86架构处理器中,一系列用于控制CPU运行、功能开关、调试、跟踪程序执行、监测CPU性能等方面的寄存器。
大多数UEFI主板厂家,锁定了MSR寄存器的第15位为只读,也就是MSR 0xE2 Locking(BIOS 中叫CFG Lock)。苹果macOS系统的电源管理、CPU的P-state、C-state放在MSR寄存器里,MSR 0xE2被锁定为只读后,macOS系统的电源管理驱动扩展AppleIntelCPUPowerManagement一旦尝试去写入数据,系统就会马上崩溃。有些主板上有选项“CFG Lock”,其说明内容为”关闭或开启MSR 0xE2″,可以手动开关,有些主板则屏蔽了这个选项。当使用黑苹果时,必须解锁MSR 0xE2,否则无法使用苹果的原生电源管理。
联想等一些 OEM 设置了BIOS内部的变量,也就是说固化到了BIOS的固件代码里,如果不对 BIOS 进行物理修改就无法解锁它,对于这种情况,需要修改BIOS才能解锁CFG Lock。Lenovo R720-15IKBN就属于上述情况,因此要对BIOS进行修改。
刷机有风险,搞机须谨慎!失败会造成电脑变砖,没有救砖技术请不要尝试!本文仅供参考,对于读者自己造成的损坏不承担任何责任!
环境准备
- 插了稳定交流电源的Lenovo R720-15IKBN 笔记本电脑
- Windows 10,因为大部分操作都在Win环境下进行
- macOS与OpenCore
- 一个格式化文件系统为FAT32的U盘
- 安静的没有人打扰您的环境
工具准备
Lenovo 官方
4KCN27WW
版 BIOS联想官方BIOS通常具有写保护措施,而27版BIOS没有写保护因此可以进行修改,BIOS降级程序可在官网输入主机编号后寻找下载到。
下载地址:https://newsupport.lenovo.com.cn/
Intel CSME System Tools
用于Dump BIOS 固件,根据不同的平台选择不同的版本,这里选择v11 r37版。
下载地址:https://comsystem-tlt.ru/obzori/me-txe-region
UEFITool
查找BIOS中相关变量(字符串)的工具。
下载地址:https://github.com/LongSoft/UEFITool/releases
IRFExtractor
将UEFITool得到的PE32 image转换成文本的工具。
下载地址:https://github.com/LongSoft/Universal-IFR-Extractor/releases
easyUEFI或Bootice
用于修改UEFI启动项。
BIOS 降级
进入UEFI BIOS 设置,将BIOS Back Flash设为Enabled,允许BIOS回滚刷新;
重启进入Windows,运行从官网下载的27版BIOS降级程序,安装完成后系统自动重启,开始降级过程。 注意在降级过程中一定不要断开电源! BIOS刷写成功后,电脑会自动重启数次,属于正常现象,不要断电源。
刷写后可能无法进入Win系统,重新进入UEFI BIOS设置,关闭安全启动,将SATA控制器工作模式设置为AHCI,保存设置后重启就能进入系统。
提取主板BIOS
进入系统后,打开Intel CSME System Tools v11 r37/Flash Programming Tool/WIN64
,新建文本文档,输入以下代码
1 | cd /d %~dp0 |
保存后修改文件扩展名为.cmd
,右键以管理员身份运行,提取主板BIOS,提取后的文件存储在同目录下,名字为backup.fd
。
提取BIOS信息
打开UEFITool,菜单栏选择File > Open image file...
,选择上一步提取出的backup.fd
。
菜单栏选择Action > Search...
,在弹出的对话框中选择Text
,输入CFG Lock
,搜索的结果在下方显示,双击Unicode text "CFG Lock" in DriverSampleDxe/PE32 image section at header-offset 496F4h
定位到CFG
Lock所在位置。
在定位到的位置右击PE32 image section
,选择Extarct as is...
,将PE32
image文件保存。
接下来,我们需要把PE32 image转换成我们能读懂的信息。
打开IFRExtractor,直接点击右侧加载按钮,打开上一步的PE32文件,再点击Extract,就会生成txt文本,并保存到相应的文件夹。
寻找需要的偏移量
打开转换的txt文件,搜索字符串CFG Lock
,定位到CFG
Lock位置,如下所示,不同机器可能不同:
1 | 0x9B0B4 Form: View/Configure CPU Lock Options, FormId: 0x1012 {01 86 12 10 C3 00} |
其中
CFG Lock, VarStoreInfo (VarOffset/VarName): 0x3C, VarStore: 0x3
就是我们要找的。
VarStoreInfo
的值是CFG
Lock这个选项的地址,也可以说其在BIOS中的偏移量。后面的VarStore
是BIOS默认值,此处为0x3
。而我们想要解锁它就需要把它修改成0x0
,即下面对应的Disabled
Option,就是需要把0x3C
这个偏移地址上的数值修改为0x0
。
请注意,可变偏移量不仅对于每个主板是唯一的,甚至对于每个固件版本也是唯一的。所以读者应该自己寻找偏移量,切勿在不检查的情况下尝试使用本文中的偏移量。
修改BIOS偏移量
这里使用的工具是RU.efi。
打开U盘,新建EFI/BOOT/
目录,将RU.efi重命名为BOOTX64.efi
放到该目录下。
重启系统,选择从U盘启动,按任意键即可进入RU工具。
- 进入后按 alt+= 切换进 "ACPI Variable";
- 用PageUp/PageDown/上下方向键找到"CPUSetup";
- 回车进入,然后用上下左右方向键找到对应的地址(本文中是
0x3C
,那么就是纵坐标0030
,横坐标0C
的位置); - 回车,输入
0
就可以看到它变成了0,再按回车确认; - 按Ctrl +W来保存,保存的时候屏幕上会直接显示Updated OK,这说明写入成功;
- 按Alt+Q 来退出,然后即可回到引导进入系统了,此时CFG已经解锁。
检查解锁情况
通过 ControlMsrE2
检查,将OpenCore自带的Tools/ControlMsrE2.efi
加入到Config.plist配置文件中
。接下来,启动 OpenCore
并选择ControlMsrE2.efi条目。这应该会显示以下内容:
1 | This firmware has UNLOCKED MSR 0xE2 register! |
说明MSR 0xE2解锁成功。
修改OpenCore配置文件
在Kernel
Option中取消AppleCpuPmCfgLock
和AppleXcpmCfgLock
的勾选。
恭喜您完成MSR CFG Lock解锁全过程!现在您将拥有正确的 CPU 电源管理。