OpenCore 介绍 黑苹果OC引导下载简单讲解使用说明

什么是 OpenCore

众所周知,黑苹果的安装离不开引导工具,比如过去的变色龙,现在的主流四叶草 Clover引导工具,OpenCore也是一个引导工具,简称OC引导.

优点有很多,开源,功能更强大系统也更稳定等等。

OpenCore 是一个着眼于未来开源引导工具, 最初诞生于 HermitCrabs 实验室, 现在被 Acidanthera 接手了。

Acidanthera  https://github.com/acidanthera

其目的是创造一个更加严谨的模组化的轻量引导系统。尽管 OpenCore 的主要用途是黑苹果, 它也支持其它操作系统的引导。

现在还暂时算是处于测试阶段,但是已经可以开始尝试使用了。

未来的主流引导工具应该是OC引导,如果你喜欢研究这些,可以尝试一下,给未来做点小贡献。不过如果你的黑苹果是主要生产力工具,有稳定系统的情况下,就别轻易尝试了。

OpenCore(OC)作为一种新的引导方式,随着越来越多的kexts开始放弃Clover, 我相信提早使用OC会对你未来使用黑苹果会有很大的帮助。

这是一个自然的现象,就像变色龙被Clover淘汰,而现在OC代替Clover也是大势所趋。

OpenCore 的优点

1.OpenCore 启动黑苹果 (尤其是 macOS 10.15) 会比 Clover 快不少

2.OpenCore 提供强大的排错功能和详细的日志

3.OpenCore 更加注重系统的安全性同时对文件保险箱 (FileVault) 有更强大的支持

4.OpenCore 支持基于 boot.efi 的原生开机快捷键支持

—-按住 Option 或 ESC 来选择启动项
—-按住 Command + R 来进入恢复模式
—-按住 Command + Option + P + R 来重置 NVRAM

5.OpenCore 使用更加先进的方法注入内核扩展 (Kext) 且与此同时不会破坏系统完整性保护。

6.OpenCore 通过读取启动磁盘设置的 NVRAM 变量, 可以像白苹果一样支持在设置的启动磁盘切换默认引导项

7.支持给其它 .efi 驱动或引导工具加入参数

8.如下 .efi 驱动被合并入 OpenCore, 未来的开发直接与 OpenCore 绑定, 且不再支持 Clover

—-AptioMemoryFix 已经被合并入 OpenCore 并将未合并的模组更名为 FwRuntimeVariable.efi, 提供更多可按需求定制 Slide 值计算的 Quirk
—-AppleGenericInput (原来的 AptioInputFix) 为了提高兼容性和 ALT / Command 键的对调即将合并入 OpenCore 并增加更多的 Quirk
—-AppleUiSupport 为了提供更好的 FileVault 体验, 已合并入 OpenCore 并增加了更多的 Quirk
—-ApfsDriverLoader 计划在未来合并苹果最新的 APFS 驱动源码并支持 Fusion Drive, 有可能并入 OpenCore

9.从 2019 年 9 月以后, Acidanthera 开发的内核驱动 (Lilu, AppleALC 等等) 不再会在 Clover 上做兼容性测试

OpenCore 准备阶段

建议准备的文件 OpenCorePkg,MacInfoPkg,Hackintool ,AppleSupportPkg,MaciASL,IORegistryExplorer,Xcode,OC-little,ProperTree

Acidanthera OpenCore Pkg 官方下载 https://github.com/acidanthera/OpenCorePkg/releases

williambj1 编译的 OpenCore Pkg 下载版 https://github.com/williambj1/OpenCore-Factory/releases

OpenCore Pkg 网盘下载  https://www.loadream.net/bootloader/opencore/

MacInfoPkg 官方下载 https://github.com/acidanthera/MacInfoPkg/releases

MacInfoPkg 网盘下载 https://www.loadream.net/hackintosh/tools/

Hackintool 官方下载 http://headsoft.com.au/download/mac/Hackintool.zip

Hackintool 网盘下载 https://www.loadream.net/hackintosh/tools/

AppleSupportPkg 官方下载 https://github.com/acidanthera/AppleSupportPkg/releases

AppleSupportPkg 网盘下载 https://www.loadream.net/hackintosh/tools/

MaciASL 下载  https://www.loadream.net/hackintosh/tools/

IORegistryExplorer 下载 https://www.loadream.net/hackintosh/tools/

Xcode 下载 https://www.loadream.net/resources/application/xcode/

OC-little 下载 https://github.com/daliansky/OC-little

ProperTree 下载和使用  https://www.loadream.net/course/common/propertree-oc/

配置 OpenCore

推荐先把主板BIOS更新到最新版,再继续进行BIOS设置

