概述
众所周知,目前黑苹果主要使用 Clover 和 OpenCore 进行引导,在它们的文件目录中,除了 .kext 文件很重要之外,就是 .efi 文件了。.efi 是 Extensible Firmware Interface File(可扩展固件接口文件) 的缩写,苹果公司将这类文件用在 tvOS、macOS 等系统中,用于定义固件和操作系统之间的接口的数据。在黑苹果中,需要根据不同的硬件配置,搭配不同的第三方 .efi 文件,实现不同的功能。
Clover 文件树说明
下面介绍一下 Clover 的基本文件结构,请注意这里以 Clover r5100及以上版本用 UEFI 引导为例,已经 2022 年了,如非必要建议不要使用不支持 UEFI 的老古董了。在一个完整的 Clover 引导文件夹中,其文件目录树应该如下:
以下 Clover EFI 文件夹大部分时间是用不上的,也不是必须的目录,可以删除:
以下文件和目录是必须的:
其中 BOOTx64.efi 和 CLOVERX64.efi 其实是同一个文件,config.plist 是 Clover 的参数配置文件,以上三个文件都是必须的,前者主要负责引导工作,后者保存和应用 Clover 的配置选项;另外,kext 文件的介绍请看这里。
接下来主要介绍 /EFI/Clover/drivers/UEFI/ 目录下的 efi 文件。
「注」以上文件全部指的是 UEFI 版本。
OpenCore 文件树说明
下面介绍一下 OpenCore 有用的基本文件结构,以 0.5.7 版为例。
可以看到,和 Clover 相比 OpenCore 的文件目录更加精简,这也符合其轻装前行的设计理念;另外,和 Clover 最大的区别就是 OpenCore 是 acidanthera 团队开发的,这个团队主导开发了 Lilu.kext 及其附属插件等一系列黑苹果必须的驱动文件。目前 Lilu.kext/AppleALC.kext/WhateverGreen.kext/VirtualSMC.kext 等 acidanthera 团队的驱动已经不再测试新版 kext 的 Clover 兼容性;AptioMemoryFix.efi 这个关键内存修复驱动也已经停更,并改名分割为 FwRuntimeServices.efi(0.5.7 起改名 OpenRuntime.efi)。
根据外网信息,FwRuntimeServices.efi/OpenRuntime.efi 乎也能被 Clover 支持,要求 Clover 是较新的版本,并且可能需要搭配 OCQuirks.efi 使用。OcQuirks.efi 是用于 Clover 的替代 .efi 程序,可替代 AptioMemoryFix.efi 和所有版本的 OsxAptioFixDrv.efi。在 Clover 中使用 OcQuirks.efi 将使 Clover 支持 OpenCore 的 Quirks 功能。OcQuirks.efi 依赖 OpenRuntime.efi,必须一起搭配使用才能生效,具体参考这里。
必备的.efi文件
下面整理一个黑苹果设备必备的.efi驱动(仍以使用 UEFI 引导为例):
以上文件中,关于 EmuVariableUefi.efi 特别说明如下:
- 此驱动用于在没有原生 NVRAM 的主板上模拟 NVRAM;
- 白苹果都具备 NVRAM,其储存的设置信息一般用于支持 iMessage、FaceTime、Bootcamp 等功能,黑苹果使用 NVRAM 将使其更加接近白苹果,NVRAM 说明详见这里;
- 一般情况下,Z370 普遍都具备原生 NVRAM,所以可以不用这个驱动;但如果你的原生 NVRAM 有问题,也可以使用模拟;
- 该驱动主要用于 Clover 引导的黑苹果系统;
- OpenCore 不需要这个驱动,已经将相关功能集成到了 OpenRuntime.efi 中(0.5.7 之前称为 FwRuntimeServices.efi)。
- OpenCore 很多驱动都不需要,确实是一个非常优秀的引导工具。
内存修复驱动说明
黑苹果引导阶段卡在++++号,具体表现如下:
这多半是内存修复补丁出了问题,请往下看。
为什么黑苹果需要使用内存修复驱动?因为目前已99%普及 UEFI 引导系统,为了解决AMI Aptio UEFI BIOS造成的古怪的内存映射,@Dmasar 写的第一版内存修复驱动 OsxAptioFixDrv.efi 应运而生,这个驱动让使用 UEFI 引导黑苹果成为可能。在当时,其它的引导方式是传统引导(Legacy),传统引导程序(Legacy Bootloader)具有良好的内存管理机制不需要这个驱动。
第二版 OsxAptioFix2Drv.efi 也是 @Dmasar 写的,增加了休眠支持,但有时需要添加 slide=xxx 的引导参数(也就是计算 slide 值)才能正常工作。
接下来,@vit9696 研究了第二版驱动,并在此基础之上添加了原生NVRAM支持,其成果就是第三版驱动 OsxAptioFix3Drv.efi,目前这个驱动仍然能很好的工作。
然后,@vit9696 写了新的内存驱动 AptioMemoryFix.efi,添加了很多功能,包括自动计算 slide 值。
最后,OsxAptioFix2Drv-free2000.efi 虽然有部分用户反馈只有使用这个能正常启动系统,但考虑到驱动作者自曝该驱动会永久性损坏你的主板,如果非必须强烈不建议使用,建议删除并替换为 AptioMemoryFix.efi。
综上所述,在安装黑苹果时,首先应该尝试使用 AptioMemoryFix.efi,英特尔300系主板使用这个文件所需设置如下:
- Clover 取消勾选 内核和驱动补丁(Kernel and Kext Patches) → 内核电源(KernelPm)
- BIOS 中 CFG Lock 已解锁,大部分主板选择 Disabled 即可,但部分主板可能就写了一个 CFG,这种情况可能要选 Enabled
- BIOS 中 CSM disabled(关闭),这个是 Legacy 引导兼容,一般位于 Boot 菜单中
- BIOS 中 EHCI/XHCI Hand-off enabled(开启),某些华硕主板可能没有这个选项,默认就是 XHCI Hand-off 开启,一般位于 Advanced 菜单中
- BIOS 中 Above 4G Decoding enabled(开启),一般位于 Boot 菜单中
- BIOS 中 VT-d disabled(关闭),一般位于 CPU 选项中
关于 slide 值
和其它操作系统一样,macOS 在启动时也会将自身内核加载到系统内存中,但普通的 DIY 主板 UEFI 模式下的内存管理机制和白苹果不同,导致系统引导失败。为了解决这个问题,第三方驱动开发者发布了一系列驱动。分别是:
- OsxLowMemFixDrv.efi:早期 Clover 团队开发的,目前已不再维护
- OsxAptioFixDrv.efi:不支持休眠和 NVRAM
- OsxAptioFix2Drv.efi:不支持 NVRAM,可能需要计算slide
- OsxAptioFix3Drv.efi:支持休眠和 NVRAM,需要计算slide
- OsxAptioFix2Drv-free2000.efi:仅适用于 MSI 部分主板型号,其它品牌主板如非必须强烈不推荐,作者自曝会永久损坏;
- AptioMemoryFix.efi:支持自动计算 slide 值;
一般情况下,如果能使用 AptioMemoryFix.efi 是最好的。如果遇到卡++++号的情况,则可能需要计算 slide 值并添加 slide=xxx 的启动参数,其原理如下:
- 系统内核通常分配在 基址0x100000 + slide地址
- slide地址 由 slide值 组成( 通过 slide=X 参数传递 或 隐藏生成),该值始终添加为 X * 0x200000,并很可能是添加特定于平台和特定于值的常量。
- slide=0(或隐藏)时,内核实际分配地址为 0x100000(实际为内存第 1MB 开始,如果在 -x 中使用该地址,macOS 将无法启动)
- slide=0x1~0x7F(指定1~127范围内参数传递或随机生成)时,内核实际分配地址范围是 0x100000+ 0x200000(内存第3MB)到 0x100000 + 0xFE00000(内存第255MB)
- slide=0x80~0xFF(指定128~255参数传递或随机生成)在 Sandy Bridge 或 Ivy Bridge CPU上从 0x100000 + 0x20200000(内存第515MB)直到 0x100000 + 0x30000000(内存第769MB)
- slide=0x80~0xFF(指定128~255参数传递或随机生成)在其它 CPU 上 0x100000 + 0x10000000(内存第257MB)直到 0x100000 + 0x1FE00000(内存第511MB)
- 以上内容由 AptioMemoryFix.efi 原作者@vit9696说明,非计算机专业确实晦涩难懂。简单来说,就是指定分配一段内存空间给 macOS 系统内核,注意指定范围肯定不能超出你实际内存最大范围。
一般情况下,AptioMemoryFix.efi 可自动计算 slide 值,如果卡++++号,可尝试以下几个方法:
- 方法一:同时放入 MemoryAllocation.efi 这个文件,这将空出内存中第一个 512MB 内存用于 macOS 系统内核,并添加启动参数 slide=0 或 slide=1,但这可能会导致无法正常休眠;
- 方法二:把 AptioMemoryFix.efi 替换为 OsxAptioFixDrv.efi,此驱动无需计算 slide 值,但同时不支持休眠和原生 NVRAM;
- 方法三:如果休眠和 NVRAM 你都要,在 AptioMemoryFix.efi 无法自动计算的情况下,参阅@黑苹果小兵的计算教程,在 BIOS 更新后,可能需要重新计算。
.efi 驱动包下载
为方便下载使用,这里提供本文提到的所有 .efi 文件下载(仅 UEFI 版),包括 Clover 可以使用的最新的 OpenRuntime.efi 和 OcQuirks.efi。
资源下载
评论(0)