精解OpenCore

您所在的位置:网站首页 opencore官网中文网 精解OpenCore

精解OpenCore

2024-07-11 02:44| 来源: 网络整理| 查看: 265

教程更新于 2020.3.2, 基于 OpenCore 0.5.6 官方版本

由于个人能力有限, 教程中难免会有些疏漏, 这里推荐大家在参阅本教程的同时也阅读以下资料:

OpenCore 官方文档 – OpenCore 最权威的资料, 没有之一!!!xjn‘s Blog – xjn 大佬的博客, 对台式机非常友好的教程, 内存管理写的非常详细OC-little – 宪武大佬的 OC ACPI 热补丁示例Opencore Vanilla Desktop Guide

什么是 OpenCore

OpenCore(简称 OC) 是一个着眼于未来开源的引导工具, 最初诞生于 HermitCrabs 实验室, 现在接手于 Acidanthera, 其目的是创造一个更加严谨的模组化的轻量引导系统。尽管 OpenCore 的主要用途是黑苹果, 它也支持其它操作系统的引导。

OpenCore 现在处于公测 Beta 阶段, 引导相关功能也已非常稳定, 喜欢折腾的朋友现在已经是动手的时机了。

这个教程只能作为你探索的起点。请仔细阅读并时刻牢记你的硬件可能有不同的配置要求。

为什么选择 OpenCore从 2019 年 9 月以后, Acidanthera 开发的内核驱动 (Lilu, AppleALC 等等) 「不再会」 在 Clover 上做兼容性测试OpenCore 更加注重系统的安全性, 提供对 OpenCore 自身引导文件对加密, 同时对文件保险箱 (FileVault) 有更强大的支持, 在未来会支持 UEFI 安全启动OpenCore 启动 FileVault (硬盘保险箱) 加密的分区速度远超 CloverOpenCore 支持基于 boot.efi 的原生开机快捷键支持OpenCore 使用更加先进的方法注入第三方内核扩展驱动 (Kext) 且与此同时不会破坏系统完整性保护OpenCore 通过读取启动磁盘设置的 NVRAM 变量, 可以像白苹果一样支持在设置的启动磁盘切换默认引导项支持给其它 .efi 驱动或引导工具加入参数大量 Acidanthera 维护的独立 UEFI 驱动 被合并入 OpenCore, 未来的开发直接与 OpenCore 绑定, 且不再支持 Clover OpenCore 常见疑问

OpenCore 不自带精美的主题, 以后会添加吗?

OpenCore 自带的 GUI 仅用于 debug, 设计初衷是在正常使用的时像白苹果一样隐藏。其实 OpenCore 已经提供了大量可以绕开 GUI 的功能, 将 ShowPicker 设置为 NO 隐藏菜单之后, 可以通过系统自带的启动磁盘设置来切换默认系统, 用苹果原生快捷键来重置 NVRAM 和添加引导表示符, 需要其它功能的时候可以随时按 ESC/Option 调出, 主题存在的意义不大N.D.K 为官方 OpenCore 开发了一个独立的 GUI 插件, 可以在 这里下载, 食用方法请阅读项目的 Readme

OpenCore 为什么不会为其它操作系统忽略 ACPI 补丁?

真正正确的 ACPI (DSDT/SSDT) 应当适用于所有的操作系统, 单独为一个操作系统制作 ACPI 是不合理的, 因此 OpenCore 基于 ACPI 标准, 不会在 ACPI 上区别对待操作系统, 如果想学习怎样使用和制作通用于所有操作系统的 ACPI 补丁, 可以参考 OC-little

OpenCore 的 MOD 版本和官方版本有何不同?

OpenCore MOD 是 N.D.K 的一个 Fork, 里面加入了不注入除了 macOS 之外的其它操作系统的功能, 可以看作是一个自带主题的懒人版。但是除非在个别极端情况下主板的固件真的不走规范, 正确配置原版 OpenCore 和 ACPI 是不会造成无法引导其它操作系统的情况的。本教程鼓励正确配置 OpenCore, 因此基于 原版 OpenCore 编写, 且 「不推荐」 使用 MOD 版本来掩盖自身的配置问题。

OpenCore 的配置为什么看起来这复杂?

OpenCore 为了提高兼容性, 为用户开放了更多底层的 QuirkOpenCore 现阶段没有可用的非常直观的 GUI 编辑器

换位思考, 如果用 Xcode 来编辑 Clover 安装包内自带的 Config 样本, 显然 OpenCore 会更简单。OpenCore 很多功能都有且只有一处设置, 但是 Clover 有大量等效组合互相干扰。

配置 OpenCore

讲了这么多, 终于到真正动手的环节了

本文较长, 建议配合博客右下角的目录阅读

准备工作

我们先来做些简单的准备工作

推荐 BIOS 设置禁用:英文中文Fast Boot快速启动CFG Lock (MSR 0xE2 write protection)CFG 锁 (MSR 0xE2 写入保护)VT-dVT-dCSM兼容性支持模块Intel SGXIntel SGX启用:英文中文VT-xVT-xAbove 4G decoding大于 4G 地址空间解码Hyper Threading处理器超线程Execute Disable Bit执行禁止位EHCI/XHCI Hand-off接手 EHCI/XHCI 控制OS type: Windows 8.1/10操作系统类型: Windows 8.1/10Legacy RTC Device传统 RTC 设备

将 操作系统类型设置为 Windows 8.1/10 是因为部分主板在 Other 模式下会将系统认作是 Windows 7 从而禁用 UEFI 的某些功能并开启 CSM, 200 系及以后的主板理论上不存在这个问题

下载如下文件

OpenCorePkg (建议从 Acidanthera 的官方 Sample 开始构建, 并使用 Debug 版本)

OpenCore-Factory 提供连续的源码自动编译, 喜欢尝鲜的朋友可以下载, 最新编译为 Release

MacInfoPkg

AppleSupportPkg

Plist 编辑器:

ProperTree (基于 Python 的轻量级跨平台 Plist 编辑器, 针对 OpenCore 有优化, Acidanthera 官方推荐)Xcode (Acidanthera 官方推荐, 但是 Xcode 11 处理 存在严重问题)Plist Editor Pro (使用远古 Plist 标准, 会破坏 XML 换行而且不会自动转换 Base64, 可用但是不推荐)

OpenCore Configurator (简称 OCC) 是一个第三方图形化 OpenCore 编辑器, 经过半年依赖的发展, 如今已经趋近成熟

经测试, 软件已经可以正常使用, 但是由于 OpenCore 的配置文件更新频繁, 所以软件不一定永远兼容最新版本, 同时最新的版本为了同步开发中的自编译版本可能也存在不支持当前最新官方 Release 的情况。

使用之前需要了解清楚工具的当前支持到的最高版本, 跨版本编辑会造成 config 损坏, 设置项无法对应等棘手情况。

感谢 mackie100 和 草原企鹅 的付出

需要具备的条件一个 U 盘对黑苹果有一定的知识基础, 至少会自己配置 Clover, 清楚各个 内核驱动 .kext 和 UEFI .efi 驱动的用途, 不清楚可以查看附录[1] 和 附录[2]一个完全精简过的 Clover EFI一个正常稳定工作的黑苹果测试平台EFI 挂载工具 创建 USB 启动盘

给自己留一个后手, 先用 USB 尝试和排错, 稳定了再迁移到硬盘里

创建一个 USB 启动盘, 格式化为 GUID 分区图, 分区类型为 macOS 日志式。

FormatUSB

挂载完 EFI 分区真有意思的部分就「开始了」

EmptyEFI

基础文件夹结构

