精解OpenCore

精解 OpenCore

什么是 OpenCore

OpenCore 是一个最初诞生于 HermitCrabs 实验室的项目, 它不仅适用于黑苹果, 还可以用于模拟 EFI 等其他目的。OpenCore 相较于 Clover 最大的亮点就是它完全支持安全启动。请记住, OpenCore 目前还处于开发的初期阶段, 因此会出现很多不可预测的问题。本教程省略了 Vault.plist 和 Vault.sig 的配置讲解, 因为这个功能仍然需要更多发展。此时, 我们应将 OpenCore 视为 Alpha 阶段。如果你将你的系统用于生产工具, 就不要去尝试 OpenCore 了, 除非你热衷于前沿的体验和开发, 并且不介意随时重装你的系统。

OpenCore 的已知问题

  • Z97 主板需要纯 UEFI 模式才能引导 (也称为 Windows 8/10 模式).
  • 如果在 BIOS 中设置硬盘类型为 SATA 时, NVMe 会出问题。
  • 有时无法访问硬盘上的其他分区

配置 OpenCore

准备工作

下载如下文件

  • OpenCorePkg (建议从 Acidanthera 的官方例子开始构建, 而不是使用其他人做好的样板, 因为 OpenCore 会不断更新。截至编写时, 最新版为 0.0.3 目前的官方发布是 0.0.2)

  • AppleSupportPkg

  • AptioFixPkg

  • Plist 编辑器:

    OpenCore Configurator [1], OpenCore Configurator [2] 是两个第三方配置工具, 但是 vit9696 多次声明 他不建议使用这些工具因为它们在编辑时会破坏 OpenCore 的文件格式并且会造成一系列未知问题。使用风险自负!

需要具备的条件

  • 一个 U 盘
  • 对黑苹果有一定的知识基础, 至少会自己配置 Clover, 清楚各个 内核驱动 .Kext 和 UEFI .efi 驱动的用途
  • 一个正常稳定工作的黑苹果测试平台
  • 如果你希望将 OpenCore 用作主引导加载程序, 你必须从系统中完全删除 Clover (NVRAM 冲突)。注意备份原有的 Clover EFI 文件。

创建 USB 启动盘

  1. 为了不干扰当前引导工具, 建议单独创建一个 USB 启动盘, 创建 USB 启动盘很简单。你需要做的就是将其格式化为 GUID 分区图, 分区类型为 macOS 日志式。由于 OpenCore 的整个 EFI 小于 5MB, 因此 U 盘没有大小要求。

    FormatUSB

  2. 挂载 EFI 分区

    你会注意到, U 盘的 EFI 分区是空的, 于是正真有意思的部分就开始了。

    EmptyEFI

基础文件夹结构

  1. OpenCore 的正确文件结构如下所示, 你需要从 OpenCorePkg 中提取这些文件并创建这些文件夹:

    Structure

  2. 现在, 你可以将 AppleSupportPkgAptioFixPkg 中必需的 .efi 驱动程序放入 drivers 文件夹, 将 你的 KextACPI 表 放入各自的文件夹中。请注意, OpenCore 不支持额外的 UEFI 驱动程序!

  3. 完成后的效果 (请忽略这些随便放的驱动):

    StructureFilled

配置 Config.plist

  • 请记住 OpenCore 中的 Config.plist, 与 Clover 的 Config.plist 不同。他们不能混合滥用。
  • 如果你不清楚某一个项里应该填什么类型的值, 请参考 OpenCore 官方文档
  1. 复制 sample.plist, 将副本重命名为 Config.plist 并在 Xcode 中打开。

    ConfigSample

  2. 此时你已经注意到里面有很多子项:

    • ACPI: 用于加载, 屏蔽和修补 ACPI (DSDT, SSDT) 表
    • DeviceProperties: 用于设置 PCI 设备补丁的地方, 如英特尔缓冲帧补丁, 声卡 Layout ID
    • Kernel: 用于说明 OpenCore 的具体加密信息, 配置 Kext 加载顺序以及屏蔽驱动
    • Misc: OpenCore 的自身设置
    • NVRAM: 用于设置 NVRAM 属性 (如引导标识符和 SIP)
    • Platforminfo: 用于设置 SMBIOS 机型信息
    • UEFI: 用于告诉 OpenCore 要加载哪些 UEFI 驱动以及以何种顺序加载

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

