概述

随着 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 找到新功能对应的设置。本文接下来将介绍几种比较“稳”方法进行升级操作,分别适合新手和有一定代码基础的老手。

  • 方案一:感谢 ic005k 开发的 OCAuxiliaryTools,现在新手也可以一键升级 OpenCore 了!(2022 年 4 月)
  • 方案二:下载新版引导器,使用编辑工具(如 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 文件夹拷贝到桌面,修改后再拷贝回原来的位置(没有配图,实在不明白请自行百度一下)。

方案一:OCAuxiliaryTools 智能版本匹配

OCAuxiliaryTools(缩写 OCAT,原名 QtOpenCoreConfig)是一款开源软件,是国人开发的 OpenCore 配置工具中的后起之秀。

在它更新出 OpenCore 智能版本匹配功能之前,它和 OpenCore Configurator 是基本一样的,每个软件版本对应一个 OpenCore 版本,但是自20220202 版本开始,修改了支持 OpenCore 版本方式,简单来说,就是无论你现有的 OpenCore 是什么版本,它都可以帮你快速升级(或匹配到)指定的版本。

这种思路更加科学,不再是一个软件版本只能对应一个 OpenCore 版本,现在把 OpenCore 升级更新的大部分工作都交给了 OCAuxiliaryTools 来处理,对新手和小白们更加友好。

这里简单说一下 OCAT 新的 OpenCore 版本匹配方法,也就是使用 OCAuxiliaryTools 升级 OpenCore 的方法。

第1步:使用OCAT加载config文件,并获取OpenCore版本
第2步:获取OpenCore版本后,同步即可
第3步:更新完OpenCore后,查看config验证器
最后,OpenCore版本同步和config内容匹配完成

方案二:复刻法

复刻法具体来说,需要根据你准备使用的工具来划分,一种是图形化配置工具,例如 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,直接保存退出即可。如果使用代码工具打开保存后的文件,你会发现其结构已经几乎和新版无异。如何确认配置工具支持的版本?

在软件的“关于”菜单中会提到支持的版本。这是笔者在星球交流群内注意到有小伙伴提出来的方法,简单直接,但是笔者经实测,在版本跨度较小的情况下可以,例如测试过 OpenCore 0.6.1 升级到 0.6.2 使用此方法没有任何问题。

但是版本跨度比较大的时候,比如 OpenCore 0.6.1 升级到 0.7.4,此方法就可能会出问题,因为二者文件树变化太大且有一部分变更不完全只是增加了键(key)和值(value),因此版本跨度太大建议使用其他方法操作。

方法二,分别打开新版和旧版的配置文件,手动对照复刻选项,如下图:

如图,把每一个区域的选项和挂载的文件以及对应的设置内容逐一复制到新的文件里,注意不要遗漏任何选项。

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 版本。很容易找到下载地址,这里就不贴了。

当前内容被隐藏,登陆后查看

已有161145次阅读 登录后查看

首先运行 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:如果使用了官方主题服务,则需要替换
  • /EFI/OC/Driver/ 目录下的其它文件按需替换即可;

「再次提示」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/UEFI/AptioMemoryFix.efi
  • /EFI/Clover/drivers/UEFI/OsxLowMemFixDrv.efi
  • /EFI/Clover/drivers/UEFI/OsxAptioFixDrv.efi
  • /EFI/Clover/drivers/UEFI/OsxAptioFix2Drv.efi
  • /EFI/Clover/drivers/UEFI/OsxAptioFix3Drv.efi
  • /EFI/Clover/drivers/UEFI/OsxAptioFix2Drv-free2000.efi
  • /EFI/Clover/drivers/UEFI/MemoryAllocation.efi

添加以下文件:

  • /EFI/Clover/drivers/UEFI/OcQuirks.efi

Clover r5123 及以上:

  • 由于正式集成了 OpenCore 的核心,因此不再需要 OcQuirks.efi ,如果有请删除;
  • r5123 及以上需要单独设置 Quirks 区域选项,这个部分是 OpenCore 的功能,可参考 Clover 发行文档中的样本来进行设置;
  • r5140 及以上版本需要在 /EFI/Clover/drivers/UEFI/ 加入 OpenRuntime.efi ,这是 OpenCore 的组件之一。

最终检查

最后,请依次检查一遍所做的配置和替换的文件,也可通过下面这个网站验证 config.plist 文件配置正确性。

如果你足够幸运,那么上面这些都做完以后,你就可以愉快地使用新版本引导工具正常进入 macOS。但对于跑代码过程中的小伙伴,可以先恢复备份,或参考这篇文章:OpenCore 安装卡住的拯救手册Q&A

最后修改日期: 2023年12月24日