黑苹果如何升级OpenCore/Clover引导工具?
黑苹果如何升级OpenCore/Clover引导工具?
随着OpenCore逐渐进入稳定更新周期(大约每月一个新版本),很多从各处拿到EFI文件并成功安装了黑苹果的用户开始发愁一个问题,就是怎么样升级引导工具。本文将详细介绍几种升级方法,分别适合新手和有一定代码基础的用户。
概述
升级这个操作其实挺简单,但难倒了一片小白同学。全部操作就是替换新版文件和修改config。替换新版文件比较简单,麻烦的是修改config.plist文件。其实无论是OpenCore或Clover,其核心设置都是储存在config.plist这个文件中的。config.plist并没有多神秘,其本质上其实是一个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月)
- 方案二:下载新版引导器,使用编辑工具(如OpenCoreConfigurator、ProperTree、PlistEditPro等)对新版的Sample.plist进行选项的复刻;
- 方案三,下载新版和旧版,使用代码对比工具比较两个版本的不同之处,再对正在使用的config.plist进行内容结构修改。
「特别提示」OpenCore部分版本升级后依然提示没有升级,一般常见于0.6.5、0.6.6、0.6.7这三个版本,需要通过在引导界面重置NVRAM解决,如果你的引导界面没有ResetNVRAM的选项,打开以下设置:
config → Misc → Security → AllowResetNvram勾选/True
挂载EFI分区
如果你已经进入macOS,可以使用Clover/OpenCoreConfigurator一样的挂载EFI分区步骤,OpenCoreConfigurator:
下图是CloverConfigurator:
如果你不愿意使用配置工具,可在终端使用下面的命令:
diskutil list
sudo diskutil mount disk1s1
每次执行一个命令,其中disk1s1需要根据你实际情况填写,一般情况下,当前系统的EFI分区是disk1s1。
如果你还在Windows,打开EFI文件夹,找到config.plist,使用代码编辑工具打开即可;如果你的EFI文件在U盘里,可使用Diskgenuis等软件将EFI文件夹拷贝到桌面,修改后再拷贝回原来的位置(没有配图,实在不明白请自行百度一下)。
方案一:OCAuxiliaryTools智能版本匹配
OCAuxiliaryTools(缩写OCAT,原名QtOpenCoreConfig)是一款开源软件,是国人开发的OpenCore配置工具中的后起之秀。
在它更新出OpenCore智能版本匹配功能之前,它和OpenCoreConfigurator是基本一样的,每个软件版本对应一个OpenCore版本,但是自20220202版本开始,修改了支持OpenCore版本方式,简单来说,就是无论你现有的OpenCore是什么版本,它都可以帮你快速升级(或匹配到)指定的版本。
这种思路更加科学,不再是一个软件版本只能对应一个OpenCore版本,现在把OpenCore升级更新的大部分工作都交给了OCAuxiliaryTools来处理,对新手和小白们更加友好。
这里简单说一下OCAT新的OpenCore版本匹配方法,也就是使用OCAuxiliaryTools升级OpenCore的方法。
第1步:使用OCAT加载config文件,并获取OpenCore版本
第2步:获取OpenCore版本后,同步即可
第3步:更新完OpenCore后,查看config验证器
最后,OpenCore版本同步和config内容匹配完成
方案二:复刻法
复刻法具体来说,需要根据你准备使用的工具来划分,一种是图形化配置工具,例如OpenCoreConfigurator;另一种是传统的Plist编辑工具,例如ProperTree。当每个新版本OpenCore和Clover发布时,开发团队一般都会提供一个Sample.plist,OpenCore一般位于/doc/文件夹内;Clover一般位于/EFI/Clover/,这个文件就是我们EFI文件夹内的config.plist的原型,把它拷贝到你的efi文件夹中即可进行修改操作,下面将分别进行操作演示。
OpenCore/CloverConfigurator
对应OpenCore的配置工具简称OCC,对应Clover的配置工具简称CC,是一个让人又爱又恨的东西。用它吧,新版出来的时候经常掉链子它自己的bug就能给你捣不少乱;不用吧,一键生成各类设置确实相当方便,就便利性而言确实秒杀其它现有工具。是否使用,各位见仁见智,只强调一点,修改config.plist前务必注意备份!
方法一,直接使用支持新版的Configurator保存一遍旧版config.plist。是的就是这么简单,就是使用支持新版本的配置器,打开你的旧版config.plist,直接保存退出即可。如果使用代码工具打开保存后的文件,你会发现其结构已经几乎和新版无异。如何确认配置工具支持的版本?
在软件的“关于”菜单中会提到支持的版本。这是笔者在星球交流群内注意到有小伙伴提出来的方法,简单直接,但是笔者经实测,在版本跨度较小的情况下可以,例如测试过OpenCore0.6.1升级到0.6.2使用此方法没有任何问题。
但是版本跨度比较大的时候,比如OpenCore0.6.1升级到0.7.4,此方法就可能会出问题,因为二者文件树变化太大且有一部分变更不完全只是增加了键(key)和值(value),因此版本跨度太大建议使用其他方法操作。
方法二,分别打开新版和旧版的配置文件,手动对照复刻选项,如下图:
如图,把每一个区域的选项和挂载的文件以及对应的设置内容逐一复制到新的文件里,注意不要遗漏任何选项。
Clover也是一样的操作,需要注意的是Cloverr5120以上版本集成了OcQuirks,r5125及以上进一步扩展了其对应的选项,r5120以下版本到以上会是一个比较大的改动,这里简单梳理一下(OpenCore用户可以不用看这个部分):
- r5120以下版本主要使用AptioMemoryFix.efi来修复内存问题,但是以上被替换成了OcQuirks.efi,新增了Quirks这一区域内容;
- 因上面的原因,从r5120以下版本升级,需要先删除内存修复驱动,并参照OpenCore官方说明进行Quirks的设置(没错,现在是OpenClover了😂),如果升级到r5125及以上版本时,Clover官方在doc里提供了一个Quirks设置样本可以参考。
ProperTree/PlistEditPro
「注意」此方法非常繁琐,除非是小版本更新或特殊需求,否则不推荐
此类工具是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,请务必做好备份。
这里需要用到一个代码对比工具:BeyondCompare。这是一个跨平台对比工具,可以对比多种文件/文件夹,有Windows/macOS/Linux版本。很容易找到下载地址,这里就不贴了。
已有437058次阅读
首先运行BeyondCompare,这里有两种思路,其一是新版sample.plist和旧版的sample.plist进行对比,因为如果是sample.plist和config.plist对比,不一样的地方会特别多,不熟悉代码的人很容易弄错;其二是sample.plist直接和config.plist进行对比,因为可以直接在差异可视化的情况下进行修改替换内容。
Sample.plist对照
那么先说说第一种思路的实践方式,首先打开两个版本的sample.plist,可以清晰的看到两个版本不同的地方:
接下来打开VisualStudioCode,这是一款微软推出的跨平台代码编辑工具,非常好用。使用VScode打开你旧版本的config.plist,定位到差异位置,根据新版本结构进行修改。
如下图,这一处就修改完成了。
其它部分根据比对结果修改你的config.plist,完成后保存即可。
上图中部分,注意Quirks后面都有一个对应的布尔值
若根据此方法修改,最终你使用的还是原来的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
Cloverr5120—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
Cloverr5123及以上:
- 由于正式集成了OpenCore的核心,因此不再需要OcQuirks.efi,如果有请删除;
- r5123及以上需要单独设置Quirks区域选项,这个部分是OpenCore的功能,可参考Clover发行文档中的样本来进行设置;
- r5140及以上版本需要在/EFI/Clover/drivers/UEFI/加入OpenRuntime.efi,这是OpenCore的组件之一。
最终检查
最后,请依次检查一遍所做的配置和替换的文件,也可通过下面这个网站验证config.plist文件配置正确性。
如果你足够幸运,那么上面这些都做完以后,你就可以愉快地使用新版本引导工具正常进入macOS。但对于跑代码过程中的小伙伴,可以先恢复备份,或参考这篇文章:OpenCore安装卡住的拯救手册Q&A。