ACPI

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

Block: 我们暂时不会在这里做任何修改

Patch: 在这里你可以添加一些 USB 和 SATA 补丁

Quirk: ACPI 的设置

  • FadtEnableReset: NO (在旧硬件上修复重启和关机, 除非需要, 否则不推荐开启)
  • IgnoreForWindows: NO (在启动 Windows 时禁用 ACPI 修改, 仅适用于创建了损坏的 ACPI 表的人)
  • NormalizeHeaders: NO (清除 ACPI 头字段, 无需在 macOS 10.14 中使用)
  • RebaseRegions: NO (尝试重新定位 ACPI 内存区域)
  • ResetLogoStatus: NO (运行 BGRT 表的系统的解决方法)

ACPI

DeviceProperties 设备属性

你需要先通过 Hackintool 或者 Windows 设备管理器 等工具查看 Pci 设备地址

Add: 设置设备属性

PciRoot(0x0)/ Pci(0x2,0x0) -> AAPL, ig-platform-id

  • 应用缓冲帧补丁, 查看此处来确认你需要的缓冲帧补丁。不要忘记添加 Stolemenpatch-enable 补丁。

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

  • 应用 AppleALC 音频 Layout ID 注入

屏蔽: 用于删除设备属性 (可以删除此项, 与大多数用户都用不到).

DeviceProperties

Kernel 核心

Add: 这里是你指定要加载哪些 Kext 的地方, 这里的顺序非常重要, 所以请确保 Lilu.Kext 始终在第一位! 其他优先级更高的 Kext 为 Lilu 的插件, 如 VirtualSMC, AppleALC, WhateverGreen 等。(有些驱动里面还包含插件驱动, 如: VoodooI2C, VoodooPS2 注意要把里面的插件也全部列出)

Block: 屏蔽系统里的 Kext。有时需要为一些笔记本电脑禁用 Apple 的 I2C 驱动程序。

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

Quirks:

  • AppleCpuPmCfgLock: NO (仅在 BIOS 中无法禁用 CFG-Lock 时才需要)
  • AppleXcpmCfgLock: NO (仅在 BIOS 中无法禁用 CFG-Lock 时才需要)
  • DisbaleIOMapper: NO (需要绕过 VT-D 且 BIOS 中禁用时使用, 可能会干扰固件)
  • ExternalDiskIcons: YES (硬盘图标补丁, 用于 macOS 将内部硬盘视为外接硬盘时)
  • ThirdPartyTrim: NO (启用 TRIM, AHCI 或 NVMe SSD 不需要)
  • XhciPortLimit: YES (这实际上是 15 端口限制补丁, 最好不要依赖它, 因为它不是 USB 的最佳解决方案。请选择定制 USB。这个选项是给那些没有定制 USB 的人用的)

Kernel1

Kernel2

图片只是个别例子, 请在配置时完整填写

Misc 杂项

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

  • Timeout: 5 (设置 OpenCore 的等待的时间)。

Debug: Debug 有特殊用途, 除非你知道你在做什么, 否则保持原样。

  • DisableWatchDog: NO (如果 macOS 在启动时卡在某些地方, 可能需要设置为 YES)

Security: 安全性

  • RequireSignature: NO (我们不会使用 Vault.plist, 所以我们可以忽略)
  • RequireVault: NO (我们不会使用 Vault.plist, 所以我们也可以忽略)
  • ScanPolicy: 0 (允许显示所有可用的硬盘)

Misc

NVRAM

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

  • boot-args: -v dart = 0 debug = 0x100 keepsyms = 1 等 (引导标识符)
  • csr-active-Config: <00000000> (SIP 的设置)
  • nvda_drv: <> (用于启用 WebDrivers)
  • prev-lang:kbd: <> (非拉丁语键盘需要启用)

Block: 屏蔽我们不需要的 NVRAM 变量, 删除那里的入口。

NVRAM

PlatformInfo

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

Generic: (通用)

  • SpoofVendor: YES (仿冒制造商)
  • SystemUUID: 可以使用 MacSerial 生成, 也可以使用之前 Clover 用的。
  • MLB: 可以使用 MacSerial 生成, 也可以使用之前 Clover 用的。
  • ROM: <> (自动填写)
  • SystemProductName: 可以使用 MacSerial 生成, 也可以使用之前 Clover 用的。
  • SystemSerialNumber: 可以使用 MacSerial 生成, , 也可以使用之前 Clover 用的。