解压下载下来的 OpenCore 引导文件, 把 EFI 文件夹里面的 OC 文件夹 和 BOOT/BOOTx64.efi 对号入座放入 ESP 分区中

注意⚠️: 与 Clover 不同, OpenCore 的 BOOTx64.efi 和 OpenCore.efi 是两个不同的文件

添加 UEFI 引导项的时候应当添加 BOOTx64.efi 而不是 OpenCore.efi!

我们先 「删除」 一些不需要的文件

drivers 文件夹下

AppleUsbKbDxe.efi

这个驱动是给使用模拟 UEFI 的老主板在 OpenCore 界面正常输入用的, 请勿在 Ivy Bridge (3 代酷睿)及以上的主板上使用 (详见 vit9696 的解释)

NvmExpressDxe.efi

用于在 Haswell (4 代酷睿) 或更老的主板上支持 NVMe 硬盘, 新主板不需要

XhciDxe.efi

用于给 Sandy Bridge (2 代酷睿) 或更老的主板上支持 XHCI, 新主板不需要

HiiDatabase.efi

用于给 Ivy Bridge (3 代酷睿) 或更老代主板上支持 UEFI 字体渲染, UEFI Shell 中文字渲染异常时使用, 新主板不需要

tools 文件夹下

BootKicker.efi

调用苹果原生的引导切换 GUI, 黑苹果不支持

CleanNvram.efi

OpenCore 自带的 NVRAM 清理功能已经足够我们使用

GopStop.efi

停止显卡 GOP, 排错时使用

HdaCodecDump.efi

导出声卡 Codec, 可用于定制声卡, 需要时可以临时加回来

VerifyMsrE2.efi

用于检查主板上 CFG 锁的状态

OpenCore 的正确文件结构如下所示

Structure

现在, 我们可以把 AppleSupportPkg 中必需的 .efi 驱动程序放入 Drivers 文件夹, 将 你的 kext 和 DSDT/SSDT 放入各自的文件夹中。请注意, OpenCore 不支持支持列表以外的 UEFI 驱动程序!

完成后的效果:

StructureFilled

配置思路

OpenCore 的配置建议遵循从简原则, 先确保能进系统再来增加其它功能 (不进系统功能都是免谈), 变数越少出错的概率也就越低

内核驱动只保留 Lilu, WhateverGreen, VirtualSMC 和必须依赖才能开机的驱动 (删除 AppleALC, VoodooI2C 等功能性驱动) 配置 Config.plist请记住 OpenCore 中的 config.plist, 与 Clover 的 config.plist 尽管名称相同但是内容和结构完全不同。它们不能混合滥用。如果你不清楚某一个项里应该填什么「数据类型」, 请参考 OpenCore 官方文档下面的 Quirk 给的都是推荐值, 请根据自身情况修改

部分未在文中提及的 Quirk 和 参数保留原样

复制 Sample.plist, 将副本重命名为 config.plist 并用上文提到的编辑工具打开

如果你打算使用的 SMBIOS 苹果已经停止支持 或者你是用的是戴尔 OEM 笔记本请使用 SampleFull.plist 并「认真」补全所有 SMBIOS 信息

ConfigSample

里面躺着所有我们需要配置的子项:

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

#WARNING - 1~5 是开发者的嘱咐和对 Sample 选择的说明, 在删除之前请务必确保你已经阅读并遵守了这些条例

Warning - 1: 这只是一个实例。不要直接拿来开机。

Warning - 2: 在用 Config 开机之前, 确保你已经理解 Config 内「每一个项的」的意义

Warning - 3: 在大多数情况下, 建议从 Sample.plist 开始配置

Warning - 4: SampleFull.plist 用于苹果不再支持的机型 (2011 年或更早)

ACPI

Add:

你需要把这些而例子里内容修改/创建为你的 EFI/OC/ACPI/ 下的文件

Block:

禁用某个 ACPI 表, 常用于禁用 DAMR 来关闭 VT-d

Patch:

对 DSDT (SSDT) 的内容进行查找和替换

Quirks: ACPI 相关设置

FadtEnableReset: NO在旧硬件上修复重启和关机, 除非需要, 否则不推荐开启NormalizeHeaders: NO清除 ACPI 头字段, 只有 macOS 10.13 需要RebaseRegions: YES尝试试探性地重新定位 ACPI 内存区域, 使用自定义 DSDT 则必须开启ResetHwSig: NO存在重新启动后因无法维持硬件签名而导致从休眠中唤醒的问题的硬件需要开启ResetLogoStatus: NO无法在有 BGRT 表的系统上显示 OEM Windows 标志的硬件需要开启 Booter 启动器

MmioWhitelist: 如果开机卡在 PCI... 可以尝试开启 Item 1 下的 Patch

Quirks:

AvoidRuntimeDefrag: YES

开启后会修复 UEFI 的运行服务, 例如日期, 时间, NVRAM, 电源控制等

DevirtualiseMmio: YES

开启后会减少 Stolen 内存占用空间,扩大 Slide = N 值的范围, 适用于大多数主板

DisableSingleUser: NO

开启后会禁止 Cmd + S 和 -s 的使用,使设备更加接近于 T2 白苹果

DisableVariableWrite: NO

开启后会禁止 NVRAM 写入, 在 Z390/HM370 等没有原生 macOS 支持 NVRAM 的主板上需要开启

DiscardHibernateMap: NO

开启后会重用原始休眠内存映射,仅某些旧硬件需要

EnableSafeModeSlide: YES

开启后会允许在安全模式下使用 Slide 值

EnableWriteUnprotector: YES

开启后会在执行期间删除 CR0 寄存器中的写入保护

ForceExitBootServices: NO

开启后会确保 ExitBootServices 即使在 MemoryMap 发生更改时也能调用成功, 除非有必要, 否则请勿使用

ProtectCsmRegion: NO

开启后会用于修复人为制造和睡眠唤醒的问题, AvoidRuntimeDefrag 已经修复了这个问题所以请尽可能避免使用这个 Quirk

ProtectSecureBoot: NO

避免操作系统对 UEFI 安全启动变量 (db, dbx, PX, KEK) 进行写入, 这个选项主要用于避免 Insyde 主板和 MacPro5,1 的 NVRAM 问题

ProvideCustomSlide: YES

如果 Slide 值存在冲突, 此选项将强制 macOS 执行以下操作:

使用一个伪随机值。 只有在遇到 Only N/256 slide values are usable! 时需要

SetupVirtualMap: YES

开启后会将 SetVirtualAddresses 调用修复为虚拟地址

ShrinkMemoryMap: NO

有巨大且不兼容内存映射的主板需要开启, 非必须不要使用

SignalAppleOS: NO

通过 OS Info 将 macOS 加载的信息报告给其它操作系统, 用于在 Windows 中为 MacBook 启用 iGPU DeviceProperties 设备属性

不同的设备硬件地址不一样! 你需要先通过 Hackintool 或者 Windows 设备管理器 等工具查看 PCI 设备地址!

此处内容可以用 Hackintool 生成然后直接复制过来, 请提前确保内容和结构无误

Add: 添加 _DSM 设备属性

PciRoot(0x0)/Pci(0x2,0x0)

注入缓冲帧补丁, 查看 此处来确认你需要的缓冲帧补丁

PciRoot(0x0)/Pci(0x1f, 0x3) → Layout-id

应用 AppleALC 音频 Layout ID 注入

Block: 用于删除/屏蔽设备属性 (可以删除此项, 大多数情况都用不到)

这里的设置等同于 Clover 里的 ACPI 重命名 _DSM → XDSM + TgtBridge Kernel 内核