英文 中文解释 设置状态
Fast Boot 快速启动 关闭
CFG Lock (MSR 0xE2 write protection) CFG 锁 (MSR 0xE2 写入保护) 关闭
VT-d 芯片组虚拟技术 关闭
CSM 兼容性支持模块 关闭
VT-x 处理器,内存组虚拟技术 开启
Above 4G decoding 大于 4G 地址空间解码 开启
Hyper Threading 处理器超线程 开启
Execute Disable Bit 执行禁止位 开启
EHCI/XHCI Hand-off 接手 EHCI/XHCI 控制 开启
OS type: other types 操作系统类型: 其他 开启

OpenCore 官方文档

Github Doc    https://github.com/acidanthera/OpenCorePkg/tree/master/Docs

Configuration.pdf   官方的说明文档PDF,想详细了解OC引导参数,这个肯定是要看的

SampleFull.plist  是一个完整版的 Config.plist 配置文件的示例,可以看一下支持的所有的命令和样式

Kexts.md     是各个驱动文件的说明文件

OpenCore  的配置文件也叫Config.plist, 请记住 OpenCore 中的 Config.plist, 与 四叶草Clover 的 Config.plist 尽管名称相同但是内容和结构完全不同,它们不能混合滥用。

OpenCore 的EFI引导文件正确文件夹结构如下:

有一些驱动文件肯定是必须要放进去的,比如AppleSupportPkg 和 VirtualSMC 中必需的 .efi 驱动程序放入 drivers 文件夹,将 Kext 和 DSDT / SSDT 放入各自的文件夹中。

请注意, OpenCore 不支持支持列表以外的 UEFI 驱动程序,具体列表依然推荐看一下上面的官方文档。

放完必须的文件后结构

再接下来要说的,就是每个文件夹可以放那些驱动文件或者efi文件,以及每个驱动文件的作用,以及 Config.plist 中的每个命令的解释和参数设置。

Config.plist  文件说明

可以先去上面的那个官方文档doc里面,下载 Sample.plist 或者 SampleFull.plist 看一下,可以先从前面的简单的入手。

如果你英文够好,看一下上面的说明文档里面的pdf,kext.md,以及这两个列表文件,基本也就了解差不多了。

现在很多黑苹果系统DMG镜像已经开始内置OC引导文件了,虽然不是主力,不过仍然可以参考看一下,具体就是下载带OC引导的DMG,然后烧录U盘后,打开EFI分区看一下。

Config.plist 常见的配置项

ACPI 用于加载, 屏蔽和修补 ACPI (DSDT, SSDT) 表
Booter 用于设置 FwRuntimeServices.efi (Slide 值计算, KASLR)
DeviceProperties 用于设置 PCI 设备属性, 如英特尔缓冲帧补丁, 声卡 Layout ID
Kernel 用于说明 OpenCore 的具体加密信息, 配置 Kext 加载顺序以及屏蔽驱动
Misc OpenCore 的自身设置
NVRAM 用于注入 NVRAM (如引导标识符和 SIP)
Platforminfo 用于设置 SMBIOS 机型信息
UEFI 用于加载 UEFI 驱动以及以何种顺序加载

我们可以删除 #WARNING – 1 和 #WARNING – 2 来让整个配置文件看上去更整洁一些。

ACPI 参数的具体部分

ACPI包括了四个部分:Add, Block, Patch, Quirks

Add: 这部分主要填写我们使用的SSDT以及DSDT文件,如果没有请把0-8的ssdt全部删除。如果你有修改的SSDT或者DSDT文件,请先将文件放入EFI/OC/ACPI下。

Block: 这个目录下是禁用一些SSDT/DSDT,似乎没什么用

Patch: 算是热补丁吧,对 DSDT (SSDT) 的内容进行查找和替换,比如华擎、华硕、微星主板可能会遇到RTC问题而无法进入系统,这同样需要添加hotpatch补丁来解决。

Quirk: 此目录下有五项,状态与解释如下

Quirks 解释 状态
FadtEnableReset 一些旧的主板需要对FADT进行标记来激活电脑的修复重启和关机, 除非需要, 否则不推荐开启 NO
NormalizeHeaders 清理ACPI头,只有 macOS 10.13 需要,一些主板的ACPI表需要打开这个修复启动。默认YES。不能开机就改成NO NO
RebaseRegions 尝试试探性地重新定位 ACPI 内存区域, 除非使用了自定义 DSDT, 否则不需要 NO
ResetHwSig 存在重新启动后因无法维持硬件签名而导致从休眠中唤醒的问题的硬件需要开启。 NO
ResetLogoStatus 无法在有 BGRT 表的系统上显示 OEM Windows 标志的硬件需要开启 NO

Booter 参数的具体部分

