使用 OcQuirks 代替 AptioMemoryFix 和 OsxAptioFixDrv 修复 Clover 内存分配
不论是笔记本还是台式机的固件,都会将内存分成一小块一小块分配给计算机中的各种设备以及操作系统内核。Windows 可以很好的适应这种机制、并会主动将 NT 内核映射到内存中。而 macOS 不仅需要更大的内存区块,非 Mac 设备的内置硬件设备数量也比 Mac 设备要更多,所以黑苹果(Hackintosh)需要在 EFI 中添加专门的驱动为 macOS 内核预留内存。
何时需要为黑苹果修复内存分配?
在启动 macOS 或 USB 安装盘中的 macOS 安装程序时,如果 -v
中出现以下提示错误,或者卡在一行 +
,就说明需要修复内存分配。
ERROR!!! Load prelinked kernel with status 0x8000000000000009
一般的,带上内存分配修复驱动不会少块肉,所以还是建议都带上,能省不少事。
过去的内存分配修复驱动
- OsxLowMemFixDrv - Clover 团队早期开发的内存分配驱动,自 Clover r608 版本以后就已经不再维护了。
- OsxAptioFixDrv 和 OsxAptioFix2Drv - Clover r4368 版本之前内置的内存分配驱动,不支持 NVRAM。 其中 OsxAptioFix2Drv 是 OsxAptioFixDrv 的简化的版本、去掉了内置内存分配算法,因此不能用在旧版本的 macOS 或者一些老硬件中,但是可以提供休眠(Hibernation)支持。
- OsxAptioFix2Drv-free2000 - 一个不应该使用的驱动。这个驱动只适用于一些特定的硬件、特定的设备、特定的内存大小。这个驱动甚至可能会导致硬件损坏,请移步这个驱动的 作者的 Reddit 中的解释。
- OsxAptioFix3Drv - Clover r4369 版本之后至今内置的内存分配驱动,提供了对 NVRAM 的支持。现在仍然在由 Clover 团队佛系维护。
- AptioMemoryFix - acidanthera 团队(就是现在开发和维护 OpenCore、AppleALC、WhateverGreen、VoodooPS2、VirtualSMC 这一套黑苹果全家桶的团队)开发的内存分配驱动,相比 Clover 团队的 OsxAptioFix3Drv 有不少优势。AptioMemoryFix 加上 AptioInputFix、CleanNvram 一起共三个驱动合并发布为 AptioFixPkg。
需要注意的是,acidanthera 团队由于开始着手 OpenCore 的开发,因此他们宣布中止 AptioFixPkg 的开发、不再对其提供任何技术支持。 AptioFixPkg 中的三个驱动也被分拆成为 OpenCore 的一部分。这对于尚未切换到 OpenCore、还在使用传统但是稳定成熟的 Clover 的黑苹果用户来说并不是什么好消息。也正是因为 acidanthera 团队的这一举动,催生了本文的主角 —— OcQuirks —— 的诞生。
你说的这个 OcQuirks,他厉害吗?
既然 acidanthera 团队转而去开发 OpenCore、将 AptioMemoryFix 变成了 OpenCore 中的 Quirks 和 FwRuntimeServices,这 FwRuntimeServices 又这么厉害,那为什么不把 OpenCore 中内置的内存分配驱动 FwRuntimeServices 独立出来、进行移植并用于 Clover 呢?
这就是 OcQuirks 诞生的缘由。OcQuirks 的开发者 ReddestDream 表示 OcQuirks 是从 OpenCore 的源码中独立出来的内存分配驱动、延续了 OpenCore 的 Quirks 模型,目的就是为了 替代 AptioMemoryFix 和 OsxAptioFix 系列驱动。
那我应该用 OcQuirks 吗?
需要注意的是,OpenCore 都尚且不成熟、哪怕小版本更新都会带来这么多 Breaking Changes,那么从 OpenCore 中衍生出来的 OcQuirks 也不会很稳定。
虽然我从 OcQuirks 第一个版本开始就开始使用、到目前为止也没有发现任何问题。但是如果你极致追求稳定性、甚至可以退回去用 OsxAptioFix3Drv —— 毕竟这个归 Clover 团队管、随 Clover 安装包一起发布,不大可能出什么幺蛾子。
但是如果你和我一样喜欢尝鲜,那么你可以继续读下去、把你的 AptioMemoryFix 换掉。
如何使用 OcQuirks?
- 不论如何,备份你现在的 EFI 是非常重要的。和我在 上一篇文章 中说的一样,建议你将硬盘中的 EFI 复制到 U 盘的 EFI 分区中,接下来的所有修改都在 U 盘的 EFI 分区中进行;重启时从 U 盘启动,如果出了什么差错可以拔了 U 盘重启(你硬盘里的 EFI 仍然是正常的);而且重启进 macOS 以后再插上 U 盘、Finder 自动会挂载 U 盘中的 EFI 分区,不需要输密码。当你折腾完以后,可以再把 U 盘里的 EFI 复制回硬盘。
- 将 EFI 分区中
CLOVER/drivers/UEFI
目录中的 AptioMemoryFix、OsxAptioFix3Drv、OsxAptioFix2Drv、OsxAptioFixDrv、OsxLowMemFixDrv、OsxAptioFix2Drv-free2000 驱动全部移除。 - 从 OcQuirks 的 GitHub Release 中下载
OcQuirks.zip
并解压,将其中的三个文件(FwRuntimeServiecs.efi
、OcQuirks.efi
和OcQuirks.plist
)复制到CLOVER/drivers/UEFI
目录中:
EFI
└── CLOVER
└── drivers
└──UEFI
├──FwRuntimeServices.efi
├──OcQuirks.efi
└──OcQuirks.plist
- 现在可以重启了,看看会不会翻车(划掉)。
OcQuirks.plist
中包含了 OpenCore 的默认配置。一般的 OpenCore 的内存分配相关的默认配置已经可以启动绝大部分的机器了。
如果你有特定的需求,可以参考 OpenCore 的文档配置 OcQuirks.plist
中的相关选项。这里我要王婆卖瓜一下我维护的 OpenCore 文档的简体中文文档翻译 (acidanthera 不让翻译,我偏要翻译、帮助国内的黑苹果爱好者们),内置了站内搜索引擎和目录索引。