概述

众所周知,目前黑苹果主要使用 Clover 和 OpenCore 进行引导,在它们的文件目录中,除了 .kext 文件很重要之外,就是 .efi 文件了。.efi 是 Extensible Firmware Interface File(可扩展固件接口文件) 的缩写,苹果公司将这类文件用在 tvOS、macOS 等系统中,用于定义固件和操作系统之间的接口的数据。在黑苹果中,需要根据不同的硬件配置,搭配不同的第三方 .efi 文件,实现不同的功能。

 

Clover 文件树说明

下面介绍一下 Clover 的基本文件结构,请注意这里以 Clover r5100及以上版本用 UEFI 引导为例,已经 2022 年了,如非必要建议不要使用不支持 UEFI 的老古董了。在一个完整的 Clover 引导文件夹中,其文件目录树应该如下:

EFI
 ├── BOOT
 │    └── BOOTX64.efi
 └── CLOVER
      ├── ACPI
      │    ├── origin
      │    ├── WINDOWS
      │    └── patched
      │          └── SSDT.aml
      ├── drivers
      │    ├── BIOS
      │    ├── off
      │    └── UEFI
      │         ├── ApfsDriverLoader.efi
      │         ├── AudioDxe.efi
      │         ├── HfsPlus.efi
      │         ├── EmuVariableUefi.efi
      │         └── OsxAptioFixDrv.efi
      ├── kexts
      │    ├── 10.12
      │    ├── ...
      │    ├── 10.15
      │    ├── Off
      │    └── Other
      │         ├── Lilu.kext
      │         ├── VirtualSMC.kext
      │         ├── ......
      │         ├── AppleALC.kext
      │         └── WhateverGreen.kext
      ├── CLOVERX64.efi
      ├── config.plist
      ├── themes
      ├── misc
      ├── doc
      ├── OEM
      │    └── SystemProductName
      ├── ROM
      └── Tools
           ├── Shell32.efi
           ├── ......
           └── Shell64.efi

以下 Clover EFI 文件夹大部分时间是用不上的,也不是必须的目录,可以删除:

/EFI/Clover/doc      #这是 Clover 说明文档目录。
/EFI/Clover/OEM      #分别存放不同的 ACPI、config.plist 等文件。用以实现单个分区引导多个黑苹果系统。
/EFI/Clover/ROM      #保存提取到的显卡ROM文件,可在 Windows 下用 GPU-z 代替。
/EFI/Clover/misc     #存放Clover截图文件

以下文件和目录是必须的:

/EFI/BOOT/BOOTX64.efi            #主引导文件
/EFI/Clover/CLOVERX64.efi        #64位Clover主启动文件
/EFI/Clover/config.plist         #Clover的配置文件
/EFI/Clover/drivers/UEFI/*.efi   #UEFI模式加载64位Clover所需要的efi文件
/EFI/Clover/kexts/Other/*.kext   #Clover需要注入加载的kext文件

其中 BOOTx64.efi 和 CLOVERX64.efi 其实是同一个文件,config.plist 是 Clover 的参数配置文件,以上三个文件都是必须的,前者主要负责引导工作,后者保存和应用 Clover 的配置选项;另外,kext 文件的介绍请看这里

接下来主要介绍 /EFI/Clover/drivers/UEFI/ 目录下的 efi 文件。

Apfs.efi                #用于载入苹果最新的APFS文件系统容器,只有一个macOS可以使用ApfsDriverLoader.efi代替

ApfsDriverLoader.efi    #用于支持APFS文件系统容器,macOS 10.14起必须

AppleImageCodec.efi     #用于FileVault2解码PNG/BMP文件

AppleKeyAggregator.efi  #支持FileVault2启动用户界面对话

AppleKeyFeeder.efi      #支持FileVault2使用PS/2接口键盘

AppleUITheme.efi        #创建FileVault2启动用户界面主题支持

AptioInputFix.efi       #为使用AMI UEFI BIOS的主板提供FileVault2键盘驱动

AudioDxe.efi            #HDA驱动,用于启动时播放声音功能

CsmVideoDxe.efi         #64位视频驱动,为Clover引导界面提供更多可用分辨率。这个驱动基于CSM模块,要求BIOS中的CSM开启。但在某些硬件配置上可能导致Clover启动失败,或在休眠唤醒后造成Kernel Panic。

DataHubDxe.efi          #为macOS必需的数据集线器协议支持。一般来说Clover默认会自带。

EmuVariableUefi.efi     #用于在没有原生NVRAM支持的主板上模拟NVRAM。macOS使用NVRAM存储部分设置和数据,涉及iMessage、FaceTime等

EnglishDxe.efi          #用于UEFI中没有UnicodeCollation协议时支持efi shell

Fat.efi                 #FAT文件系统驱动,无法正常读取FAT磁盘时使用

FirmwareVolume.efi      #使用filevault2的光标图像创建固件卷

FSInject.efi            #为Clover文件夹中的内核扩展(kext)提供注入

HashServiceFix.efi      #修复UEFI BIOS中不存在的哈希支持(如果没有)

HiiDatabase.efi         #用于支持UEFI字体渲染, UEFI Shell中文字渲染异常时使用,第四代酷睿及以上一般不需要
 
HFSPlus.efi             #EFI文件系统驱动,用于支持HFS+

NTFS.efi                #NTFS文件系统驱动

MemoryAllocation.efi    #作用是为系统内核和缓存等空出第一个512MB内存,需要搭配AptioMeomoryFix.efi使用,如果使用休眠功能请删除
 
NvmExpressDxe.efi       #用于让老主板支持NVM Express设备,第四代酷睿以上主板不需要

AptioMemoryFix.efi      #修复UEFI Firmware内存问题,例如AMI Aptio,不能和其它内存修复驱动混用
 
OsxAptioFixDrv.efi      #旧版64位驱动,用于修复内存问题,例如AMI Aptio,不能和其它内存修复驱动混用

OsxAptioFix3Drv.efi     #第3版64位内存修复驱动,不能和其它内存修复驱动混用

OsxFatBinaryDrv.efi     #支持OS X 10.9及更早的版本提供FAT二进制可执行文件的驱动程序

OsxLowMemFixDrv.efi     #OsxAptioFixDrv.efi的简化版本,不能一起用

PartitionDxe.efi        #用于支持非常用分区映射的64位驱动程序,如:混合GPT/MBR或Apple Partition Map
 
Ps2MouseDxe.efi         #用于支持PS/2接口的鼠标
 
SMCHelper.efi           #用于支持FakeSMC存储SMC键值到NVRAM,和VirtualSMC.efi不兼容

UsbKbDxe.efi            #解决USB内建驱动工作不正常的情况,用于支持键盘组合键,卡引导请删除
 
UsbMouseDxe.efi         #支持引导用户界面的鼠标驱动程序
 
VBoxExt2.efi            #VirtualBox的64位EXT2/3文件系统驱动程序
 
VBoxExt4.efi            #VirtualBox的64位EXT4文件系统驱动程序
 
VBoxHfs.efi             #HFS+的开源efi文件系统驱动程序
 
VBoxIso9600.efi         #ISO9600文件系统驱动
 
VirtualSmc.efi          #高级Apple SMC模拟程序,当启用FileVault2时,建议使用VirtualSmc.efi来实现Boot.efi兼容性

XhciDxe.efi             #用于启用XHCI支持,第三代酷睿及以上主板不需要

「注」以上文件全部指的是 UEFI 版本。

 

OpenCore 文件树说明

下面介绍一下 OpenCore 有用的基本文件结构,以 0.5.7 版为例。

EFI
 ├── BOOT
 │   └── BOOTx64.efi
 ├── Resources
 └── OC
     ├── ACPI
     ├── Drivers
     │    ├── OpenCanopy.efi
     │    ├── ......
     │    └── OpenRuntime.efi
     ├── Kexts
     │    ├── Lilu.kext
     │    ├── ......
     │    └── WhateverGreen.kext
     ├── OpenCore.efi
     └── Tools
          ├── ChipTune.efi
          ├── ......
          └── VerifyMsrE2.efi

可以看到,和 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 引导为例):

#基础
ApfsDriverLoader.efi
AptioMemoryFix.efi     #OpenCore使用OpenRuntime.efi和OpenCanopy.efi
DataHubDxe.efi
FSInject.efi           #OpenCore不需要
HFSPlus.efi            #或者VBoxHFS.efi
MemoryAllocation.efi   #如果要休眠请删除
PartitionDxe.efi
VirtualSmc.efi
EmuVariableUefi.efi    #OpenCore不需要
#可选
AudioDxe.efi

以上文件中,关于 EmuVariableUefi.efi 特别说明如下:

  • 此驱动用于在没有原生 NVRAM 的主板上模拟 NVRAM;
    • 白苹果都具备 NVRAM,其储存的设置信息一般用于支持 iMessage、FaceTime、Bootcamp 等功能,黑苹果使用 NVRAM 将使其更加接近白苹果,NVRAM 说明详见这里
    • 一般情况下,Z370 普遍都具备原生 NVRAM,所以可以不用这个驱动;但如果你的原生 NVRAM 有问题,也可以使用模拟;
  • 该驱动主要用于 Clover 引导的黑苹果系统;
  • OpenCore 不需要这个驱动,已经将相关功能集成到了 OpenRuntime.efi 中(0.5.7 之前称为 FwRuntimeServices.efi)。
    • OpenCore 很多驱动都不需要,确实是一个非常优秀的引导工具。

 

内存修复驱动说明

黑苹果引导阶段卡在++++号,具体表现如下:

ERROR!!! Load prelinked kernel with status 0x0000000000000123456

这多半是内存修复补丁出了问题,请往下看。

为什么黑苹果需要使用内存修复驱动?因为目前已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。

隐藏内容
本内容需权限查看
  • 普通: 9.9星币
  • 会员: 免费
  • 终身会员: 免费

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。