本文最后更新: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 找到新功能对应的设置。本文接下来将介绍几种比较“稳”方法进行升级操作,分别适合新手和有一定代码基础的老手。
「特别提示」OpenCore 部分版本升级后依然提示没有升级,一般常见于 0.6.5、0.6.6、0.6.7 这三个版本,需要通过在引导界面重置 NVRAM 解决,如果你的引导界面没有 ResetNVRAM 的选项,打开以下设置:
config → Misc → Security → AllowResetNvram 勾选/True
如果你已经进入 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 的配置工具简称 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 用户可以不用看这个部分):
此类工具是 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,可以清晰的看到两个版本不同的地方:
接下来打开 Visual Studio Code,这是一款微软推出的跨平台代码编辑工具,非常好用。使用 VScode 打开你旧版本的 config.plist,定位到差异位置,根据新版本结构进行修改。
如下图,这一处就修改完成了。
其它部分根据比对结果修改你的 config.plist,完成后保存即可。
上图中部分,注意 Quirks 后面都有一个对应的布尔值<false/>或<true/>,在增减的过程中不要遗漏,否则会导致 OpenCore 无法正确读取 config 文件。
若根据此方法修改,最终你使用的还是原来的 Config.plist 文件。
第二种方法是直接在对照工具中进行修改。此方法需要有一定的代码基础,需要能自行判断代码结构。
修改完所有差异部分后,保存文件即可。这个方式虽然看起来繁琐,但实际上没有多少地方是需要修改的,懂的自然懂,能确定的是此方法不适合没有任何代码基础的新手,具体过程这里不再赘述。
上一步完成配置文件的修改后,把原来的 Config.plist 删除,新版文件修改为 Config.plist,这样配置文件就完成了。最后一步是替换新版文件。
OpenCore 的关键文件如下图所示,使用新版本替换即可:
「再次提示」OpenCore 部分版本升级后依然提示没有升级,一般常见于 0.6.5、0.6.6、0.6.7 这三个版本,需要通过在引导界面重置 NVRAM 解决,如果你的引导界面没有 ResetNVRAM 的选项,打开以下设置:
config → Misc → Security → AllowResetNvram 勾选/True
Clover 目前的情况较为复杂(因为新版本融合了 OpenCore 核心),总的来说,基本上 r5119 及以下的版本,替换以下文件(以 UEFI 版为例):
Clover r5120 — r5122 版本需要删除以下文件(以 UEFI 为例):
添加以下文件:
Clover r5123 及以上:
最后,请依次检查一遍所做的配置和替换的文件,也可通过下面这个网站验证 config.plist 文件配置正确性。
如果你足够幸运,那么上面这些都做完以后,你就可以愉快地使用新版本引导工具正常进入 macOS。但对于跑代码过程中的小伙伴,可以先恢复备份,或参考这篇文章:OpenCore 安装卡住的拯救手册Q&A。
联系客服