黑苹果(macOS 12.3.1)安装实录-U盘引导EFI文件夹制作

摘要
进入到了这部分,才算真正开始折腾黑苹果,也是安装黑苹果中最有乐(tong)趣(ku)的地方。因为苹果只在自家发售的产品中搭载macOS(这也是我之前认为它封闭的原因),所以macOS和Windows最大的不同就是,macOS从不考虑兼容性只按照自己的逻辑加载自己认识的硬件。所以要装黑苹果就需要在启动macOS系统之前,利用引导工具对我们的PC电脑进行一定的伪装,让macOS认为它正在运行在自家的硬件上。上述的引导工具一般指的是Clover、OpenCore等(更早的还有Chameleon),目前一般大家用的都是OpenCore,所以后面使用的也都是OpenCore引导。所以这部分的主要工作就是根据自己的硬件配置OpenCore,伪装自己的硬件,让 macOS 认为自己运行在苹果自家的硬件上。因为以下内容涉及到很多硬件方面的专业知识,我也只是将我对其的理解和认知用最简单的方式表述出来,可能会有某些偏差和错误,也希望大佬多多指正与补充。需要注意的是:本文所使用的 OpenCore 版本为 0.8.0 ,所以相关的配置也仅适用于 0.8.0 版本,如若你的版本没有相关的设置,请勿随意添加,最好查看对应版本的官方手册。
下载OpenCore
OpenCore: OpenCore的每个发行版一般都有两个版本,分别是debug版本和release版本。debug版本拥有更丰富的输出和调试功能,方便安装和排错,适合安装调试时使用;release版本的启动速度会更快,适合生产环境中使用。不管是哪个版本,下载下来的目录结构都是相同的:因为目前还在安装调试阶段,所以我们先选择debug版本,以方便查看输出进行排错或者在社区、论坛进行求助。我们先将 X64 文件夹里的 EFI文件夹 解压到桌面,后续所有的工作都会基于该文件夹进行。
EFI文件夹的目录结构