Config—Boot—Quirks,此项与Fwruntimeservice.efi有关。在aptiomemoryfix停更后,此补丁已经更名为Fwruntimeservice, 并将一些功能与OC合并、模块化。对于z390等无法原生nvram的主板来说,这里的选项需要格外注意。当然我也会把像z370、x299、c422这样支持原生nvram的选择方法一并写进去。

参数 解释 状态
AvoidRuntimeDefrag 修复 UEFI 的运行服务, 例如日期, 时间, NVRAM, 电源控制等 YES
DevirtualiseMmio 内存注入方式包括KASLR方式(分布式注射到各个内存地址中)以及连续性方式。在使用KASLR时,PCIE加载到内存,可能会占据所有所有avaliable值而导致OC的内核以及内核缓存无法注入,导致启动失败。使用KASLR方式很容易出错,我们更适合使用连续性的内存注入方式,并在boot args中添加slide=1(这个之后会写)。因为我们之后会添加这个slide=1去使用连续性的内存注入方式 NO
DisableSingleUser 这里关乎主机是否能开启单用户模式。可以看下这里 https://support.apple.com/zh-cn/HT201573 NO
DisableVariableWrite 非原生NVRAM主板需要模拟nvram.plist进而写入variable值,因此我们要禁止此项来防止其他程序对nvram进行写入,我们这里选YES。需要注意一点,如果你的主板支持原生nvram(z370/x299/c422),请选择NO。如果你的主板不支持 NVRAM 的设备上需要开启,比如(Z390/HM370)等设备。 看主板设置
DiscardHibernateMap 当电脑从休眠(hibernation)中唤醒时,硬盘里的资料会恢复到内存中去,但这个时候OC的内核以及内核缓存等也会写入,这样可能导致冲突,这个选项是帮助我们解决这个问题的。而目前来看,除了z370/x299/c422都无法进行休眠(注意睡眠sleep和休眠hibernation是两个概念),台式机的话就更不需要休眠功能了 NO
EnableSafeModeSlide 允许在安全模式下使用 Slide 值,安全模式下是否启用连续性的内存注入方式。这个不是那么重要,你不会每天进安全模式的。像z390这样本来也不用分布式注入内存方式的(KASLR),我就选择YES,与正常情况下保持一致。 YES
EnableWriteUnprotector 在执行期间删除 CR0 寄存器中的写入保护,保证nvram能正常写入而不受到UEFI内的一些服务的影响,无论什么主板都要选择YES YES
ForceExitBootServices 这个选项是让那些非常老旧的主板也能使用内存寻址,正常情况下选NO。确保 ExitBootServices 即使在 MemoryMap 发生更改时也能调用成功, 除非有必要, 否则请勿使用。 NO
ProtectCsmRegion 官方对此项目的解释与AvoidRuntimeDefrag类似,除非你明白这是什么,不然选择NO,其实我也不明白。 NO
ProvideCustomSlide 是否使用slide值。其实我自己也没有机会使用KASLR这种内存注入方式,所以我一直都是选择连续性注入内存并配合slide,所以我选择YES。如果你对KASLR有一定的认知并会运用,请注意这个值。 YES
SetupVirtualMap 是否建立虚拟内存并对物理内存进行映射。我们在开机时,OC的程序需要一块连续性的内存进行存放内核等东西,而实际的物理内存一般都是分散的。因此,我们通过虚拟内存建立连续性内存供OC使用,并映射到分散的物理内存中 YES
ShrinkMemoryMap 苹果的内核对内存的规范性有具体的要求。目前来看新的主板的规范性都是符合苹果的要求的,我们并不需要启动它,选择NO。如果你出现内存问题而无法开机,请打开此项测试。有巨大且不兼容内存映射的主板需要开启, 非必须不要使用 NO

Config—Boot—MmioWhitelist

默认的第一项是为Haswell芯片提供的内存寻址修复,如果此类芯片碰到内存相关问题,请开启它(enable选择yes)。

默认第二项是开机卡PCI Configuration这里。ACPI、PCI device同时释放到内存时发生0x1000内存地址被占用而卡在PCI Configration.如果碰到此类问题,请开启它。

Config—–DeviceProperties

此项是用来注入你的设备的,主要是显卡和声卡两部分。同样你也可以定制一些设备到你的关于本机–系统报告–PCI列表中,尽管没有多大的意义。

具体注入部分,在以后的教程中解释。

block,这里是禁用一些设备的,我们按默认就行了,不需要任何修改。

Config  Kernel 内核

Config—–Kernel—–Add,这里是你指定要加载哪些 Kext 以及仿冒 CPU ID 的地方, 值得注意的是OC的kexts填写必须注意顺序,比如applealc的依赖是lilu,那么lilu必须填在第一个;SMCProcessor.kext依赖于Virtualsmc.kext。那virtualsmc必须放在SMCProcessor.kext之前。其他优先级更高的 Kext 为 Lilu 的插件, 如 VirtualSMC, AppleALC, WhateverGreen 等。(有些驱动里面还包含插件驱动, 如: VoodooI2C, VoodooPS2 注意要把里面的插件也全部列出)

