文章目录[隐藏]
利用CFGLOCK.efi
解锁MSR 0xE2
当我们利用OpenCore
引导器安装macOS
的时候,如果卡在了EndRandomSeed
或者#LOG:EXITBS:START
,那么大概率就是BIOS
未禁用CFG LOCK
锁导致的错误。
什么是CFG LOCK
CFG-Lock是BIOS中的一项设置,允许写入特定的寄存器(在本例中为MSR 0xE2
)。默认情况下,大多数主板会锁定此变量,其中许多厂商甚至将选项直接隐藏在GUI中。而且,我们关心它的原因是macOS实际上要写入此变量,而不仅仅是macOS的一部分。包括内核和AppleIntelPowerManagement。它定义了CPU的电源状态(C-States
),这就是为什么它对于macOS必不可少的原因。如果没有写入MSR 0xE2
的能力,则将丢失所有或大部分CPU电源管理,并且系统无法启动。
在Clover
中使用了2个补丁:KernelPM
(针于AppleIntelPowerManagement.kext
)和KernelXCPM
(针于内核)。
在OpenCore
中,使用了其他名称:AppleCpuPmCfgLock
(针对AppleIntelPowerManagement.kext
)和AppleXcpmCfgLock
(针对内核)。这些修补程序解决了该问题,但是注册表仍然是只读的。为了确保本机CPU电源管理,CFG锁定位必须设置为0x0
。
为此,必须修改固件以支持写入MSR 0xE2
。与Clover
和OpenCore
修补程序相比,此方法更为可取,它可产生更大的系统稳定性,并且CPU电源管理与真实Mac更加相似。对于大多数不具备较高知识水平,需要专门工具甚至经过修改的grub
的用户而言,通常为该任务建议的方法过于复杂。
CFGLock.efi
的正确插入姿势
有一个名为CFGLock.efi
的工具。这是一个EFI应用程序,它必须被安装在EFI/OC/TOOLS
目录下,同时它应该与OC软件包中包括的另一个工具VerifyEsrE2.efi
一起使用,该工具报告CFG Lock
的当前状态(锁定(locked)/解锁(unlocked)
)。
运行CFGLock.ef
i时,它会显示信息(找到CFG变量,它所在的varstore,当前读数并请求用户干预以将其从0x1更改为0x0,反之亦然)。然后,您必须重新启动。使用VerifyMsrE2.efi
,我们可以检查更改是否成功。
可以通过直接在OC菜单中选择它们来运行这两个EFI应用程序,但是也可以通过安装OpenShell.efi
工具来运行此Shell并从那里运行它们。OC和其他地方提供了有关处理OpenShell.efi
的信息。更多的
- 获取
CFGLOCK.efi
- 将
CFGLock.efi
复制到EFI/OC/TOOLS
目录下 - 在配置文件
config.plist
中引入CFGLock.efi
和VerifyEsrE2.efi
- 重启,在
OpenCore
引导界面按空格
键选择CFGLock
,回车 OpenCore
会自动载入CFGLock.efi
并执行,它会自动找到CFG Lock
的参数,本例中为:Offset: 0043
,值为1
,输入y
回车,它会将值修改为0
- 重启后,选择
VerifyMsrE2
,查看CFG LOCK
的状态 - 最后一行显示
This firmware has UNLOCKED MSR 0xE2 register!
,即为解锁状态 - 请于配置文件
config.plist
中取消勾选AppleCpuCfgLock
和AppleXcpmCfgLock
- 收工
注意事项
在执行过Reset NVRAM
动作后可能需要重新执行上述操作,或通过VerifyMsrE2
,查看CFG LOCK
的状态