夕阳余晖 Intel十代平台黑苹果小记(中)

tetsu 22 2023-08-05

省流省时:

因为穷,所以黑苹果。欢迎和我一样穷但是想用macOS的朋友(大概没有吧)照方抓药。

阅读前请了解:

  1. 黑苹果对硬件比较挑剔,并非所有PC都能安装macOS。
  2. 平台配置仅供参考,配件请留心选购,否则容易在后期完善工作中翻车。
  3. 配置过程仅供参考,不同硬件有不同的配置方法和参数,切忌照抄。

​ 本篇粗略介绍Opencore及其配置方法。 ​

一、配置OpenCore​

书接上回,做好了macOS安装盘,接下来需要给安装盘添加并设置OpenCore模块,从而达到在启动时“欺骗”macOS安装盘,在普通电脑上顺利安装macOS的目的。

注:本文使用OpenCore 0.8.2版本,在10代酷睿平台上安装macOS Monterey系统。不同版本OpenCore的可配置项目会有所不同。如果你使用相同版本的OpenCore以及参数相近的硬件,本文提及的配置方法,可以作为参考。

一)OpenCore文件结构:


OC文件夹结构

这是一个基础的OC文件夹结构。下面介绍引导安装阶段需要修改补充的内容。在这一阶段,需要修改补充的地方不多,以成功见到安装界面并顺利完成安装为目标即可。

二)配置可引导Opencore:

本配置教程参考以下内容写作:

Opencore Install Guide (https://dortania.github.io/OpenCore-Install-Guide/prerequisites.html

使用Opencore引导黑苹果 (https://blog.xjn819.com/post/opencore-guide.html

黑果小兵-精解Opencore (https://blog.daliansky.net/OpenCore-BootLoader.html

以下内容仅涉及自用配置需要的修改,同时对常见情况进行一些说明。请按照以上内容,对自己配置进行更贴近需求的定制。

1、配置准备:

在实际开始配置Opencore之前,需要对主板bios进行一些配置修改,以获得最大的黑苹果兼容性。较为通用的bios设置如下(如果没有个别选项,该选项可以忽略):

禁用列表: 在bios中寻找下列功能选项开关并设置为disabled

Fast Boot(快速启动)
CFG Lock (MSR 0xE2 write protection)(CFG 锁 (MSR 0xE2 写入保护))
VT-d(VT-d虚拟技术)
CSM(兼容性支持模块)
Intel SGX
Intel Rapid Storage Technology(英特尔快速存储技术)

启用列表: 在bios中寻找下列功能选项开关并设置为enabled

VT-x(VT-x虚拟技术)
Above 4G decoding(大于4G地址空间解码)
Hyper Threading(超线程)
Execute Disable Bit(执行禁止位)
EHCI/XHCI Hand-off(EHCI/XHCI控制接手)
OS type: other(操作系统类型:其他)
Legacy RTC Device(传统RTC设备)

另外,请准备好ProperTree这一软件,以便在Windows下对Opencore的config.plist文件进行编辑。请在Github页面获取软件,并按照指引安装: https://github.com/corpnewt/ProperTree

2、整理Opencore:

首先请在Opencore的Github页面:https://github.com/acidanthera/OpenCorePkg/releases/tag/0.8.2 ,下载最新的release版本的组件。

下载解压后,会得到如下结构文件夹:


我们需要:

  1. 将Docs目录下的Sample.plist改名为Config.plist,并放入 X64/EFI/OC 目录下。
  2. 将X64目录下的EFI文件夹留下。然后删掉其他文件。

这时我们获得了文章最开始的OC文件夹结构:


接着,我们对EFI文件夹下的文件进行进一步整理:

  1. Drivers文件夹下仅保留这三个.efi文件:OpenRuntime.efi、OpenCanopy.efi、OpenHFSPlus.efi,其余全部删除(注:仅针对自身配置,各文件详细说明请参考 二) 所提到的参考内容,并根据参考内容自行决定是否留用个别文件)。

  2. Kexts文件夹下放入如下基础kexts(包含CPU、显卡、网卡、USB等基础硬件的注入驱动),这些kext都可以在GitHub搜索并下载到最新版本:

    Lilu.kext(Acidanthera开发的注入驱动的框架,黑苹果必备)
    WhateverGreen.kext(显卡注入驱动)
    VirtualSMC.kext(传感器驱动依赖)
    SMCProcessor.kext(CPU核心传感器驱动)
    SMCSuperIO.kext(IO传感器驱动)
    IntelMausi.kext(Intel有线网卡驱动,如果是Realtek网卡请根据网卡型号使用RTL系列的kext)
    USBInjectAll.kext(通用USB接口驱动)
    AppleALC.kext(声卡驱动)
    NVMEFix.kext(nvme接口驱动,如不使用nvme接口硬盘可不使用)

  3. ACPI文件夹下,放入对应10代酷睿平台的CPU补丁,保证CPU自动变频生效。10代intel平台通用的SSDT文件取自:https://dortania.github.io/OpenCore-Install-Guide/config.plist/comet-lake.html#acpi


这里提到的4个SSDT文件,逐个点击后左边,按指引下载通用版本即可。

结束以上3个文件夹的配置,此时,你的EFI文件夹下应该是这样的:


有了这些必须的文件,此时可以开始编写config.plist了。​

3、编辑config.plist

在Windows下打开ProperTree解压出的文件夹,点击ProperTree.bat,自动安装相关环境并打开软件。随后点击菜单上的File - Open,选择OC目录里的config.plist打开。


在任意一行点击鼠标右键,选择Collapse All,再点击Root左边的箭头展开,会得到这个界面:


在开始编辑前,点击菜单栏的File - OC Clean Snapshot,在弹出的文件框选择EFI/OC目录,然后打开,ProperTree会自动把在2、整理好的文件载入config.plist中。

​​可以看到,这个config.plist文件,分成了以下几个部分需要配置,接下来将分部说明需要注意的选项的含义、作用,并解释每一部分该如何配置:

1)ACPI

(用于加载, 屏蔽和修补 ACPI (DSDT/SSDT) 表)


i. Add(加载:这里包含的子项内容就是刚刚Snapshot进来的四个SSDT文件,不用更改)

ii. Delete(屏蔽:这里包含的子项内容不会被加载,从原版开始配置的config不用编辑)

iii. Patch(修补:对add下的子项进行特定补丁,由于我们采用的是通用SSDT文件,所以可将Patch下的子项全部删除)

iv. Quirks(额外选项:无特殊需求保持原样(全部False)即可。具体含义可以参考以下说明)

FadtEnableReset: False
在旧硬件上修复重启和关机, 除非需要, 否则不推荐开启
NormalizeHeaders: False
清除 ACPI 头字段, 只有 macOS 10.13 需要
RebaseRegions: False
尝试试探性地重新定位 ACPI 内存区域, 使用自定义 DSDT 则必须开启
ResetHwSig: False
存在重新启动后因无法维持硬件签名而导致从休眠中唤醒的问题的硬件需要开启
ResetLogoStatus: False
无法在有 BGRT 表的系统上显示 OEM Windows 标志的硬件需要开启
SyncTableIDs: False
保持默认即可。

2)Booter