BundlePath 这里填入 Kext 的名称  如: Lilu.kext
Enabled 控制 Kext 的启用禁用
Executableath 隐藏在 kext 中的实际可执行文件的路径,可以通过右键单击并选择 显示包内容 来查看 Kext 的路径。 通常为 Contents/MacOS/(Kext),但有的时候 Plugin 文件夹下也会有 Kext。注意空壳 Kext 不需要填写此处。如: Contents/MacOS/Lilu
PlistPath 隐藏在 Kext 中的 info.plist 路径    如: Contents/Info.plist

Emulate: 仿冒不支持的 CPU, 例如奔腾和赛扬 ,此选项帮助Ivy Bridge 和一些不受支持的CPU加载电源管理的

CpuidMask: 设置为零时,将使用原始 CPU 位 <Clover_FCPUID_Extended_to_4_bytes_Swapped_Bytes> | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
例如: CPUID 0x0306A9 就是 A9 06 03 00 | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
CpuidData: CPU 的被仿冒位 FF FF FF FF | 00 00 00 00 | 00 00 00 00 | 00 00 00 00
如果需要替换更长的位, 将 00 替换为 FF

Block: 屏蔽系统里的 Kext

Patch: 这是你要添加系统内核补丁, Kext 补丁, 和 AMD CPU 补丁的地方。(等同于 Clover 的 KextToPatch 和 KernelToPatch)。

我们可以看到样本里面有四个补丁,都是关闭着的,其中有两个是关于APPLE RTC的,这对于华硕主板来说相对比较重要,这里我们需要对appleRTC相关的两个补丁一一测试,打开—–Enabled—YES其中一个,即可。如果不行,关闭一个打开另一个。这样能解决华硕主板重启丢失BIOS设置以及需要按F1跳过安全模式,当然RTC仍然需要进一步的设置,我会在进阶教程中详细写一下这一块。

Config—–Kernel—–Quirks      这里是内核相关的快捷选项,比较重要。

AppleCpuPmCfgLock 请确保你的BIOS中已经关闭了CFG锁。如何解CFG锁我在这篇文章中有详细教程。如果你不会解这个锁,你就选择YES,解锁的情况下选择NO。 看你是否关闭了
AppleXcpmCfgLock 仅在 BIOS 中无法禁用 CFG-Lock 时才需要,同上 NO
AppleXcpmExtraMsrs 主要在没有原生电源管理的CPU上启用,一般是Haswell-E, Broadwell-E, Skylake-X这三种CPU需要填写YES。除此之外的CPU选择NO。禁用奔腾和某些至强等不支持 CPU 所需的多个 MSR 访问 NO
CustomSMBIOSGuid 对 UpdateSMBIOSMode 自定义模式执行 GUID 修补, 用于戴尔笔记本电脑 (等同于 Clover 的 DellSMBIOSPatch) NO
DisbaleIOMapper 禁用vt-d,我们在BIOS里已经禁用vt-d了,这里我们选择NO就行了。 NO
ExternalDiskIcons AHCI控制器相关,现在的主板都对AHCI支持的很好,硬盘图标补丁, macOS 将内部硬盘视为外接硬盘 (黄色) 时使用。 NO
LapicKernelPanic 禁用由 AP 核心 lapic 中断造成的内核崩溃, 通常用于惠普电脑 (等同于 Clover 的 Kernel LAPIC) NO
PanicNoKextDump 防止kext出错打报告而让我们看不到真正的panic原因,在发生内核崩溃时阻止输出 Kext 列表, 提供可供排错参考的日志 YES
ThirdPartyTrim 为 SSD 启用 TRIM 指令, NVMe SSD 会自动被 macOS 加载因此不需要 NO
PowerTimeoutKernelPanic 当你遇到睡眠不能唤醒,只有重启后才能睡眠唤醒,请试试选择YES。 YES
XhciPortLimit 解除15个端口限制 YES

Misc 杂项

Config—–Misc—–BlessOverride
这个选项是帮助我们寻找一些不寻常的EFI位置的,除非你有这种情况,不然我们不需要填写任何东西。

Config—–Misc—–Boot,引导界面的设置 (保持原样, 除非你知道你在做什么)

HibernateMode 检测休眠模式。我们的机器一般都不支持休眠,选none。如果你的主板支持原生nvram、并想测试休眠,可以考虑填auto。 auto / none
HideSelf 隐藏自身的EFI引导盘选项, OpenCore 的启动选择中隐藏自身 EFI 分区的启动项 YES
PollAppleHotKeys 是否开启一些热键功能,包括Cmd+K;Cmd+S。我选的是yes。如果你开机发现键盘无法选择,也选NO,并且删除OC/Drivers下的UsbKbDxe.efi