这里是指定要加载哪些 Kext 以及仿冒 CPU ID 的地方, 这里的顺序非常重要, 所以请确保 Lilu.Kext 始终在第一位! 其他优先级更高的 Kext 为 Lilu 的插件, 如 VirtualSMC, AppleALC, WhateverGreen 等

Add:

BundlePath

这里填入 Kext 的名称如: Lilu.kext

Enabled

控制 Kext 的启用禁用

ExecutablePath

隐藏在 kext 中的实际可执行文件的路径,可以通过右键单击并选择 显示包内容 来查看 Kext 的路径。 通常为 Contents/MacOS/(Kext),但有的时候 Plugin 文件夹下也会有 Kext。

如: Contents/MacOS/Lilu

空壳 Kext 没有可执行文件 (e.g. USBPorts.kext), 此项留空即可

PlistPath

隐藏在 Kext 中的 Info.plist 路径如: Contents/Info.plist

VoodooI2C 注入样板 🚪

VoodooPS2 注入样板 🚪

Emulate: 仿冒不支持的 CPU, 例如奔腾和赛扬, 或者在不支持的 CPU 上启用 XCPM

CpuidData: 设置为零时,将使用原始 CPU 位 | 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 00CpuidMask: 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)

Quirks:

AppleCpuPmCfgLock: NO如果设备的 CFG-Lock 是开启的状态则需要设置为 YES (尽可能用 Grub 关闭 BIOS 的 CFG-Lock 并避免开启这个 Quirk)AppleXcpmCfgLock: NO同上AppleXcpmExtraMsrs: NO禁用奔腾和某些至强等不支持 CPU 所需的多个 MSR 访问AppleXcpmForceBoost: NO强制拉高睿频, 建议在长期高负载的专业设备上使用, 至强系列的处理器开启这个选项会受益CustomSMBIOSGuid: NO对 UpdateSMBIOSMode 自定义模式执行 GUID 修补, 用于戴尔笔记本电脑 (等同于 Clover 的 DellSMBIOSPatch)DisbaleIOMapper: NO需要绕过 VT-d 且 BIOS 中禁用时使用DummyPowerManagement: NO禁用 AppleIntelCpuPowerManagement 原生电源管理, 用于更好的替代 NullCpuPowerManagement.kextExternalDiskIcons: YES硬盘图标补丁, macOS 将内部硬盘视为外接硬盘 (黄色) 时使用IncreasePciBarSize: NO将 IOPCIFamily 中 32 位 PCI Bar 的大小从 1GB 增加到 4GB, 在 BIOS 中启用 Above4GDecoding 是一种更加干净和安全的方法。某些 X99 板可能需要开启, 这些主板通常会在 IOPCIFamily 上遇到内核崩溃LapicKernelPanic: NO禁用由 AP 核心 lapic 中断造成的内核崩溃, 通常用于「惠普电脑」 (等同于 Clover 的 Kernel LAPIC)PanicNoKextDump: YES在发生内核崩溃时阻止输出 Kext 列表, 提供可供排错参考的崩溃日志, 排错时请务必开启PowerTimeoutKernelPanic: YES修复 macOS Catalina 中由于设备电源状态变化超时而导致的内核崩溃ThirdPartyDrivers: NO为 SSD 启用 TRIM 指令, NVMe SSD 会自动被 macOS 加载因此不需要, SATA SSD 可以在终端执行 sudo trimforce enable 开启同时修复 macOS 10.15 下非苹果原厂 SSD 无法使用硬盘休眠 (hibernatemode 25)XhciPortLimit: YES这实际上是 15 端口限制补丁, 不建议依赖, 因为这不是 USB 的最佳解决方案。有能力的情况下请选择定制 USB, 这个选项适用于没有定制 USB 的设备 Misc 杂项

BlessOverride: 用于覆盖 Windows bootmgfw.efi 的位置以便识别 Windows 引导项, OpenCore 和 Windows 的引导文件在同一硬盘的同一 ESP 分区下使用

123▼ Misc |__ ▼ BlessOverride |__ Item 0 \EFI\Microsoft\Boot\bootmgfw.efi

Boot: 引导界面的设置

HibernateMode: None

与系统内的休眠模式 (hibernatemode 25) 配合, 引导进系统会还原休眠前的状态, 这个功能会影响 SSD 寿命, 建议关闭

None: 关闭休眠支持Auto: 自动检测 RTC 和 NVRAM 模式RTC: RTC 模式

HideAuxiliary: YES

默认隐藏以下引导项, 按空格键显示全部macOS 恢复在自定义引导项时定义为 Auxiliary 的引导项在 Tools 中添加的操作系统 (如: Clean NVRAM)

HideSelf: NO

在 OpenCore 的启动选择中隐藏自身 EFI 分区内的其它启动项

PickerAttributes: 0x00

给 OpenCore 自带的引导选择界面添加特效, 食用方法为填入字体颜色和背景颜色的值的 16 进制之和

字体颜色0x00: 黑0x01: 蓝0x02: 绿0x03: 青0x04: 红0x05: 品红0x06: 棕0x07: 浅灰0x08: 深灰0x09: 浅蓝0x0A: 浅绿0x0B: 浅青0x0C: 浅红0x0D: 浅品红0x0E: 黄0x0F: 白背景颜色0x00: 黑0x10: 蓝0x20: 绿0x30: 青0x40: 红0x50: 品红0x60: 棕0x70: 浅灰

PickerAudioAssist: NO

设置为 YES 时会朗读屏幕上选择项的内容, 需要提提前在 EFI 中放入音频文件并正确设置下文的 Audio 章节

PollAppleHotKeys: YES

设置为 YES 后允许在引导过程中使用苹果原生快捷键, 需要与 Quirk KeySupport=Yes 结合使用, 具体体验取决于主板固件。快捷键组合:Cmd + V: 启用 -v 跑码Cmd + Opt + P + R: 重置 NVRAMCmd + R: 启动恢复分区Cmd + S: 启动至单用户模式Option / ALT: 在 ShowPicker 设置成 NO 时显示引导项选择界面, ALT 不可用时可用 ESC 键代替Cmd + C + 减号: 关闭主板兼容性检查, 等同于添加引导标识符 -no_compat_checkShift: 安全模式

ShowPicker: YES

显示 OpenCore 的 UI, 用于查看可用引导项设置为 NO 可以跳过倒计时, 和 PollAppleHotKeys=Yes 配合快捷键可以大幅提升体验

TakeoffDelay: 0

在启动前延迟 n 毫秒, 提升键盘快捷键识别的正确率。n 的有效范围为大于 5000 ~ 10000, 32bit 以内的正整数

Timeout: 0

设置引导项等待时间, 单位秒0 为关闭倒计时, 相当于 Clover 的 -1 (并不是跳过倒计时)

PickerMode: Builtin

Builtin

使用 OpenCore 自带的简单 UI

External

使用其它 GUI

Apple

使用苹果原生的 GUI, 黑苹果不支持

Debug: Debug 有特殊用途, 除非你知道你在做什么, 否则保持原样, 具体参考官方文档

DisableWatchDog: NO

如果 macOS 在启动时卡在某些地方, 可能需要设置为 YES, 通常用于排除错误干扰

DisplayDelay: 0

DisplayLevel:

2147483714: 在屏幕上显示所有 Debug 信息0: 隐藏所有 Debug 信息

Target:

0: 关闭日志记录3: 允许屏幕输出日志19: 允许屏幕输出 UEFI 变量日志65: 在 ESP 分区根目录生成日志文件 opencore-YYYY-MM-DD-HHMMSS.txt, 但屏幕上不显示日志

Security: 安全

AllowNvramReset: YES

允许在引导选择界面和快捷键 Cmd + Opt + P + R 按下时重置 NVRAM

