Hackintosh: 给我的 XPS 13 解锁 MSR 0xE2 寄存器 (CFG Lock)
我曾经在博客水过一篇解锁 BIOS CFG Lock 的文章,本文是一篇从原博客恢复的文章。
想不到因为一块小小的 CMOS 电池引发了事故:因为懒,我搁置了更换 CMOS 电池的想法。当我换上电池,安装好笔记本后盖并开机的时候,Hackintosh 无法引导了!发觉是 BIOS 设置因为掉电而重置了。
准备工具
- OpenCore 引导工具
- DiskGenius 或 Windows 自带磁盘管理
- Flash Programming Tool 可以在 Intel CSME System Tools 中找到。需要符合自己的芯片组。例如笔者 i7-6500U 属于 Skylake,芯片组是 100 系列。
- [UEFITool][https://github.com/LongSoft/UEFITool/releases] 查找BIOS中相关变量(字串)的工具
- [IRFExtractor][https://github.com/LongSoft/Universal-IFR-Extractor/releases]
开始操作
备份和提取BIOS
首先备份本机BIOS:
FPTW64.exe -D 备份文件名.rom -bios
分析BIOS信息
用 UEFITool 找到 GUID:899407D799FE43D89A2179EC328CAC21 的内容,然后提取出来。
接下来,我们需要把该模块转换成文本信息。借助 IFRExtractor,右侧加载模块按钮,再点击 Extract,转换模块为文本,并保存到相应文件夹,如下图所示:
查找偏移量
查找 CFG Lock 项。
0x343B7 One Of: CFG lock, VarStoreInfo (VarOffset/VarName): 0x109, VarStore: 0x1, QuestionId: 0x278, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 15 01 16 01 78 02 01 00 09 01 10 10 00 01 00}
0x343C8 One Of Option: Disabled, Value (8 bit): 0x0 {09 07 21 02 00 00 00}
0x343CF One Of Option: Enabled, Value (8 bit): 0x1 (default) {09 07 20 02 30 00 01}
0x343D6 End One Of {29 02}
其中
VarStoreInfo (VarOffset/VarName): 0x109, VarStore: 0x1
就是我们要的东西。
VarStoreInfo的值是CFG Lock这个选项的地址,也可以说其在BIOS中的偏移量。后面的VarStore是BIOS默认值,为0x1。
0x1对应下面的Option里就是Enabled,意思就是CFG Lock这个选择默认被打开了,也就是说MSR 0xE2默认被锁定了。而我们想要解锁它就需要把该选择修改成0x0的Disabled,就是需要把0x109这个地址上的数值修改为0x0。
进 grub 修改
- 关机重启进入 OpenCore 启动界面,按方向键找到 shell 工具,回车进入 UEFI Shell。
- 找到 EFI 所在分区,一般为 fs0。
- 我们 cd EFI/BOOT 并引导入 GRUB。
- 键入 setup_var 0×109,回车(后面的0×109是刚才前面提取的数值)。
- 看到 offset: 0×109 is:0×01,表示未解锁。
- 输入 setup_var 0x109 0×00。设置完成。