允许在引导过程中使用苹果原生快捷键, 需要与 AppleGenericInput.efi 或 UsbKbDxe.efi 结合使用, 具体体验取决于固件。常用组合:
Cmd + V: 启用 -v 跑码
Cmd + Opt + P + R: 重置 NVRAM
Cmd + R: 启动恢复分区
Cmd + S: 启动至单用户模式
Option / ALT: 在 ShowPicker 设置成 NO 时显示引导项, ALT 不可用时可用 ESC 键代替

YES
Timeout 倒计时进入指定硬盘,这里我们按需求填写,我填写5,代表5秒钟进入指定硬盘。 5
ShowPicker 是否显示开机启动盘选项,比如MAC,WINDOWS那些。我们选择YES。 YES
UsePicker 是否使用OC的开机启动盘选项,我们选YES。之后可能会有新的第三方主题支持的话,我们再选NO YES
Resolution 开机分辨率。比如我的显示器是4K、16:9的,我就填写3840×2160。这个你根据情况填写或者不填。如果遇到开机苹果LOGO很大,你需要按你的分辨率填写。  
ConsoleBehaviourOs 一般是留空,如果留空开机显示效果不佳,请填ForceText  
ConsoleBehaviourUi 留空,同上  

Config—–Misc—–Debug

是否开启debug模式,有特殊用途, 除非你知道你在做什么, 否则保持原样。

DisableWatchDog: NO   如果 macOS 在启动时卡在某些地方, 可能需要设置为 YES, 通常用于避免无用的排错信息

Config—–Misc—–Security

AllowNvramReset: 是否在开机引导项中加入重置nvram缓存功能的选项,我们选YES。

ExposeSensitiveData: 因为要使用到nvram,这个数值我们必须填3。

HaltLevel: 按默认设置即可。

RequireSignature: 黑苹果的vault加密方式,我们不需要这个功能,选择NO

RequireVault: 是否开启黑苹果加密,不需要,选NO

ScanPolicy: 这里暂时填0。我们也许会碰到开机的时候默认进入的系统永远是WINDOWS,并无法更改,之后我们在进阶教程中讲述,如何让MAC盘排在第一个,让WIN排在后面。

Config—–Misc—–Tool

用于运行 OC 调试工具, 例如验证 CFG 锁 (VerifyMsrE2)

Name
OpenCore 启动项中显示的名称

Enabled
启用或禁用

Path
Tools 文件夹下的文件路径
如: Shell.efi

Config—–Misc—–Entries

用于指定 OpenCore 无法自动找到的无规律引导路径

Name
OpenCore 启动项中显示的名称

Enabled
启用或禁用

Path
引导磁盘的 PCI 路径,可以通过 OpenCoreShell 的 map 命令找到
如: PciRoot(0x0)/Pci(0x1D,0x4)/Pci(0x0,0x0)/NVMe(0x1,09-63-E3-44-8B-44-1B-00)/HD(1,GPT,11F42760-7AB1-4DB5-924B-D12C52895FA9,0x28,0x64000)/\EFI\Microsoft\Boot\bootmgfw.efi

Config—-NVRAM

Add:

4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14

UIScale: OpenCore UI 和引导第一阶段缩放
01: 正常大小
02: HIDPI (使 FileVault 在较小的显示器上正常显示)

7C436110-AB2A-4BBB-A880-FE41995C9F82 (系统完整性保护位掩码)

boot-args: -v dart=0 debug=0x100 keepsyms=1 等引导标识符

csr-active-config: <00000000> (SIP 设置)
00000000 – SIP 完全开启
30000000 – 允许未签名的 Kext 加载并允许写入受保护的文件系统路径
E7030000 – SIP 完全关闭
67000000 – 不再推荐使用

nvda_drv: <> (设为 31 时启用 NVIDIA WebDrivers)
prev-lang:kbd: <0x7a682d48616e733a323532> (将默认语言设置为简体中文, 留空为英文)

Config—–NVRAM—–Block

强制重写 NVRAM 变量, 一般不需要, 因为 sudo nvram 是首选, 但对那些极端情况很有用。请注意, Add 不会覆盖 NVRAM 中已经存在的值。我们这里按默认设置不必理会。

Config—–NVRAM—–LegacyEnable
如果你的主板不支持原生NVRAM,请一定要选择YES! 如果你的主板是z370/x299/c422/z270等支持原生nvram的,填no。

用于分配 NVRAM 变量, 与 LegacyEnable 配合使用

Config—–NVRAM—–LegacySchema
这里是nvram的变量设置,大部分默认已经填好,我们只需添加两个变量即可。