AllowSetDefault: YES

允许使用 CTRL + 回车 和 CTRL + 数字 锁定默认启动项

AuthRestart: NO

允许重启 FileVault2 分区时不用再次输密码, 有安全风险

ExposeSensitiveData:

3 将 OpenCore 的启动路径和版本储存进 NVRAM11 在 3 的基础上添加主板 OEM 信息, HWMonitorSMC2 和 NVMeFix 需要主板 OEM 信息才能正常工作

Vault: Optional

OpenCore 自身的加密和安全保护, 具体参考官方文档

Optional

不强制要求 vault.plist 和 vault.sig 文件存在, 但是会在其中任意文件存在时依旧执行验证, 不安全

Basic

强制要求 vault.plist 存在, 开机时会根据里面的内容核对 OC 目录下的文件, 防止在 EFI 文件系统崩溃后依旧启动

Secure

强制要求 vault.sig 签名文件 和 vault.plist 存在, 用于和 UEFI 安全启动配合

ScanPolicy: 0

0: 允许扫描所有可用的硬盘其它值请参考官方文档, 对给出的选项做 16 进制加法运算

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

Arguments传递的参数Auxiliary: YESYES 默认隐藏NameOpenCore 启动项中显示的名称Enabled启用或禁用PathTools 文件夹下的文件名如: VerifyMsrE2.efi

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

Arguments传递的参数Auxiliary: NOYES 默认隐藏NameOpenCore 启动项中显示的名称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 NVRAM

Add:

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

UIScale: OpenCore UI 和引导第一阶段缩放01: 正常大小02: HIDPI (使 FileVault 和 苹果标志 在原生 HIDPI 显示器上以正常大小显示)DefaultBackgroundColor: 默认背景颜色控制第一阶段苹果标志后面的背景颜色, 加特技格式为 16 进制颜色 RGBA: RR GG BB AA, 可以随意调整标准色:黑: 00 00 00 00灰: BF BF BF 00

7C436110-AB2A-4BBB-A880-FE41995C9F82

boot-args: -v debug=0x100引导标识符, 更多请查看 附录[3]csr-active-config: (SIP 设置)0x00000000 - SIP 完全开启0x30000000 - 允许未签名的 Kext 加载并允许写入受保护的文件系统路径0xE7030000 - SIP 完全关闭0x67000000 - 不再推荐使用nvda_drv: 设为 31 时启用 NVIDIA WebDrivers没有 N 卡可以删除此项prev-lang:kbd: (将默认语言设置为简体中文, 留空为英文)SystemAudioVolume: 0x460x80 为静音

Block: 强制重写 NVRAM 变量, 因为 Add 不会覆盖 NVRAM 中已经存在的值, 所以需要用 Block 删除原来的值 (如: boot-args) 来起到刷新的作用来注入上方的 Add

具体工作原理请参考 Acidanthera bugtracker #575

LegacyEnable: 允许从 nvram.plist 中读取 NVRAM 变量

没有原生 NVRAM 的设备设置为 YESmacOS 下硬件 NVRAM 工作「不」正常的设备设置为 YESmacOS 下硬件 NVRAM 工作正常的设备设置为 NO

LegacyOverwrite: NO

允许 nvram.plist 中的变量覆盖现有 NVRAM 的变量模拟 NVRAM 需要开启

LegacySchema:

选择注入的 NVRAM 变量, 其它未被包含的变量即使存在于 nvram.plist 也不会被注入, 与 LegacyEnable 配合使用

WriteFlash:

在有些有 bug 的 UEFI 固件上, 系统运行时不能将易失性变量转换为非易失性变量, 这个选项提供的是一个解决方案, 并没有增加一个新功能 PlatformInfo 机型信息

Auto: YES (基于 Generic 部分生成 PlatformInfo, 而不是 DataHub, NVRAM 和 SMBIOS 部分)

OpenCore 提供了大量方法来注入 PlatformInfo, 这里只介绍最简单的自动注入法

Generic:

AdviseWindows YES启用来允许重启到一个 ESP 分区不是磁盘中第一个分区的磁盘中的 WindowsSpoofVendor: YES仿冒制造商为 Acidanthera 来避免出现冲突SystemUUID:填入设备的硬件 UUID 以免造成 Windows 和其它软件的激活问题 (官方不再建议留空)MLB:用 macserial 读取或生成ROM: 可以是任意 6 Byte MAC 地址, 如 0x112233000000SystemProductName:用 macserial 读取或生成SystemSerialNumber:用 macserial 读取或生成

UpdateDataHub: YES (更新 DataHub)

UpdateNVRAM: YES (更新 NVRAM)

UpdateSMBIOS: YES (更新 SMBIOS)

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

macserial

使用 macserial 查看原有 PlatformInfo:

打开下载好的 MacInfoPkg

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

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

123cd ~/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 请输入如下命令来列出所有支持的设备型号:

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

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

1./macserial -m

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

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

UEFI

ConnectDrivers: YES

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

Drivers: 在这里添加你的 .efi 驱动

Audio:

这里的声卡设置只与 UEFI 环境相关, 不影响系统内音频, 但是需要确保系统内声卡正常工作, 这里填的部分值需要从系统内的 IOReg 提取

AudioSupport: YESYES 启用音频支持AudioDevice:声卡设备的 PCI 地址 PciRoot(0x0)/Pci...可以在 macOS 下运行 gfxutil -f HDEF 获得AudioCodec: 0声卡的 Codec 地址, 可以在 IORegistryExplorer 的 HDEF → IOHDACodecDevice → IOHDACodecAddress 中获得, 一般是 0x0直接搜索 IOHDACodecDevice 可以大幅节约时间AudioOut:指定的输出设备, 最简单的方法就是从 0 到 声卡总输出数 每个都试一遍声卡的总输出数 可以在 Debug 版本的 OpenCore 日志中获得 (n Outputs)MinimumVolume:输出最小音量, 有效值为 0 ~ 100如果下方 VolumeAmplifier 公式计算出的最小音量小于这里给出的值 Duang 就不会被播放PlayChime: YESYES 播放 DuangVolumeAmplifier: 1000音量在原有基础上放的百分比有效范围 0 ~ 1000

如果要让 Duang 和 VoiceOver 等其它音频功能工作, 需要额外下载语音资源包并放置于 ESP(分区)/EFI/OC/Resources/Audio 文件夹下, 下载地址 (注: 使用 git clone --depth=1 速度最快)。

同时 AudioDxe 也需要安装在 Drivers 文件夹中并通过 config 注入

Input:

KeyForgetThreshold: 5按住按键后每个键之间的时间间隔 (单位: 毫秒)KeyMergeTheshold: 2按住按键被重置的时间间隔 (单位: 毫秒)KeySupport: YES开启 OC 的内置键盘支持使用 AppleUsbKbDxe.efi 请设置为 NOKeySupportMode: Auto 键值转换协议模式V1: UEFI 旧版输入协议V2: UEFI 新输入协议AMI: APTIO 输入协议KeySwap: NO交换 Command 和 Option 键PointerSupport: NO修复 UEFI 选择器协议PointerSupportMode: 留空TimerResolution: 50000固件时钟刷新的频率 (单位: 100纳秒)华硕主板为自己的界面使用 60000苹果使用 100000

Output:

TextRenderer: BuiltinGraphics

文字渲染模式

BuiltinGraphics: 使用 OpenCore 内置文字渲染的图形模式, 并同时启用 OpenCore 自带的控制台管理, 支持 HIDPI 和全屏范围显示, 通常效果胜于下面的选项SystemGraphics: 使用主板固件自带文字渲染的图形模式, 并同时启用 OpenCore 自带的控制台管理SystemText: 使用主板固件自带文字渲染的文字模式, 并同时启用 OpenCore 自带的控制台管理SystemGeneric: 使用主板固件自带文字渲染的文字模式和自带的控制台管理

