Clover&OpenCore文件结构说明,.efi是什么文件?

2020-04-26 / 1.48w / 教程 / 7.3k / 21分钟

概述

本文最近更新:2020年5月22日

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

 

Clover 文件树说明

下面介绍一下 Clover 的基本文件结构,请注意这里以 Clover r5100及以上版本用 UEFI 引导为例,已经 2020 年了,如非必要建议不要使用不支持 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。

超级会员免费 永久超级会员免费

已有94人查看

 

0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,请及时邮箱[email protected],或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:[email protected],我们将第一时间配合处理!
扫描QQ二维码加入【黑苹果星球交流群】

黑苹果星球 » Clover&OpenCore文件结构说明,.efi是什么文件?

1 评论

  1. 怎么下载呀。

发表评论