打开7C436110-AB2A-4BBB-A880-FE41995C9F82这一栏,添加两个item如下:

item 11 String efi-boot-device

item 12 String efi-boot-device-data

Config—-PlatformInfo

这里我们填合适的机型。对于最近一代的主板来说,一般的原则,只有核显的机器我们选Macmini8,1;只有独显的机器我们选择iMac Pro 1,1;有核显和独显的我们选择iMac 19,1。

因为这部分内容太过复杂,其实很多内容都不必要填写,我们直接删除Datahub,PlatfromNVRAM,SMBIOS这三项,无需填写。

Config—–PlatformInfo—–Automatic
这里意思是是否自动填写系统信息。因为后面的很多选项都好繁琐,我们只要认真填几个选项就行了,这里我选YES,不重要的信息让它自动填。

Config—–PlatformInfo—–Generic
这里是我们需要填写的三码部分。获得三码,我们可以运用一下Clover的Clover Configurator帮我们生成一下相关的数据

打开Clover configurator,并到SMBIOS选项卡中,选择合适的机型,这里我们以iMac19,1 为例:

我们换到Rt variables里,点击ROM下的生成,获得一个ROM编号,这样我们就获得了所有需要的信息了。

我们整理一下刚才获得的信息并依次填入Generic下面即可。

使用 macserial 查看原有 PlatformInfo:

打开下载好的 MacInfoPkg

找到里面的 macserial 并将其复制到桌面

终端输入: (建议复制粘贴)

cd ~/Desktop

./macserial | grep -w 'Model:\|Valid:\|Hardware UUID:\|ROM:\|MLB:\|Serial Number:' | sed '/ \- /d' | tr -d ' ' | sed $'s/Model:/SystemProductName:/g' | sed $'s/HardwareUUID:/SystemUUID:/g' | sed $'s/SerialNumber:/SystemSerialNumber:/g' | sed $'s/\:/\: /g'

此时你现有的 PlatformInfo 就已经列出来了, 对着 Config 对号入座即可

如果输出的 Valid 不是 Possibly 说明这个 PlatformInfo 不符合规范, 很有可能无法激活苹果服务, 建议重新生成

使用 macserial 生成新的 PlatformInfo:

如果要生成新的 PlatformInfo 请输入如下命令来列出所有支持的设备型号:

cd ~/Desktop

./macserial -l | grep 'Model:' | tr -d ' ' | sed $'s/Model:/\\- /g'

然后输入如下命令来生成序列号和 MLB

./macserial -m <设备型号>

请忽略 <>, 例子: ./macserial -m MacBookPro15,3

输出的结果中, | 前面的是 序列号 SystemSerialNumber, 后面的是 MLB

Generic:

SpoofVendor: YES (仿冒制造商为 Acidanthera 来避免出现冲突)
SystemUUID: 填入设备的硬件 UUID 以免造成 Windows 和其它软件的激活问题 (官方不再建议留空)
MLB: 用 macserial 读取或生成
ROM: <0x############> 可以是任意 6 Byte MAC 地址, 如 0x112233000000
SystemProductName: 用 macserial 读取或生成
SystemSerialNumber: 用 macserial 读取或生成

Config—–PlatformInfo—–剩余部分

UpdateDataHub:选择YES

UpdateNVRAM:选择YES

UpdateSMBIOS:选择YES

UpdateSMBIOSMode:选择Create (用新分配的 EfiReservedMemoryType 替换原有的表, 戴尔笔记本需要使用 Custom 并开启 CustomSMBIOSGuid)

UEFI:UEFI相关的补丁以及设置项。

ConnectDrivers:是否加载所有UEFI补丁,这里我们选YES

Config—-UEFI
这里我们需要填写UEFI相关的设置。

Config—–UEFI—-ConnectDrivers
强制加载 .efi 驱动程序, 更改为 NO 将自动连接 UEFI 驱动程序, 这样以获得更快的启动速度, 但并非所有驱动程序都可以自行连接, 某些文件系统驱动程序可能无法加载

Config—–UEFI—-Drivers
把我们之前放在OC/EFI/Drivers下面的驱动一一填上,这里我们也注意一下填入的顺序:

Drivers
     item0          String       ApfsDriverLoader.efi
     ........................    MemoryAllocation.efi
     ........................    FwRuntimeServices.efi
     ........................    VBoxHfs.efi
     ........................    UsbKbDxe.efi

Config—–UEFI—-Input

此选项是原生apple开机热键的选项,需要配合我们之前设置的PollAppleHotKeys=yes以及UsbKbDxe.efi补丁一起用。下面的设置完全按照默认情况就行了。因为我的键盘是苹果原生键盘,不支持这个功能,所以我直接PollAppleHotKeys里填了NO,这里也不会生效的。