ConsoleMode: 留空

控制台模式

大多数固件上 留空 是最好的选择Max 会尽可能使用最大的 ConsoleModeTextRendere 使用 Builtin 时此项设置不生效

Resolution: Max

宽x高@Bpp (如: 3840x2160@32), 注意 Bpp 不是刷新率, 而是显示位深 (bits per pixel), 如果不清楚可以不填宽x高 (如: 3840x2160) 也是支持的留空 将不会改变 UEFI 的默认分辨率Max 将会尝试开启最大分辨率

这个选项在固件没有 GOP 时会失效

ClearScreenOnModeSwitch: NO

从图形模式切换到文本模式时, 某些固件仅清除屏幕的一部分, 导致屏幕上残留之前绘制的图片。 此选项会在切换到文本模式之前用黑色填充整个屏幕

DirectGopRendering: NO

开启后会直接使用 OpenCore 内置的 GOP 渲染控制台这个选项主要用于提升或修复 MacPro5,1 的渲染问题除非开启后能明显感觉到有改进否则不要开启

IgnoreTextInGraphics: NO

修复不用 -v 开机时日志覆盖苹果标志输出的问题

ReplaceTabWithSpace: NO

取决于固件, 某些设备在 UEFI Shell 中编辑文件使用 Tab键 出问题时启用。注意, 此选项只作用于 TextRenderer: System... (主板固件自带) 的文字渲染

ProvideConsoleGop: YES

macOS 引导加载程序要求 GOP (图形输出协议) 存在于控制台句柄上大部分的笔记本都不提供 GOP, 台式机的独立显卡可以单独刷入 GOP如果选择启动项之后不出现 macOS 启动 Verbose 请启用开启此选项能最大可能保证 OpenCore UI 和 苹果标志 以正确分辨率显示

ReconnectOnResChange: NO

有些固件在 GOP 分辨率改变后要求重新连接控制器才能输出文本, 开启这个选项会导致从 UEFI Shell 中启动 OpenCore 时直接黑屏, 尽量避免开启

SanitiseClearScreen: YES

修复 OpenCore 在高分屏中以 1024x768 显示的问题, 注意要同时开启带有 OpenCore 自带的控制台管理 (ConsoleControl) 的 TextRenderer (前三种) 并将 ConsoleMode 的内容 「留空」

Protocols: (协议)

AppleAudio: YES安装 Apple Audio 协议以在 OpenCore 中使用 VoiceOver, 目前该协议支持在 macOS 10.13 及以上播放音频, 老系统使用的 AppleHDA 协议暂未支持AppleBootPolicy: NO用于确保虚拟机或旧白苹果上兼容 APFSAppleEvent: NO用于在虚拟机或旧白苹果上兼容文件保险箱AppleImageConversation: NO重新安装 Apple Image Conservation 协议AppleKeyMap: NO重新安装 Apple Key Map 协议AppleSmcIO: YES重新安装 Apple SMC I/O 协议VirtualSmc.efi 已经被替代为此选项AppleUserInterfaceTheme: NO重新安装 Apple User Interface Theme 协议DataHub: NO重新安装 Data Hub 协议DeviceProperties: NO确保在 VM 或旧白苹果上完全兼容FirmwareVolume: NO修复 Filevault 的 UI 问题, 设置为 YES 可以获得更好地兼容 FileVaultHashServices: NO修复运行 FileVault 时鼠标光标大小不正确的问题, 设置为 YES 来在 Aptio IV 或更老的主板上兼容 FileVaultOSInfo: NO用于为主板或者其它程序接收来自 macOS 引导工具的消息UnicodeCollation: NO一些较旧的固件破坏了 Unicode 排序规则, 设置为 YES 可以修复这些系统上 UEFI Shell 的兼容性 (通常为用于 IvyBridge 或更旧的设备)

Quirks:

ExitBootServicesDelay: 0

IgnoreInvalidFlexRatio: NO

BIOS 中无法禁用 MSR_FLEX_RATIO(0x194) 时开启

ReleaseUsbOwnership: NO

从固件驱动程序中释放 USB 控制器所属权, 除非您不知道自己在做什么, 否则避免使用。Clover 的等效设置是 FixOwnership

RequestBootVarFallback: YES

用于修复启动项顺序

RequestBootVarRouting: YES

从 EFI_GLOBAL_VARIABLE_GUID 中为 OC_VENDOR_VARIABLE_GUID 请求 redirectBoot 前缀变量启用此项以便能够在与 macOS 引导项设计上不兼容的固件中可靠地使用 启动磁盘 设置

UnblockFsConnect: NO

惠普笔记本在 OpenCore 引导界面没有引导项时设置为 YES 解决 Clover 和 OpenCore 的冲突

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

删除 Clover 设置面板

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

Clover 设置面板位于 /Library/PreferencePanes/Clover.prefPane终端输入 sudo rm -rf /Library/PreferencePanes/Clover.prefPane 删除

清理 Clover 的模拟 NVRAM RC 脚本 和 守护程序 CloverDaemonNew

在终端中输入:

12345678910111213141516171819# 删除 ESP 分区下的 nvram.plistrm -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 重置

参考下文

现在是时候开机见分晓了

Success

完善与优化

这里只简单写了一些网上暂时还找不到中文解决方案的一些问题, 强烈推荐在看这里的同时参阅 xjn 大佬的博客

排除常见错误

遇到如下问题可以尝试这样设置:

进入 OpenCore 时卡在 no vault provided!:

Misc → SecurityVault = Optional

选完启动项后卡在 EndRandomSeed 或直接卡死

如果等一会能进入系统但是不跑码「或」不显示第一阶段的苹果标志:

UEFI → QuirksProvideConsoleGop = YES

如果完全卡死:

尝试 Misc → Boot 下 PollAppleHotKeys = NO, UEFI → Input 下 KeySupport = NO, 并换用 AppleUsbKbDxe.efi这个设备的 CFG 很可能有锁, 如下方案 「二选一」

解锁 CFG (建议), 参考 xjn 教程中的 解锁BIOS中的CFG功能 小节

Kernel → Quirks 下 AppleCpuPmCfgLock = YES, AppleCpuPmCfgLock = YES

这个方法的代价是丧失原生电源管理, 「不」建议长期使用

卡在 PCI Configuration Begin

BIOS 关闭 CSM 并设置操作系统模式为 Win8.1/10

依次尝试如下引导标识符

npci=0x2000npci=0x3000

如果依旧不行, 将 Booter → MmioWhitelist → Item 1 (Generic...) 下的 Enabled 改为 True

4 代 CPU 主板可以尝试同时开启 Item 0 下的补丁

开机出现 Failed to parse real field of type 1

这是因为 OC 本身不支持 real 类型的数据, Xcode 在编辑较长的数字的时候会自动将 Integer 转换为 real

用 VS Code 打开 config.plistCommand + F 查找替换所有 real 为 Integer

开机卡在 This version of Mac OS X is not supported

检查 Config 内 PlatformInfo 是否填写无误Automatic = YES如果使用的是 SampleFull, 确保所有内容都已完整填写

300 系主板卡在 apfs_module_start

较新的主板使用了新的时钟 AWAC 来代替 RTC, 这个设备与 macOS 不兼容, 下面的方法 「二选一」(推荐) 添加 SSDT-AWAC 来屏蔽 AWAC 并启动 RTC用 SSDT-RTC0 仿冒 RTC

华硕或惠普关机后 BIOS 重置或被强制进入安全模式