UpdateDataHub: YES (更新 DataHub)

UpdateNVRAM: YES (更新 NVRAM)

UpdateSMBIOS: YES (更新 SMBIOS)

UpdateSMBIOSMode: Create (用新分配的 EfiReservedMemoryType 替换原有的表)

PlatformInfo

UEFI

ConnectDrivers: YES (强制加载 .efi 驱动程序, 更改为 NO 可以获得更快的启动速度)

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

Protocols: (协议)

  • AppleBootPolicy: NO (用于确保虚拟机或旧版 Mac 上的 APFS 兼容性)
  • ConsoleControl: NO (替换内置版本的控制台控制协议, 当固件不支持文本输出模式时需要)
  • DataHub: NO (重新安装数据库)
  • DeviceProperties: NO (确保在 VM 或旧 Mac 上完全兼容)

Quirks:

  • ExitBootServicesDelay: 0
  • IgnoreInvalidFlexRatio:NO (在 BIOS 中无法禁用 MSR_FLEX_RATIO(0x194) 时的修复)
  • IgnoreTextInGraphics:NO (修复文本和图形输出时 UI 变形)
  • ProvideConsoleGop:NO (启用 GOP, AptioMemeoryFix 已包含)
  • ReleaseUsbOwnership:NO (从固件驱动程序中释放 USB 控制器)
  • RequestBootVarRouting:NO (将 AptioMemeoryFix 从 EFI_GLOBAL_VARIABLE_G 重定向到 OC_VENDOR_VARIABLE_GUID。当固件尝试删除引导条目时需要)
  • SanitiseClearScreen:NO (修复 OpenCore 在高分屏中以 1024x768 显示)

UEFI

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

ConfigComplete

现在是时候开机见分晓了

Success

使 OpenCore 成为主引导工具

如果你已经准备好完全切换至 OpenCore, 你要做的就是彻底清除 Clover。要注意的是:

  • Clover 还存在于你的 EFI 分区中
  • Clover 注入的 NVRAM 依然存在于你的设备中
  • Clover 的 RC 脚本存在于你的设备中 (如果你使用了 EmuVariableUefi-64.efi 和 Clover 模拟 NVRAM)
  • Clover 相关的内容可能还隐藏在其他位置 (Clover 控制面板和其他基于 Clover 的工具)

清理其实非常简单 (请按如下顺序执行)

  1. 对于 RC 脚本, 需要删除 macOS 下的如下文件(夹):
    • /Volumes/EFI/nvram.plist
    • /etc/rc.clover.lib
    • /etc/rc.boot.d/10.save_and_rotate_boot_log.local
    • /etc/rc.boot.d/20.mount_ESP.local
    • /etc/rc.boot.d/70.disable_sleep_proxy_client.local.disabled
    • /etc/rc.boot.d/80.save_nvram_plist.local
    • /etc/rc.boot.d
    • /etc/rc.shutdown.d
  2. 对于你的 EFI 分区, 你只需要将其挂载, 将里面的 Clover 移动到安全的地方 (比如急救 U 盘) 并将 OpenCore 的 EFI 文件夹复制到硬盘的 EFI 分区。某些 BIOS 可能要求你手动删除 EFI 引导选项里的 Clover (并且个别例外主板可能需要恢复出厂设置才能永久删除它)
  3. 对于 NVRAM, 可以通过 OpenCore 加载 AptioMemoryFix 的清除 NVRAM 工具清除, 也可以通过 Clover F11 清除 (请注意, Clover 清除完之后, 不要用 Clover 再次引导你的 macOS)
  4. 关于依赖 Clover 的应用程序, 你需要自己查看确认, 但主要的罪魁祸首是 Clover 的设置面板, 它用于更新 Clover (我想你现在已经意识到了这个问题)。你可以在: /Library/PreferencePanes/Clover.prefPane 找到并删除它。

扩展阅读:

OpenCore 部件补丁

特别感谢:

  • @宪武 制作的适用于 OpenCoreACPI 部件补丁
  • @Bat.bat 审核完善

参考及引用

更新日期更新日期2019-09-082019-09-08
-------------本文结束感谢您的阅读-------------
如果文章对您有帮助,就请站长喝杯咖啡吧 ´◡`
0%