有一点需要说,如果你是华硕的z87或者z97,你需要打开PointerSupport这个选项。

KeyForgetThreshold: 5
按住按键后每个键之间的时间间隔 (单位: 毫秒)

KeyMergeTheshold: 2
按住按键被重置的时间间隔 (单位: 毫秒)

KeySupport: YES
开启 OC 的内置键盘支持
使用 UsbKbDxe.efi 请设置为 NO

KeySupportMode: Auto 键值转换协议模式

V1: UEFI 旧版输入协议
V2: UEFI 新输入协议
AMI: APTIO 输入协议

KeySwap: NO
交换 Command 和 Option 键
PointerSupport: NO
修复 UEFI 选择器协议

PointerSupportMode: 留空

TimerResolution: 50000
固件时钟刷新的频率 (单位: 100纳秒)
华硕主板为自己的界面使用 60000
苹果使用 100000

Config—–UEFI—-Protocols

AppleBootPolicy 用于确保虚拟机或旧白苹果上兼容 APFS NO
AppleEvent 虚拟机并具有vault的mac需要用的 NO
AppleImageConversion 重建apple图标 NO
AppleKeyMap 重建苹果功能键 NO
AppleUserInterfaceTheme 似乎是支持主题了?没看懂 NO
ConsoleControl macOS 引导加载程序基于文本输出的控制台控制协议, 某些固件缺少该协议。当协议已经在固件中可用时, 需要设置此选项, 并且使用其他控制台控制选项, 例如 IgnoreTextInGraphics, SanitiseClearScreen 以及 ConsoleBehaviourUi 的 ConsoleBehaviourOs YES
DataHub 重新安装数据库 NO
DeviceProperties 虚拟机需要,确保在 VM 或旧白苹果上完全兼容 NO
FirmwareVolume 修复 Filevault 的 UI 问题, 设置为 YES 可以获得更好地兼容 FileVault NO
HashServices 修复运行 FileVault 时鼠标光标大小不正确的问题, 设置为 YES 可以更好地兼容 FileVault NO
UnicodeCollation 一些较旧的固件破坏了 Unicode 排序规则, 设置为 YES 可以修复这些系统上 UEFI Shell 的兼容性 (通常为用于 IvyBridge 或更旧的设备) NO

Config—–UEFI—-Quirks

AvoidHighAlloc 主板无法正确访问 UEFI Boot Services 中更高内存的解决方法。除非有必要, 否则避免使用 NO
ClearScreenOnModeSwitch 从图形模式切换到文本模式时, 某些固件仅清除屏幕的一部分, 导致屏幕上残留之前绘制的图片。 此选项会在切换到文本模式之前用黑色填充整个屏幕 NO
ExitBootServicesDelay 旧主板需要给予主板退出时间(单位为微秒),较新的主板直接填0。旧的主板比如Z87pro,填3000000-5000000 0
IgnoreInvalidFlexRatio BIOS 中无法禁用 MSR_FLEX_RATIO(0x194) 时开启,如果你没有在bios中解锁CFG,一定要选YES NO
IgnoreTextInGraphics 修复不用 -v 开机时日志覆盖苹果标志输出的问题 YES
ProvideConsoleGop 在选择系统画面前,你可能看到一些你config配置错误的信息,你可以根据这信息调整自己的配置 YES
ReconnectOnResChange 有些固件在 GOP 分辨率改变后要求重新连接控制器才能输出文本, 开启这个选项会导致从 UEFI Shell 中启动 OpenCore 时直接黑屏, 尽量避免开启 NO
ReleaseUsbOwnership 大部分的主板都有自动释放USB所有权的功能。如果你开机键盘鼠标卡死了,或者USB失灵,试试选Yes。 NO
ReplaceTabWithSpace 取决于固件, 某些设备在 UEFI Shell 中编辑文件使用 Tab键 出问题时启用。注意, 此选项需要将 ConsoleControl 设置为 YES NO
RequestBootVarRouting 从 EFI_GLOBAL_VARIABLE_GUID 中为 OC_VENDOR_VARIABLE_GUID 请求 redirectBoot 前缀变量
启用此项以便能够在与 macOS 引导项设计上不兼容的固件中可靠地使用 启动磁盘 设置
YES
SanitiseClearScreen 修复 OpenCore 在高分屏中以 1024×768 显示的问题, 注意要同时开启 ConsoleControl 并将 ConsoleMode 的内容留空 YES
UnblockFsConnect 惠普笔记本在 OpenCore 引导界面没有引导项时设置为 YES NO

你的 EFI 现在应该是什么样子

解决 Clover 和 OpenCore 的冲突

在重启进入 OpenCore 之前, 我们还需要解决一些冲突问题:

删除 Clover 设置面板