将 Kernel → Patch → Item 0 (com.apple.driver.AppleRTC) 下的 Enabled 改为 YES 来开启 AppleRTC Patch

UEFI 引导项选择完 OpenCore 之后直接跳回选择界面

参考上文重新核对 ESP 分区中的文件夹结构, 确保 UEFI 启动项添加的是 OpenCore 的 Bootx64.efi 模拟 NVRAM 开始之前先在这里澄清一些被广泛误解的理论并解释一些常见问题

什么是 NVRAM:

非易失性随机存取存储器 (NVRAM) 是随机存取存储器 (RAM) 的一种; 在依赖主板上 CMOS 电池时, 即使断开电脑电源, 该存储器仍可以保证存储的数据不丢失NVRAM 里存有大量敏感参数, 如: UEFI 安全启动的 KEK, PK, DB 和 DBX, 因此 NVRAM 需要是一种提供随机访问功能的非易失性存储器, 且需要通过特定的 GUID 读写

没有「原生 NVRAM 」的含义:

所谓 “没有「原生」NVRAM” 实际上指的是 macOS 在 使用 APTIO 内存修复驱动 的环境下 NVRAM 的「写入」依旧没有被修复, 导致变量无法存入主板现在支持 UEFI 的主板都支持 NVRAM, 而且 NVRAM 在 Windows 或者 Linux 下完全正常工作macOS 可以正常读取 NVRAM, 也就是说在 Windows 下给 NVRAM 中的 7C436110-AB2A-4BBB-A880-FE41995C9F82:bootargs 加上 -v 后重启进入 macOS 会直接进入啰嗦模式「没有 原生 NVRAM」很容易误解为这个主板如同传统 BIOS + MBR 引导的主板一样完全不支持 NVRAM「原生 NVRAM」实际上应该理解为 macOS 可以正常读写「硬件」NVRAM

没有原生或模拟 NVRAM 的影响:

无法使用偏好设置的 启动磁盘 为 OpenCore 指定默认引导项FakeSMC 的部分 SMC Key 无法保存AsusSMC.kext 会丢失键盘在上次关机时的亮度

没有原生或模拟 NVRAM 完全不影响系统的正常运作, 更不存在不模拟 NVRAM 就没法开机的谬论

哪些主板的硬件 NVRAM 在 macOS 下不正常工作:

部分 X99 和 X299 芯片组主板之前 300 系的 NVRAM 问题已经通过 SSDT 添加 PMC 设备的方式解决

验证你的主板的 NVRAM 在 macOS 下是否正常工作:

有时候只参考并不能得出准确的结论, 实际试验一下更加准确

删除引导工具内的 VariableRuntimeDxe.efi, EmuVariableRuntimeDxe.efi, EmuVariableUefi.efi删除 NVRAM 导出脚本 LogoutHook(参考下文), RC Script(参考上文)删除 EFI 分区根目录下的 nvram.plist重启在终端输入 sudo nvram myvar=test再次重启在终端输入 nvram -p | grep -i myvar如果终端成功输出了 test 那就说明你的主板在 macOS 下硬件 NVRAM 正常工作, 反之就是「不」正常工作

模拟 NVRAM 是什么, LogoutHook 扮演什么角色:

模拟 NVRAM 是通过 VariableRuntimeDxe(EmuVariableRuntimeDxe/EmuVariableUefi) 模拟出一个 macOS 可读写的重启「不记忆」NVRAM, 里面的内容与硬件层面的 NVRAM 完全隔离, 引导工具在加载完这个驱动后自身也会进入这个环境中并失去对硬件 NVRAM 的控制LogoutHook 是一个在账户注销前运行的脚本, 运行时会用 nvram -x 命令将 NVRAM 中的信息导出至 EFI 分区根目录的 nvram.plist 中, OpenCore 在下一次开机时会读取 nvram.plist 里面的内容并写进硬件 NVRAM 中

可以直接使用别人生成的 nvram.plist 吗

使用别人的 nvram.plist 时, 只有 7C436110-AB2A-4BBB-A880-FE41995C9F82 下的内容可以正常工作8BE4DF61-93CA-11D2-AA0D-00E098032B8C 下的内容由于 UUID 不同完全无法工作, 完全无法为 OpenCore 指定默认引导项即使不模拟 NVRAM, OpenCore 和 FwRuntimeServices 提供的 7C436110-AB2A-4BBB-A880-FE41995C9F82 模拟已经足以在 nvram.plist 中正确生成此项所以这么做完全没有意义 用 LogoutHook 模拟 NVRAM 并为 OpenCore 指定默认引导项

确认主板在 macOS 下 NVRAM 不正常工作后我们可以通过安装 OpenCore 提供的 LogoutHook 来模拟 NVRAM

这里强烈建议在开始之前用 OpenCore 重置 NVRAM 并通过 VariableRuntimeDxe.efi 创建一个虚拟的可正常读写的 NVRAM

如果严格按照这个流程执行且 Config 内 BlessOverride 和启动项的路径均已设置正确, 那么理论上 启动磁盘 为 OpenCore 指定默认引导项的功能已经可以正常工作

如果 OpenCore 无法正确识别 Windows 建议先修复这个问题再模拟 NVRAM

按照上文的方法清理 Clover 的 RC 脚本

彻底删除之前安装的 LogoutHook

终端输入: sudo defaults read com.apple.loginwindow LogoutHook 来获取 LogoutHook 的路径

如果终端输出的不是一串路径, 而是

The domain/default pair of (com.apple.loginwindow, LogoutHook) does not exist

说明系统内没有安装 LogoutHook, 跳过下面的命令直接继续下一步 Config 的设置

输入如下命令来删除 LogoutHook.command 并清空触发设置 (请按顺序执行!!!)

12345# 删除文件 LogoutHook.commandsudo rm -rf $(sudo defaults read com.apple.loginwindow LogoutHook)# 清空 LogoutHook 的触发设置sudo defaults delete com.apple.loginwindow LogoutHook

Config 中:

Booter → Quirks → DisableVariableWrite 设置为 YESMisc → Security → AllowNvramReset 设置为 YESMisc → Security → ExposeSensitiveData 设置为 3NVRAM → LegacyEnable 设置为 NO

删除引导工具内 config.plist「和」Drivers 目录 下的 VariableRuntimeDxe.efi, EmuVariableRuntimeDxe.efi

删除 EFI 分区下的 nvram.plist

重启

进入 OpenCore 然后 选择引导界面的重置 NVRAM 选项「或者」按下快捷键 Command + Option + P + R

设备自动重启后, 进入 BIOS, Windows 或者 Win PE 重新为 OpenCore 添加引导项

OpenCore 重置 NVRAM 时相比 Clover 会重置更多的变量, 理论上更干净, 但是会导致 UEFI 引导项丢失

进入 macOS, 在 Config 里将 NVRAM → LegacyEnable 设置为 YES, UEFI → Drivers 下添加 VariableRuntimeDxe.efi

1234▼ UEFI |__ ▼ Drivers |__ Item # FwRuntimeServices.efi |__ Item #+1 VariableRuntimeDxe.efi

在 EFI/OC/Drivers 文件夹下放入 VariableRuntimeDxe.efi

再次重启

进入 macOS, 打开 偏好设置/启动磁盘, 解锁后选择你的 macOS 分区然后 「锁上」

终端输入命令检查 NVRAM 变量是否成功写入:

1nvram -x '8BE4DF61-93CA-11D2-AA0D-00E098032B8C:Boot0080' | sed '/\/,/\/!d;//d' | base64 --decode如果输出的「结尾」部分包含 \System\Library\CoreServices\boot.efi 我们可以继续执行下面的步骤如果显示 nvram: Error getting variable - '8BE4DF61-93CA-11D2-AA0D-00E098032B8C:Boot0080': (iokit/common) data was not found 说明模拟 NVRAM 没有成功, 请回到第一步重来

在终端中输入 sudo + 空格 然后将 LogoutHook 拉进终端的「窗口中」, 按下回车, 输入密码, 再次回车 (临时运行 LogoutHook)

终端中会出现一排上上步提到的错误, 这是正常的因为我们没有其它的引导项 (Boot0081~3) 和上次引导的记录 (BootCurrent) 等等, 只需要确保 「没有任何关于」Boot0080 和 BootOrder 的错误出现就可以了 (BootNext 也会报错但是实测没有影响)

挂载 EFI 分区并打开根目录下的 nvram.plist, 检查 Boot0080 和 BootOrder 是否存在

12345678▼ ROOT |__ ▼ Add |__ ▼ 7C436110-AB2A-4BBB-A880-FE41995C9F82 | |__ ... ... | |__ 用 Hackintool 核对内容是否一致 |__ ▼ 8BE4DF61-93CA-11D2-AA0D-00E098032B8C |__ Boot0080 ... |__ BootOrder ...

如果没有问题, 在终端输入如下命令「安装」LogoutHook:

123mv (空格, 把 LogoutHook 拖窗口, 然后再空格) $HOME/.LogoutHook.commandsudo $HOME/.LogoutHook.command install

如果使用 10.12 或更老的系统则需要将 nvram.mojave 也复制到 $HOME 下

mv (空格, 把 nvram.mojave 拖窗口, 然后再空格) $HOME

再次删除引导工具内 config.plist「和」Drivers 目录 下的 VariableRuntimeDxe.efi

非常重要! 不要漏了而前功尽弃!

大功告成! 修复 OpenCore 引导界面的显示问题

在 Config 中:

UEFI → ProtocolsConsoleControl = YESUEFI → QuirksProvideConsoleGop = YESIgnoreTextInGraphics = YESSanitiseClearScreen = YESMisc → BootConsoleMode = 留空Resolution 设置为显示器的正常分辨率, 如 4k: 3840x2160UEFI → OutputTextRenderer = BuiltinGraphics

如果 OC 界面出现在显示屏中央, 即使画面没有扭曲也说明分辨率不正常

将 ConsoleMode 设置为 Max 并关闭 SanitiseClearScreen 在某些固件上也可以做到分辨率正确, 但是这个方法官方 「不」推荐使用

在 OpenCore 中启用 FileVault 文件保险箱

在 Config 中:

Misc → SecurityAuthRestart = YESUEFI → InputKeySupport = YESUEFI → ProtocalsFirmwareVolume = YESAppleSmcIo = YESProvideConsoleGOP = YESRequestBootVarRouting = YES(Haswell 或更老的主板中 (包括 X99)) HashServices = YES(在 Aptio IV 固件的主板上, 如果遇到了 Still waiting for root device) ExitBootServicesDelay = 5 修改 OpenCore 引导界面的启动项名称

在与引导项的 .efi 文件的同一目录下添加纯文本文件 .contentDetails 可以修改对应启动项的名称

注意⚠️!!! 启动项名称只能是 ASCII 字符!!!

下方的命令修改的是当前 macOS 的启动项名称, 修改其它分区的 macOS 前需要先进入其目录, 这里不再赘述

删掉 .contentDetails 就可以恢复原来的名称

终端输入:

12345678910111213141516sudo -s# 在 macOS 10.15 挂载系统分区为读写mount -uw / && killall Finder# macOSecho "启动项名称" >> /System/Library/CoreServices/.contentDetails# Windows 没有使用 BlessOverrideecho "启动项名称" >> /Volumes/(你的 ESP 分区)/EFI/Boot/.contentDetails# Windows 使用了 BlessOverrideecho "启动项名称" >> /Volumes/(你的 ESP 分区)/EFI/Microsoft/Boot/.contentDetails# 退出 sudo -sexit 附录[1] – OpenCore 支持的内核驱动 (Kext) 及其用途

参考 https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Kexts.md

GitHub 项目的下载地址位于 Release 下, 驱动具体支持的设备请进入项目地址查看

有线网卡驱动及项目地址备注AppleRTL8169EthernetRealtek RTL8169 官方驱动AtherosE2200Ethernet.kext高通 Atheros Killer E2200 系列驱动AtherosL1cEthernet.kext高通 Atheros AR813x/815x 驱动IntelMausi.kext英特尔有线网卡 Acidanthera 分支IntelMausiEthernet.kext英特尔有线网卡原作者NullEthernetInjector.kext仿冒内建网卡 (没有可用的内建网卡时使用)RealtekR1000SL.kextRealtek 8111B/C/D/E/EP/F/G/GU/8411B 系列驱动RealtekRTL8100.kextRealtek RTL810X 系列驱动RealtekRTL8111.kextRealtek RTL8111/8168 系列驱动 Wi-Fi 和蓝牙驱动及项目地址备注AirPortAtheros40.kext高通 Atheros AR92xx/AR93xx 驱动, 仅用于 10.14+AirportBrcmFixup.kext非苹果官方博通网卡修复ATH9KFixup.kext高通 Atheros AR9xxx 无线网卡修复BrcmPatchRAM.kext博通网卡蓝牙固件上传BT4LEContinuityFixup.kextIOBluetoothFamily 修补MT7610联发科 MT7610RT5370联发科 RT5370RTL8192CURealtek RTL8192CU 驱动 (链接为谷歌云盘) 键盘, 鼠标和触摸设备驱动及项目地址备注ApplePS2SmartTouchPad.kext触摸板和键盘AsusSMC.kext华硕 Fn 键, 键盘背光灯和环境光传感器 驱动NoTouchID.kext禁用 Touch ID 检测, 修复输密码时卡顿SerialMouse.kext使用 Microsoft 串行鼠标协议的串行鼠标驱动VoodooI2C.kextI2C 触摸板/屏 驱动VoodooPS2Controller.kextPS2 键盘/触摸板 驱动 显卡和声卡驱动及项目地址备注AppleALC.kext定制万能声卡驱动NVIDIA CUDA driversNVIDIA CUDA 驱动NVIDIA Web-driversNVIDIA 显卡驱动SNBGraphicsMojaveInstaller二代酷睿核显驱动, 仅用于 10.14+VoodooHDA.kext万能声卡驱动WhateverGreen.kext显卡补丁驱动Polaris22Fixup.kextPolaris22/VegaM 显卡修复 CPU 和 SMC驱动及项目地址备注CPUFriend.kextCPU 变频管理FakeSMC.kext and sensorsClover 官方 FakeSMCHWPEnabler.kext启用 HWPNullCPUPowerManagement.kextAMD 和虚拟机专用版本OpcodeEmulator.kextOpcode 模拟驱动TSCAdjustReset.kextTSC 频率同步驱动VirtualSMC.kext 及传感器Acidanthera 的 SMC 和传感器驱动VoodooTSCSync.kextTSC 频率同步驱动 USB 和 其它接口驱动及项目地址备注IOElectrify.kext在雷电 3 设备上启用常开电源USBWakeFixup.kext修复 Skylake 平台 USB 唤醒黑屏SASMegaRAID.kextLSI MegaRAID SAS 系列 RAID 控制器驱动Sinetek-rtsx.kextRealtek RTSX SDHC 读卡器驱动VoodooSDHC.kextSDHC 读卡器驱动 其它驱动驱动及项目地址备注AppleIntelInfo.kextCPU / 核显 变频测试HibernationFixup.kext修复因 RTC 变量和 NVRAM 造成的睡眠问题Lilu.kextSDK & LibraryLiluFriend.kext用于确保 Lilu 在 L/E 下正常加载RTCMemoryFixup.kext修复 BIOS CMOS (RTC) 内存和 AppleRTC 之间的冲突问题NightShiftUnlocker.kext解锁 NightShiftWebCamera.kext某些旧设备的摄像头驱动 附录[2] – UEFI 驱动 (.efi) 及其用途 OpenCore 支持的 UEFI 驱动ApfsDriverLoaderAPFS 文件系统引导驱动AudioDxeOpenCore 用于在 UEFI 环境播放音频的驱动CrScreenshotDxe增加 OpenCore UI 内截屏功能, 快捷键为 LCtrl + LAlt + F12 ( 左Ctrl + 左Alt + F12)FwRuntimeServices通过支持只读和只写 NVRAM 变量来提高 OpenCore 和 Lilu 的安全性。有些设置项, 例如 RequestBootVarRouting, 需要此驱动程序才能正常运行HFSPlus苹果自带的闭源 HFS 驱动, 不具有 Bless 和其它功能, 但是启动速度比它的等效驱动 VBoxHfs 快 3 倍HiiDatabase.efi用于给 Ivy Bridge (3 代酷睿) 或更老代主板上支持 UEFI 字体渲染, UEFI Shell 中文字渲染异常时使用, 新主板不需要NvmExpressDxe从 Broadwell 开始的大多数固件中都包含此驱动程序。对于 Haswell 及更早的固件, 如果安装了 NVMe SSD 就需要使用MemoryAllocation.efi为 Z390/X99 等主板预留第一组 512MB 内存, 帮助引导工具注入内核以及内核缓存至第一组 512MB 内存, 需要配合 FwRuntimeServices 和引导标识符 slide=1AppleUsbKbDxe添加了对 AppleKeyMapAggregator 协议支持的 USB 键盘驱动, 这是 AppleGenericInput 的等效驱动, 根据固件的不同, 实际效果会更好或更坏VariableRuntimeDxeEDK II 的 NVRAM 驱动, OpenCore 中用于模拟 NVRAM, 需要配合 FwRuntimeServices(.efi) 和 DisableVariableWrite(Quirk)VBoxHfs具有 bless 支持的 HFS 文件系统驱动程序。该驱动程序可以等效替代 Apple 固件中常见的闭源 HFSPlus 驱动。此驱动虽然功能更加完善, 但启动速度相比大约慢 3 倍,并且尚未经过安全审核XhciDxe来自 MdeModulePkg 的 XHCI USB 控制器支持驱动程序。从 Sandy Bridge 开始的大多数固件中都包含此驱动程序。在较旧的固件上可以用于支持 USB 3.0 PCI 卡

