⿊苹果如何升级OpenCoreClover引导⼯具?概述
本⽂最后更新:2021/6/13
随着 OpenCore 逐渐进⼊稳定更新周期(⼤约每⽉⼀个新版本),很多从各处拿到 EFI ⽂件并
成功安装了⿊苹果的精神⼩伙们开始发愁⼀个问题,就是怎么样升级引导⼯具。
升级这个操作其实挺简单,但难倒了⼀⽚⼩⽩同学。全部操作就是替换新版⽂件和修改
config。替换新版⽂件⽐较简单,⿇烦的是修改 config ⽂件。其实⽆论是 OpenCore 或
Clover,其核⼼设置都是储存在 config.plist 这个⽂件中的。笔者在过往的⽂章⾥提到
过,config.plist 并没有多神秘,其本质上其实是⼀个 XML ⽂件,任意⼀个专业的代码编辑器都
可以操作它。它拥有 XML 的所有基本特征,内容上主要就是使⽤标签的树状结构,XML 基础知
识可以参阅这个⽹站,只需了解⼀点基础即可。
config.plist 在 OpenCore 和 Clover 中主要作⽤是储存各项设置的内容,当 OpenCore 和 Clover
升级时,其开发团队会通过修改 config.plist 的⽂件结构,增减功能区或对应的选项,以⽀持新
版本扩展出来的功能。也正因为如此,当你替换了引导⼯具主⽂件⽽没有升级 config.plist 后,
常会见到类似下⾯的错误:
OCS: No schema for EnableForAll at 0 index, context <Quirks>!
OCS: No schema for EnableForAll at 5 index, contextr <Quirks>!
OCS: No schema for DummyPowerManagement at 8 index, context <Quirks>!
OCS: No schema for SkipCustomEtryCheck at 8 index, context <Boot>!
全选
复制
当理解了 config.plist ⽂件后,再来看这个错误,其原因就⾮常容易理解:新版本引导⼯具拥有
新的功能,但是没有在 config.plist 到新功能对应的设置。本⽂接下来将介绍⼏种⽐较“稳”⽅法
xml文件怎么打开
进⾏升级操作,分别适合新⼿和有⼀定代码基础的⽼⼿。
⽅案⼀:下载新版引导器,使⽤编辑⼯具(如 OpenCore Configurator、ProperTree、PlistEdit Pro 等)对新版的 Sample.plist 进⾏选项的复刻;
⽅案⼆,下载新版和旧版,使⽤代码对⽐⼯具⽐较两个版本的不同之处,再对正在使⽤的config.plist 进⾏内容结构修改。
「特别提⽰」OpenCore 部分版本升级后依然提⽰没有升级,⼀般常见于 0.6.5、0.6.6、0.6.7
这三个版本,需要通过在引导界⾯重置 NVRAM 解决,如果你的引导界⾯没有 ResetNVRAM
的选项,打开以下设置:
config → Misc → Security → AllowResetNvram 勾选/True
全选
复制
挂载 EFI 分区
如果你已经进⼊ macOS,可以使⽤ Clover/OpenCore Configurator ⼀样的挂载 EFI 分区步
骤,OpenCore Configurator:
下图是 Clover Configurator:
如果你不愿意使⽤配置⼯具,可在终端使⽤下⾯的命令:
diskutil list
sudo diskutil mount disk1s1
全选
复制
每次执⾏⼀个命令,其中 disk1s1需要根据你实际情况填写,⼀般情况下,当前系统的 EFI 分区是 disk1s1。
如果你还在 Windows,打开 EFI ⽂件夹,到 config.plist,使⽤代码编辑⼯具打开即可;如果你的 EFI ⽂件在 U 盘⾥,可使⽤ Diskgenuis 等软件将 EFI ⽂件夹拷贝到桌⾯,修改后再拷贝回原来的位置
(没有配图,实在不明⽩请⾃⾏百度⼀下)。
⽅案⼀:复刻法
复刻法具体来说,需要根据你准备使⽤的⼯具来划分,⼀种是图形化配置⼯具,例如 OpenCore Configurator;另⼀种是传统的 Plist 编辑⼯具,例如 ProperTree。当每个新版本 OpenCore 和Clover 发布时,开发团队⼀般都会提供⼀个 Sample.plist,OpenCore ⼀般位于 /doc/ ⽂件夹内;Clover ⼀般位于 /EFI/Clover/,这个⽂件就是我们 EFI ⽂件夹内的 config.plist 的原型,把它拷贝到你的 efi ⽂件夹中即可进⾏修改操作,下⾯将分别进⾏操作演⽰。
OpenCore/Clover Configurator
对应 OpenCore 的配置⼯具简称 OCC,对应 Clover 的配置⼯具简称 CC,是⼀个让⼈⼜爱⼜恨的东西。⽤它吧,新版出来的时候经常掉链⼦它⾃⼰的 bug 就能给你捣不少乱;不⽤吧,⼀键⽣成各类设置确实相当⽅便,就便利性⽽⾔确实秒杀其它现有⼯具。是否使⽤,各位见仁见智,只强调⼀点,修改 config.plist 前务必注意备份!
⽅法⼀,直接使⽤⽀持新版的 Configurator 保存⼀遍旧版 config.plist。是的就是这么简单,就是使⽤⽀持新版本的配置器,打开你的旧版 config.plist,直接保存退出即可。如果使⽤代码⼯具打开保存后的⽂件,你会发现其结构已经⼏乎和新版⽆异。如何确认配置⼯具⽀持的版本?⽐如这⾥:
或者配置在“关于”菜单中也会提到⽀持的版本。这是笔者在星球交流内注意到有⼩伙伴提出来的⽅法,简单暴⼒,但是笔者经实测,并不能 100% 解决所有问题,但在版本跨度较⼩的情况下可以,例如笔者测试过 OpenCore 0.6.1 升级到 0.6.2 使⽤此⽅法基本没有问题。但是版本跨度⽐较⼤的时候,⽐如 OpenCore 0.5.5 升级到 0.6.2,此⽅法就⾮常容易出问题了,版本跨度太⼤建议使⽤其他⽅法操作。
⽅法⼆,分别打开新版和旧版的配置⽂件,⼿动对照复刻选项,如下图:
如图,把每⼀个区域的选项和挂载的⽂件以及对应的设置内容逐⼀复制到新的⽂件⾥,注意不要遗漏任何选项。
Clover 也是⼀样的操作,需要注意的是 Clover r5120 以上版本集成了 OcQuirks,r5125 及以上进⼀步扩展了其对应的选项,r5120 以下版本到以上会是⼀个⽐较⼤的改动,这⾥简单梳理⼀下(OpenCore ⽤户可以不⽤看这个部分):
r5120 以下版本主要使⽤ AptioMemoryFix.efi 来修复内存问题,但是以上被替换成了OcQuirks.efi,新增了 Quirks 这⼀区域内容;
因上⾯的原因,从 r5120 以下版本升级,需要先删除内存修复驱动,并参照 OpenCore 官⽅说明进⾏ Quirks 的设置(没错,现在是 OpenClover 了 ),如果升级到 r5125 及以上版本
时,Clover 官⽅在 doc ⾥提供了⼀个 Quirks 设置样本可以参考。
ProperTree/PlistEdit Pro
此类⼯具是 Plist 的专⽤编辑⼯具,好处是不容易出现编辑导致的错误,劣势嘛也很明显,不如上⾯的配置⼯具来的⽅便。
具体操作流程来说,⼀共有两个步骤,第⼀是批量复制 add 区域的内容,例如 acpi 下的各个ssdt ⽂件,以及 Kernel 下的各个 Kext,如图:
上图中,红⾊代表需要删除,蓝⾊代表可以批量复制粘贴,绿⾊是⼀般机型⽤不到的,但是如果你的旧版 config.plist ⾥有就必须复制过去;其余未提及的部分请逐个检查 + 复刻值(例如Quirks 部分)。⾄于如何批量复制粘贴?见下图:
以 ACPI 区域下的 SSDT 表为例,打开新版⽂件,到 ACPI → Add,右键删除(Remove)整个 Add 区。
打开旧版⽂件,到 ACPI → Add,右键复制(Copy)整个 Add 区。
在新版⽂件中,到 ACPI(因为这是之前 Add 区的⽗节点),选中,右键并粘贴(Paste)整个 Add 区。
最后可以拖动最右侧滑块调整区域顺序。
其⼆,就其它设置⽅⾯,例如 Kernel → Quirks,照着你的旧版的⽂件抄设置即可。注意 Kernel 这个部分其实是最近⼏个版本变化⽐较多的地⽅,例如 0.6.1 升级到 0.6.2 就把DummyPowerManagement 挪到了别的地⽅,这种情况,如果你⽤不到这个 Quirk 还好,需要⽤的话,那就需要去看官⽅的说明⽂档啦。
⽅案⼆:对照法
此⽅法适合有⼀定代码基础的⼩伙伴,⼿法熟练的话效率⾮常⾼,但完全没有任何代码基础和悟性的新⼿请勿轻易尝试,很容易弄坏你的 config.plist,请务必做好备份。
这⾥需要⽤到⼀个代码对⽐⼯具:Beyond Compare。这是⼀个跨平台对⽐⼯具,可以对⽐多种⽂件/⽂件夹,有 Windows/macOS/Linux 版本。很容易到下载地址,这⾥就不贴了。
当前内容被隐藏,登陆后查看
已有35674次阅读
⾸先运⾏ BeyondCompare,这⾥有两种思路,其⼀是新版 sample.plist 和旧版的 sample.plist
进⾏对⽐,因为如果是 sample.plist 和 config.plist 对⽐,不⼀样的地⽅会特别多,不熟悉代码的⼈很容易弄错;其⼆是 sample.plist 直接和 config.plist 进⾏对⽐,因为可以直接在差异可视化的情况下进⾏修改替换内容。
Sample.plist 对照
那么先说说第⼀种思路的实践⽅式,⾸先打开两个版本的 sample.plist,可以清晰的看到两个版本不同的地⽅:
接下来打开 Visual Studio Code,这是⼀款微软推出的跨平台代码编辑⼯具,⾮常好⽤。使⽤VScode 打开你旧版本的 config.plist,定位到差异位置,根据新版本结构进⾏修改。
如下图,这⼀处就修改完成了。
其它部分根据⽐对结果修改你的 config.plist,完成后保存即可。
上图中部分,注意 Quirks 后⾯都有⼀个对应的布尔值<false/>或<true/>,在增减的过程中不要遗漏,否则会导致 OpenCore ⽆法正确读取 config ⽂件。
若根据此⽅法修改,最终你使⽤的还是原来的 Config.plist ⽂件。
Config.plist 对照
第⼆种⽅法是直接在对照⼯具中进⾏修改。此⽅法需要有⼀定的代码基础,需要能⾃⾏判断代码结构。
修改完所有差异部分后,保存⽂件即可。这个⽅式虽然看起来繁琐,但实际上没有多少地⽅是需要修改的,懂的⾃然懂,能确定的是此⽅法不适合没有任何代码基础的新⼿,具体过程这⾥不再赘述。
替换引导⼯具⽂件
上⼀步完成配置⽂件的修改后,把原来的 Config.plist 删除,新版⽂件修改为 Config.plist,这样配置⽂件就完成了。最后⼀步是替换新版⽂件。
OpenCore
OpenCore 的关键⽂件如下图所⽰,使⽤新版本替换即可:
/EFI/BOOT/BOOTx64.efi:OpenCore 的引导⽂件,必须替换
/EFI/OC/Driver/OpenRuntime:OpenCore 的功能库,必须替换
/
EFI/OC/Bootstrap/Bootstrap.efi:如果使⽤了 Bootstrap,则需要替换
「提⽰」OpenCore ⾃ 0.6.6 版本开始删除了 Bootstrap,如果之前你使⽤了 Bootstrap,需要先在 config 中关闭,重启计算机并重置 NVRAM,最后再升级 OC ⽂件
/EFI/OC/Driver/AudioDxe.efi:如果使⽤了开机声⾳,则需要替换
/EFI/OC/Driver/OpenCanopy:如果使⽤了官⽅主题服务,则需要替换
「再次提⽰」OpenCore 部分版本升级后依然提⽰没有升级,⼀般常见于 0.6.5、0.6.6、0.6.7这三个版本,需要通过在引导界⾯重置 NVRAM 解决,如果你的引导界⾯没有 ResetNVRAM 的选项,打开以下设置:
config → Misc → Security → AllowResetNvram 勾选/True
全选
复制
Clover
Clover ⽬前的情况较为复杂(因为新版本融合了 OpenCore 核⼼),总的来说,基本上 r5119及以下的版本,替换以下⽂件(以 UEFI 版为例):
/EFI/BOOT/Bootx64.efi
/EFI/Clover/CLOVERX64.efi
/EFI/Clover/drivers/AudioDxe.efi
/EFI/Clover/drivers/FSInject.efi
Clover r5120 — r5122 版本需要删除以下⽂件(以 UEFI 为例):
/EFI/Clover/drivers/AptioMemoryFix.efi
/EFI/Clover/drivers/OsxLowMemFixDrv.efi
/EFI/Clover/drivers/OsxAptioFixDrv.efi
/EFI/Clover/drivers/OsxAptioFix2Drv.efi
/EFI/Clover/drivers/OsxAptioFix3Drv.efi
/EFI/Clover/drivers/OsxAptioFix2Drv-free2000.efi
/EFI/Clover/drivers/MemoryAllocation.efi
添加以下⽂件:
/EFI/Clover/drivers/OcQuirks.efi
Clover r5123 及以上:
由于正式集成了 OpenCore 的核⼼,因此不再需要 OcQuirks.efi ,如果有请删除;
r5123 及以上需要单独设置 Quirks 区域选项,这个部分是 OpenCore 的功能,可参考 Clover 发⾏⽂档中的样本来进⾏设置。
最终检查
最后,请依次检查⼀遍所做的配置和替换的⽂件,也可通过下⾯这个⽹站验证 config.plist ⽂件配置正确性。
opencore.slowgeek
⼀般来说⽀持 OpenCore 最新版本。
如果你⾜够幸运,那么上⾯这些都做完以后,你就可以愉快地使⽤新版本引导⼯具正常进⼊macOS。但对于跑代码过程中的⼩伙伴,可以先恢复备份,或参考这篇⽂章:OpenCore 安装卡住的拯救⼿册Q&A。