Clover 设置面板会和 OpenCore 产生冲突, 需要删除

Clover 设置面板位于 /Library/PreferencePanes/Clover.prefPane
终端输入 sudo rm -rf /Library/PreferencePanes/Clover.prefPane 删除
清理 Clover 的模拟 NVRAM RC 脚本 和 守护程序 CloverDaemonNew

# 删除 ESP 分区下的 nvram.plist
rm -rf /Volumes/(你的 ESP 分区)/nvram.plist

# 删除 RC 脚本
rm -rf "/etc/rc.clover.lib"
rm -rf "/etc/rc.boot.d/10.save_and_rotate_boot_log.local"
rm -rf "/etc/rc.boot.d/20.mount_ESP.local"
rm -rf "/etc/rc.boot.d/70.disable_sleep_proxy_client.local.disabled"
rm -rf "/etc/rc.boot.d/80.save_nvram_plist.local"
rm -rf "/etc/rc.shutdown.local"
rm -rf "/etc/rc.boot.d"
rm -rf "/etc/rc.shutdown.d"
# 删除 Clover 新开发的 NVRAM 守护程序 `CloverDaemonNew`
launchctl unload '/Library/LaunchDaemons/com.slice.CloverDaemonNew.plist'
rm -rf '/Library/LaunchDaemons/com.slice.CloverDaemonNew.plist'
rm -rf '/Library/Application Support/Clover/CloverDaemonNew'
rm -rf '/Library/Application Support/Clover/CloverLogOut'
rm -rf '/Library/Application Support/Clover/CloverWrapper.sh'

重置「硬件」NVRAM

为了尽可能减少问题出现的概率, 建议在 Clover 和 OpenCore 之间切换时重置「硬件」NVRAM

通过 Clover F11 清除

删除 Clover 内的 EmuVariableUefi.efi (通常位于 Drives/UEFI/ 或 drivers64UEFI/ 目录下)

如果不删除 EmuVariableUefi.efi, Clover 只会重置模拟出来的原本就是空的 NVRAM

重启进入 Clover 引导项选择界面然后按下 F11 或 Fn+F11 直到设备自动重启

开机直接选择 UEFI 引导项进入 OpenCore

OpenCore 完善篇

模拟NVRAM

对OC而言,NVRAM是非常核心的一环,不管是原生还是模拟的。如果你是原生nvram的主板(z270/z370/x299/c422),请不必理会这章节。这张的主要内容为生成模拟的NVRAM.plist。

首先打开我们之前下载好的opencore,进入目录下的Utilities/LogoutHook,并将LogoutHook放入一个安全的位置。这里我推荐将他放到文档目录下。

右键finder,前往目录,填/Users, 再点进入以你名字命名的文件夹,既能看到Documents(文档)目录了,把我们的LogoutHook放在里面。

打开Terminal (终端),输入一下命令

sudo defaults write com.apple.loginwindow LogoutHook /Users/你的用户名/Documents/LogoutHook/LogoutHook.command

终端会提示要求你输入密码(密码打进去不会显示)

重启后,你会在/EFI/下看到nvram.plist,代表已经成功模拟了。

建立自己的开机选择系统目录

这个教程主要针对的是非原生nvram主板的用户,如果你是原生nvram的用户,直接在偏好设置—启动磁盘中选定你希望设置为默认启动的磁盘即可,不必往下看浪费时间!

非原生nvram用户必须完成以下几点:

通过3.1的教程建立nvram.plist.
确保OpenCore的版本为2019年11月20日之后的。更新OpenCore替换BOOT/BOOTx64.efi以及OC/OpenCore.efi即可。
确保AppleSupportPkg版本为2.1.4以及之后,可以在我这里提供编译好的。
确保config.plist下/Misc/Security/ExposeSensitiveData=3 ; Booter/Quirks/DisableVariableWrite=True/YES ; NVRAM/LegacyEnable=True/YES
确保文件夹OC/Drivers/下没有VariableRuntimeDxe.efi

如果你是华硕的非原生nvram主板,你还需要做(此文件由群友@哞 提供):

下载LoginHook.command,把它与LogoutHook.command放在一起,并执行:sudo defaults write com.apple.loginwindow LoginHook /写上你的路径/LoginHook.command

在保证以上要素后,打开系统偏好设置—启动磁盘,选择你想要设置为默认启动的启动磁盘即可。

人已赞赏
安装

远程安装黑苹果部分图片记录

2019-12-17 23:39:25

安装

黑苹果配置挑选,教你组装一台苹果机

2020-1-5 11:58:52

14 条回复 A文章作者 M管理员
  1. 写得很不错哦

  2. 据说将要取代clover了,可以期待一下~

  3. 技术活

  4. 真详细,收藏!

  5. 谢谢大佬!

  6. 不好弄!!

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索