(用于设置 FwRuntimeServices.efi (Slide 值计算, KASLR))


i. MmioWhitelist(直通设备管理:可以忽视,将其所含子项全部删除)

ii. Patch(修补:因为没有直通设备,可以忽视,将其所含子项全部删除)

iii. Quirks(额外选项:如果你的配置在Intel 8代酷睿往后,大可照搬如下选项。否则请按照以下说明,结合自身配置进行设置:)

AllowRelocationBlock: False
保持默认即可。
AvoidRuntimeDefrag: True
开启后会修复 UEFI 的运行服务, 例如日期, 时间, NVRAM, 电源控制等
DevirtualiseMmio: True
开启后会减少 Stolen 内存占用空间,扩大 Slide = N 值的范围, 适用于大多数主板
DisableSingleUser: False
开启后会禁止 Cmd + S 和 -s 的使用,使设备更加接近于 T2 白苹果,保持默认即可。
DisableVariableWrite: False
开启后会禁止 NVRAM 写入, 在 Z390/HM370 等没有原生 macOS 支持 NVRAM 的主板上需要开启
DiscardHibernateMap: False
开启后会重用原始休眠内存映射,仅某些旧硬件需要,保持默认即可。
EnableSafeModeSlide: True
开启后会允许在安全模式下使用 Slide 值,保持默认即可。
EnableWriteUnprotector: True
开启后会在执行期间删除 CR0 寄存器中的写入保护
ForceBooterSignature: False
强制启动器签名,保持默认关闭即可。
ForceExitBootServices: False
开启后会确保 ExitBootServices 即使在 MemoryMap 发生更改时也能调用成功, 保持默认即可。
ProtectMemoryRegion: False
内存相关,保持默认即可。
ProtectSecureBoot: False
避免操作系统对 UEFI 安全启动变量 (db, dbx, PX, KEK) 进行写入, 这个选项主要用于避免 Insyde 主板和 MacPro5,1 的 NVRAM 问题
ProtectUEFIServices: True
保护OC自身的UEFI服务以确保稳定,保持默认即可。
ProvideCustomSlide: True
如果 Slide 值存在冲突, 此选项将强制 macOS 执行以下操作: 使用一个伪随机值。 只有在遇到 Only N/256 slide values are usable! 时需要
ProvideMaxSlide: 0
Slide值相关,保持默认即可。
RebuildAppleMemoryMap: True
重建内存表以兼容macOS,保持默认打开即可。
ResizeAppleGPUBars: 10
为提供显存压缩的显卡提供支持,AMD系NAVI21系列往后的独立显卡可以设定为10
SetupVirtualMap: True
开启后会将 SetVirtualAddresses 调用修复为虚拟地址
SignalAppleOS: False
通过 OS Info 将 macOS 加载的信息报告给其它操作系统, 用于在 Windows 中为 MacBook 启用 iGPU
SyncRuntimePermissions: True
对启用MAT表引导多系统的用户有效,和上边的RebuildAppleMemoryMap相关联,保持默认打开即可。