配置 OpenCore 引导
ACPI 文件夹: 首先,我们先来配置ACPI文件夹里的内容。默认情况下,该文件夹是空的。但在OpenCore中,ACPI文件夹下的SSDT文件是必不可少的(主要会对CPU、EC控制器、AWAC、USB控制器几个硬件进行一些处理),但SSDT的上手却没那么简单,好在有大佬制作了一些通用的SSDT文件,我们直接按需取用就好。点击此处打开网站(#what-ssdts-do-each-platform-need),根据自己的电脑的类型(台式机、笔记本、高性能台式机)、平台代号(即CPU的平台代号)来选择适用于自己的SSDT文件。

因为我的是第十代CPU和华硕主板(请根据自己的实际情况选择),所以我需要的是 SSDT-PLUG、SSDT-EC-USBX、SSDT-AWAC、SSDT-RHUB这四个文件,下载这四个文件并放入ACPI文件夹中。

Drivers 文件夹: 接着我们来配置Drivers文件夹下的内容。默认情况下,这个文件夹下有很多文件,但其实我这次仅需要 OpenRuntime.efi 这一个文件。除此之外,我们还需要 HfsPlus.efi (该文件不是OpenCore自带的文件,需要单独下载)我目前这个硬件的安装只需要这两个驱动文件即可,不建议在该文件夹中放入不必要的驱动,否则导致OpenCore启动失败。

Kexts 文件夹: 接着,我们就可以准备我们的Kexts文件夹。该文件夹内存储的便是macOS内核扩展,就是大家说的macOS驱动。默认情况下,该文件夹是空的,所有的kext文件都需要我们自己去下载。(kext文件在Windows系统下是以文件夹的形式存在,所以请勿随意修改文件夹里的内容)因为kext文件比较多,这里只介绍几个我需要的kext,更多kext可以参考这里的介绍。kext在下载的压缩包中,也会有debug和release两个版本,与OpenCore的两个版本的解释相同。为了后面的方便,我都选择的是release版本。appleALC 通用声卡驱动,基本上能驱动大部分的板载声卡。下载后的压缩包中还有一个名为 appleALCU 的kext,这个是 appleALC 的精简版。WhateverGreen 通用显卡驱动NVMeFix 因为我用于安装macOS的硬盘是NVMe固态硬盘,所以加上这个kext。

以上便是我首次安装使用的kext,还有几点需要注意:
Resources 文件夹: 该文件夹是OpenCore的主题文件夹。默认情况下,该文件夹下有Audio、Font、Image、Label几个空文件夹。暂时我们先不处理这个文件夹,等后面专门来进行OpenCore界面的美化。
Tools 文件夹: 该文件夹里存放一些 OpenCore 的工具,可以在 OpenCore 引导界面进行使用。在 OpenCore 引导界面中,这些工具默认是隐藏的,按 空格键 即可显示出来,可以直接使用。默认情况下,该文件夹下预制了很多工具,既可以都保留,也可以按需保留。我只留下了几个可能会用到的工具:

config.plist: OpenCore的配置文件,默认情况下是没有这个文件的。这个文件即为下载的 OpenCore的 Docs 文件夹下的 Sample.plist 文件。把它复制到 EFI 文件夹下,并修改文件名为 config.plist。

安装 Propertree: 有很多工具可以编辑 *.plist 文件,这里使用官方推荐的 ProperTree 工具(需要有Python环境)。下载并解压后,可以直接运行 ProperTree.bat 文件打开编辑器窗口,然后在 EFI 文件夹下打开要编辑的 config.plist;也可以运行 ProperTree.exe 文件进行关联,之后直接双击 *.plist 文件即可直接用 ProperTree 打开。
配置 config.plist: 使用 ProperTree 打开 config.plist。最上面的几个 WARNING 可以删掉,也可以保留,都是已经注释掉的内容。
加载OC文件夹内的所有文件: 默认情况下,ACPI、Kernel、UEFI等节点下并未加载我们刚刚放入 EFI 文件夹内的那些文件,所以我们首先需要把那些文件加载到 config.plist 中,不然和没放入那些文件一样。点击 File -> OC Clean snapshot,然后在弹出的窗口选择 EFI 文件夹,ProperTree 将自动加载你放入文件夹的所有文件。(如果弹出了某些关于kext的提示,即说明某些kext之间可能存在冲突情况,你需要删除或者禁用它)注意:config.plist 中加载的文件必须要存在于文件夹中,否则 OpenCore 将报错。所以不论修改了任何文件夹中的任何文件都建议使用ProperTree更新config.plist文件。
下面关于config.plist并不能通用,因为我对这部分的理解也不深,所以仅贴出来我的配置。具体各平台的配置方式及解释可以参考 这里 ,或查看 Configuration.pdf 文件。
ACPI: 在该节点下的 Add 节点,即可看到我们刚刚放入 ACPI 文件夹下的4个SSDT文件。只要检查放入文件夹的文件是否都存在于 Add 下就行,其余的配置我们保持默认。
Booter: 这部分我也是照猫画虎,按照大佬的配置的。
DeviceProperties: 该部分主要是设置硬件的,可在此位置通过仿冒ID来驱动核显、声卡、网卡等设备,也可以在此处完善PCI信息等。若要配置该部分需要有硬件的 Device Path ,这个等安装完系统后,使用 Hackintool 或者 gfxutil 等工具查看。配置文件中默认有一个是板载声卡的配置,但因为我们声卡的Device Path不一定与预制的相同,所以可能无效。为了能顺利安装系统,若非必要,我们先不管这个节点里的内容,都保持默认即可。
Kernel: 该节点下,我们首先检查放入 Kexts 文件夹下的kext文件是否都存在于 Add 节点下。这里还有一点需要注意一下,因为大部分的kext都依赖于Lilu.kext,所以同步确认下Lilu.kext是否在Add节点下的第一项(正常来说 ProperTree会自动把Lilu.kext放在首位)。
根据我的配置,我只需要再配置 Quirks 下的这两项即可。有很多教程中更会将appleCpuPmCfgLock和appleXcpmCfgLock两项设置为True,但如果你确认你的主板已经解锁CFG Lock的话,将其保持默认即可。
Misc: 该节点下,我的配置只需要配置 Debug 和 Security 下配置即可。这项默认为,设置为 则会每次启动都会在引导分区的根目录下生成一份log文件,方便后续排错及求助,如果不需要可以保持默认。
NVRAM: 该节点下,与我主要相关的就是 7C436110-AB2A-4BBB-A880-FE41995C9F82 下的内容。boot-args 里的配置即为启动参数,这里的启动参数的优先级最高,会覆盖所有的配置,比如alcid便会覆盖DeviceProperties中对appleALC.kext的配置。具体每个参数的作用可以在 这里 查看。prev-lang:kbd 指的是键盘布局,默认的好像是俄语布局,我们直接删除保持为空就好。
PlatformInfo: 该节点下,我们主要配置 Generic 下的内容。简单说,我们除了要仿冒苹果电脑的硬件外,我们还需要仿冒一个苹果电脑的SMBIOS信息,即我们要告诉macOS,它正在运行是哪个苹果已发行的电脑上。关于SMBIOS我们可以使用 GenSMBIOS 生成,该工具的下载方式与 ProperTree 相同。在Windows下运行 GenSMBIOS.bat 即可。GenSMBIOS 生成 SMBIOS 信息。GenSMBIOS的首次使用,估计99%会因为遇到网络问题而无法生成。解决的方式也很简单,其实主要就是下载macserial文件失败引起的,所以我们只需要把下载的OpenCore压缩包内 下的 macserial.exe 文件(Windows下复制exe文件)复制到GenSMBIOS文件夹下就行。
然后我们双击 GenSMIBOS.bat 运行脚本,进入主界面后,输入(生成 SMBIOS),然后输入与你的配置最接近的苹果电脑的型号,该型号不能乱填,否则可能会导致某些硬件无法驱动或功能无法使用。可以参考 SIMBIOS ID、Platform-ID速查表() 查找适合你的型号。因为我的台式机是使用10代 i9 处理器,所以型号是 iMac20,2。
然后你就能看到生成的 SMBIOS 信息了。这里有一点需要注意下,生成了以下信息后,最好去苹果的官方网站()上查一下序列号(Serial)的有效性,如果通过该序列号查到了有效的保修日期等信息,那就证明有一台已上市的苹果电脑正在使用这个序列号,那咱们最好重新生成一次SMBIOS信息。如果继续使用这个序列号,有可能导致后续登陆的appleID被封号等问题。除此之外,信息中的 apple ROM 即为网卡的物理地址,可以使用工具生成的,也可以使用你真是网卡的物理地址(此处主要涉及到 iServices 即苹果的各项服务是否正常)。Windows下可双击网络适配器→详细信息中查看物理地址,去掉“-”即为ROM的值。另外,也看到一种说法是:若 SmUUID 与Windows下主板的UUID不同,在OpenCore引导Windows的时候可能会引起蓝屏。所以可以使用 AID64 查看自己主板的UUID,作为SmUUID。这里我就直接使用生成的SmUUID了。
UEFI: 该节点下,首先我们检查 Drivers 下是否都加载了我们之前放在 Drivers文件夹 下的efi文件。然后其他设置暂时先保持默认即可。
到此为止,我们的 OpenCore 已经完成一大半了,但先别急,还记得我们之前反复提到的USB问题吗?
现在我们就来定制USB,在安装之前最后完善我们的EFI文件夹。
USB定制: 因为主板以及准备安装的macOS 12.3.1的原因,我们需要在安装系统前进行USB定制,否则可能会导致在安装时没有USB口可用或只有USB 2.0接口可用。(ProArt Z490-Creator这个主板背板没有USB2.0接口)另外一点还需要了解的是,macOS一直有一个限制,就是每个USB控制器下面最多可以激活15个端口,所以我们在定制USB的过程中如果发现某个USB控制器下的端口超过15个的话,便需要进行一些取舍。在开始之前,个人建议需要准备纸笔,因为一会儿我们需要在记录每个USB接口的端口号(Port),以方便我们进行取舍。
关于USB的基本信息: 正式开始之前,我们先简单介绍下几种USB接口的类型:
先了解了上面的信息,有助于我们后面的操作。如果遇到端口数量超过15个的情况,我们有以下几种选择:
可以根据你的USB口的实际使用情况自主选择,比如我在背板的USB3接口上插了鼠标键盘,那么我完全可以禁用掉这两个USB接口的USB3端口,让其只支持USB2设备,可保证鼠标键盘正常使用即可。
开始USB定制: 下载 USBToolBox。USBToolBox分为两部分:kext (USBToolBox.kext) 和使用USBToolBox在Windows下进行USB定制。
简单说USB定制的过程如下:
下面我们开始第一步,双击打开 Windows.exe 。如果是第一次打开,会看到 Saved Data 为 ,如果此处显示为 说明在目录下已经存在了一份USB接口数据。个人建议是先删除之前保存的数据,不然在后面选择端口时会多显示一个USB控制器(也可能是个案,仅供参考)。
正常情况下,我们输入 先让程序扫描下我们主板上的USB控制器及所有端口。
经过扫描后,我们在该界面中即可看到电脑上所有的USB端口,并且每过5秒界面刷新,更新当前USB信息。接下来的操作就比较费体力了,我们最好能准备一个USB3.0设备(如,U盘)和USB2.0设备(如,鼠标、键盘等)。如果嫌麻烦,只准备USB3.0的设备就行,一般来说该工具会自动检测该USB3接口所关联的USB2端口。
首先,建议先观察下电脑上所有USB接口的布局,并画在纸上,对一会儿的操作进行记录。比如我的就是这样:
然后我们便可以拿出我们准备的USB设备,把每个USB接口都插一遍(5秒左右),然后观察工具界面的变化。界面中新增的变绿这行,就是当前插入的USB口对应的端口。然后我们便可以在纸上记录对应位置的USB口的端口号。循环此操作,直到我们用USB3.0和USB2.0设备把所有的USB口都插一遍。
结束后,程序界面基本上是这样的:
我们在纸上记录的结果也大致如此(其中中间的数字为端口号的十进制表达,最右侧的为十六进制表达):
接下来我们输入 返回上级菜单,再输入 进行端口的选择。在该界面中,我们可以直接输入序号,切换其是否是选中的状态,也可以输入 清空所有的选择,输入 选择所有端口。我的最终选择如下,稍微解释下:
检查无误后,我们输入 生成 UTBMap.kext 文件。正常情况下,该文件生成在 Windows.exe 的同级目录下。
然后我们进入 UTBMap.kext 文件夹中的 Contents 文件夹,找到 Info.plist 文件并打开,手动删除Port 13、Port 14。
我们打开 IOKitPersonalities 节点,下面的两个即为我们主板上USB控制器的地址,找到刚刚超过15个端口的控制器,打开下面 IOProviderMergeProperties 节点,其下面的 ports 节点即为各个节点的详细信息。
我们该如何找到要删除的Port 13、Port 14两个端口呢?
这时刚刚记录的端口号的十六进制的表达就起作用了,我们会发现每个端口详情下的 port 中记录的即为该端口好的十六进制数值。所以我们找到 port 值为 和 的端口并删除即可。
删除后,我们保存这个Info.plist文件。
加载 USBToolBox.kext 和 UTBMap.kext 文件: 最后,我们把 USBToolBox.kext 和 UTBMap.kext 这两个文件放入 EFI 文件夹下,并使用 Propertree 的 OC Clean snapshot 功能更新 config.plist 文件并保存即可。
到目前为止,我们已经根据自己的硬件定制了一个EFI文件夹,最后我们把这个EFI文件夹放入U盘的EFI分区即可。
安装 OpenCore 引导: 我们把之前制作的macOS安装U盘插入电脑上,因为U盘格式化的为HFS格式,所以插入Windows系统下会提示格式化,千万别点格式化。因为Windows不认HFS格式的文件系统,所以我们使用 DiskGenius 安装OpenCore。
打开 DiskGenius ,找到插入的U盘,选中下面名为EFI的分区,切换到 浏览文件 tab下。
正常情况下,该分区应该是空的,如果不是空的,可以全部选中右键,彻底删除文件。
清空了该分区后,我们把刚刚制作的EFI文件夹拖到这里,复制到EFI分区里即可。