部分网上无法找到的 UEFI 驱动可以在这里下载

Download

OpenCore 不兼容的 UEFI 驱动AppleGenericInput添加了对 AppleKeyMapAggregator 协议支持的用户输入驱动。此外, 还解决了某些固件上的鼠标输入问题, 这是 AppleUsbKbDxe 的等效驱动, 根据固件的不同, 实际效果会更好或更坏已合并入 OpenCoreAppleImageCodec为 Clover 启动 FileVault 2 解码 PNG 和 BMP, OpenCore 已集成AppleKeyAggregator为 Clover 支持 FileVault 2 启动 UI 的驱动, OpenCore 已集成AppleKeyFeeder为 Clover 支持 FileVault 2 内 PS/2 键盘输入的驱动, OpenCore 已集成AppleUITheme为 Clover 支持 FileVault 2 启动 UI 主题的驱动, OpenCore 已集成AptioInputFix & AppleGenericInput用于解决 UEFI 固件输入问题的驱动, 已与 OpenCore 合并AptioMemoryFixNVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 已与 OpenCore 合并为 FwRuntimeServicesCsmVideoDxe用于 Clover GUI 的显卡驱动, 允许使用更多分辨率, 基于 UEFI BIOS 中的 CSM 兼容模块, 并将启用所需的 CSM, OpenCore 不兼容DataHubDxemacOS 必需的 DataHub 协议, OpenCore 自带且提供了这个 QuirkEmuVariableUefiClover 的模拟 NVRAM 驱动, OpenCore 不兼容, 替代品为 VariableRuntimeDxeEnglishDxe在 UEFI Shell 中支持 UnicodeCollation 协议, OpenCore 自带且提供了这个 QuirkEnhancedFatDxe这个驱动已存在于所有 UEFI 固件中, 无法从 OpenCore 直接使用。由于很多固件的 FAT 支持都有问题, 导致在尝试写入时会损坏文件系统。如果在引导过程中写入 EFI 分区出现问题, 则需要将此驱动用 UEFITool 刷入固件中FirmwareVolume为 Clover 启动 FileVault 2 创建 FirmwareVolume 光标的驱动, OpenCore 已集成FSInjectClover 用于注入内核驱动 (Kext) 的驱动, OpenCore 自带且使用更先进的方法HashServiceFix修复 UEFI BIOS 中的哈希支持, OpenCore 自带且提供了这个 QuirkOsxAptioFixDrv旧的 Clover NVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容OSXAptioFix2Drv-Free2000.efiClover 的内存驱动, 用于修复 UEFI 固件上的内存问题, 作者已经声明会损坏硬件OsxAptioFix3DrvClover NVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容OsxFatBinaryDrvClover 用于支持 OS X 10.9 和更早版本的 FAT Binary 可执行文件的驱动, 与 FwRuntimeServices 和 OpenCore 不兼容OsxLowMemFixDrv精简版的 OsxAptioFixDrv, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容PartitionDxe用于支持非常规分区图的驱动, 如: 混合 GPT/MBR 或 Apple 分区图, OpenCore 兼容性未知Ps2MouseDxePS/2 鼠标驱动, 这个驱动已存在于所有 UEFI 固件中SMCHelperUEFI 层面的 SMC 驱动, 用于与 FakeSMC 配合。与 OpenCore 不兼容VirtualSmcUEFI 层面的 SMC 驱动, 已与 OpenCore 合并其它未在本文中提到的 UEFI 驱动一律不兼容 附录[3] – 常用内核引导标识符合集引导标识符作用-amd_no_dgpu_accel关闭 AMD 显卡硬件加速cpus=#启用 # 个 CPU 核心darkwake=0禁用 Power Napdart=0禁用 VT-ddebug=0x100发生 KP 时不自动重启keepsyms=1发生 KP 时保留 Debug Symbols, 用于给开发者反馈问题kext-dev-mode=1启用 Kext 开发模式, 非开发者请勿使用-no_compat_check关闭兼容性检查npci=0x2000在旧设备上禁用 kIOPCIConfiguratorPFM64nvda_drv=1启用 N 卡驱动的老方法, 在 10.12 及以后失效nv_disable=1关闭 N 卡硬件加速-s单用户模式slide=#手动设置 KASLR slide 值为 #-vverbose 跑码模式-x安全模式

内核驱动提供的引导标识符请去对应驱动的 Readme 查看

参考及引用Apple 的 macOSAcidanthera 的 OpenCore 及其官方文档khronokernel 的 Getting-Started-With-OpenCore 和 Opencore-Vanilla-Desktop-GuideTonymacx86 的 Emulated-NVRAM-Uninstallerxjn 的博客 使用OpenCore引导黑苹果 鸣谢宪武 提供的 OpenCore SSDT Hotpatch 典范 OC-littlexlivans, 子俊 对 OpenCore 的大量跟进和研究OpenCore 交流群成员进行的大量测试Bat.bat 对教程对审核更新完善


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3