3)DeviceProperties

用于设置 PCI 设备属性, 如英特尔显卡缓冲帧补丁, 声卡 Layout ID


i. Add(加载:定义PCI设备位置以正确加载。本配置添加了PCI-E插槽位置,并设定显卡为第一槽,以确保macOS优先调用独显工作;如果使用Intel集成显卡,则需要添加缓冲帧补丁,使集成显卡正常工作,具体可参考文章头所列出的参考资料。)

ii. Delete(屏蔽:无关,可忽略,并将子项全部删除)

4)Kernel

用于说明 OpenCore 的具体加密信息, 配置 Kext 加载顺序以及屏蔽驱动


i. Add(加载:里边的子项便是放在OC/Kexts目录的驱动;注意,这里加载的驱动,必须按照一定顺序排列!排列规则如下:)

① 始终保持Lilu.kext在第一位!
② 随后是Lilu.kext关联的驱动,如WhateverGreen.kext、VirtualSMC.kext、SMCProcessor.kext、SMCSuperIO.kext、AppleALC.kext等。
③ 其余功能性kext放在以上kext之后即可。
④ 排列顺序完毕的文件列表如图,供参考(在ProperTree中,可以轻易地拖动Add下的各个子项目进行排序,程序会自动调整这些子项的顺序):


ii. Block(屏蔽:由于上边的Add表我们只填写了需要加载的kext,这里我们可以直接无视,将其子值全部删除干净)

iii. Emulate(模拟:CPU模拟相关,只要是安装BigSur以上版本的manOS都无需关注这里。)

iv. Force(强制:为老版本系统强制加载一些kext,可以直接无视。)

v. Patch(修补:一般也无需关注,可以将其子项全部删除。)

vi. Quirks(额外选项:提供本机配置进行参考,如果是8代酷睿以上,也基本可以照抄。否则请根据实际情况,对照文章头的参考文章进行配置)


AppleCpuPmCfgLock: False
CFG-Lock相关,因为已经在BIOS设置关闭,所以保持False。
AppleXcpmCfgLock: False
同上
AppleXcpmExtraMsrs: False
禁用奔腾和某些至强等不支持 CPU 所需的多个 MSR 访问,保持False
AppleXcpmForceBoost: False
强制拉高睿频, 建议在长期高负载的专业设备上使用, 这里保持False
CustomPciSerialDevice: False
保持默认False即可。
CustomSMBIOSGuid: False
对 UpdateSMBIOSMode 自定义模式执行 GUID 修补, 仅用于戴尔笔记本电脑,这里保持False。
DisableIOMapper: False
需要绕过 VT-d 且 BIOS 中禁用时使用,保持False即可。
DisableLinkeditJettison: True
提高稳定性,保持True即可。
DisableRtcChecksum: False
关机/重启异常时才需打开,先保持False即可。
ExtendBTFeatureFlags: False
非苹果免驱蓝牙和无线网卡无法工作时启用,本配置使用免驱网卡,保持False即可。
ExternalDiskIcons: True
硬盘图标补丁, macOS 将内部硬盘视为外接硬盘 (黄色) 时使用,保持True即可。
ForceAquantiaEthernet: False
开启非苹果原生万兆网卡支持,和本配置无关,保持False即可。
ForceSecureBootScheme: False
仅在虚拟机下安装macOS时需要启用,保持False即可。
IncreasePciBarSize: False
将 IOPCIFamily 中 32 位 PCI Bar 的大小从 1GB 增加到 4GB, 在 BIOS 中启用 Above4GDecoding 是一种更加干净和安全的方法。某些 X99 板可能需要开启
LapicKernelPanic: False
禁用由 AP 核心 lapic 中断造成的内核崩溃, 通常用于「惠普电脑」
LegacyCommpage: False
为老版本macOS提供新指令集支持,和本配置无关,保持Flase即可。
PanicNoKextDump: True
在发生内核崩溃时阻止输出 Kext 列表, 提供可供排错参考的崩溃日志, 排错时请务必开启
PowerTimeoutKernelPanic: True
修复 macOS Catalina 中由于设备电源状态变化超时而导致的内核崩溃
ProvideCurrentCpuInfo: False
向OC提供当前CPU信息,可开可关。
SetApfsTrimTimeout: -1
设置Trim(SSD回收机制)功能相关,赋值-1为关闭,保持默认即可。
ThirdPartyDrivers: False
为 SSD 启用 TRIM 指令, NVMe SSD 会自动被 macOS 加载因此不需要, SATA SSD 可以在终端执行 sudo trimforce enable 开启。同时修复 macOS 10.15 下非苹果原厂 SSD 无法使用硬盘休眠。
XhciPortLimit: False
15端口限制解除补丁, 不建议依赖, 因为这不是 USB 的最佳解决方案,在下篇将介绍USB定制。这里保持False即可。

vii. 4-7)Scheme(和旧版macOS相关的补充设置,这里可以保持默认配置)


5)Misc

OpenCore 自身设置

i. BlessOverride(额外EFI路径:在此添加Windows的EFI引导,先保持默认即可)

ii. Boot(启动页面选项:无需改动,保持默认即可)

iii. Debug(查错选项:打开以下几个选项即可,其他保持默认)

AppleDebug: True
ApplePanic: True
DisableWatchDog: True

iv. Entries(入口:先无需改动,保持默认即可)

v. Security(安全:先无需改动,保持默认即可)

vi. Serial(先无需改动,保持默认即可)

vii. Tools(工具:先无需改动,保持默认即可)

6)NVRAM

用于注入 NVRAM (如引导标识符和 SIP)

i. Add (加载:修改引导参数,需要注意修改的部分如下标识,其余可以保持默认:)


boot-args(设置启动参数,可以使用OpenCore自带的参数,也可以使用某些kext的特定参数。参数与参数之间用一个空格间隔开。一些常用的启动参数如下)

-v(啰嗦模式,查错用,为最快找到启动失败的问题所在,请填上)
debug=0x100 (查错相关,请填上)
keepsyms=1(查错相关,请填上)
alcid=1(AppleALC相关,设置正确的alcid即可驱动声卡,下篇完善功能时再添加即可)
dk.e1000=0(Intel I225-V网卡专用参数,如果不是此网卡型号则无需添加)
agdpmod=pikera(AMD RX5000/6000系显卡防黑屏补丁,本配置使用6600XT,需要填写该参数)
-wegnoegpu(屏蔽所有独立显卡,仅使用Intel集成显卡。本配置无需填写该参数)
prev-lang:kbd(这里设置默认语言,洋文好的同学可以清空右边Data的内容)

ii. Delete(屏蔽:这里可以保持默认,无需修改)

iii. LegacyEnable(模拟:这里可以保持默认,无需修改)

iv. LegacyOverwrite(强制:这里可以保持默认,无需修改)

v. LegecySchema(修补:这里可以保持默认,无需修改)

vi. WriteFlash(额外选项:这里可以保持默认,无需修改)

7)Platforminfo

用于设置 SMBIOS 机型信息,进入系统后的关于本机显示的内容就是在此设定。先暂时不动,成功进入系统后,用软件修改完善。

8)UEFI

用于加载 UEFI 驱动以及调整加载顺序,保持默认不动即可。

至此,引导安装用的简易OpenCore就配置完毕了。可以看到,经过几年的发展,黑苹果引导已经向着模块化、傻瓜化稳步发展,加之有丰富易懂的参考文档,黑苹果难度其实已经大大降低。

二、安装macOS:

在开始安装之前,先把整个EFI文件夹复制到macOS安装U盘的ESP分区下,以实现OpenCore接管引导。

插入之前制作好的macOS安装U盘,这里需要打开Diskgenius,在安装U盘中找到EFI分区,右键选择分配盘符,然后将EFI文件夹复制到该盘符根目录下。

随后重启系统,在BIOS界面选择启动设备为macOS的安装U盘。如果OpenCore配置无误,即可进入macOS的安装界面。此时请根据以下步骤逐步进行安装:

①首先选择磁盘工具

②把想要安装macOS的硬盘抹掉,再新建分区。分区格式请选择APFS,如无特殊需求务必不要勾选“区分大小写”和“加密”!

③新建分区完成后,关闭磁盘工具,点击第二项“安装macOS Monterey”

④依照提示,选择目标磁盘,同意几个协议,静静等待安装流程跑完即可。中间会自动重启进行下一步。经过2次重启,如无意外将可以进入macOS桌面。

在初次进入macOS桌面后,请务必先不要联网登录AppleID,在完善功能全部正常使用后,再登陆AppleID使用相关服务。完善功能的相关内容将在下篇继续介绍。