宇宙よりも遠い場所
OpenCore 引导迁移折腾记录

前言:OpenCore 引导(下文简称 OC)出来了很长一段时间了。但是最近不知什么原因,对新技术特别不敏感,所以观望了很久,也一直没有动手从 Clover 转 OpenCore. 嗯?那为什么会有这篇文章呢?这件事还要从一只蝙蝠说起……

Table of Content

这篇文章主要涵盖以下内容:

  1. OpenCore 引导配置的大体步骤和参考资料
  2. 从 Clover 迁移 OpenCore 的指南
  3. 使用 OpenCore 引导时的一些问题及解决方案
  4. 个人对 OpenCore 的理解

1. 配置 OpenCore 引导

因为 OpenCore 的选项繁多,在配置 OpenCore 引导的时候,我们必须要了解大部分选项的功能/意图,就像我们在配置 Clover 的时候那样。只有明白这些选项的功能,当引导遇到问题的时候,才能大致地定位问题是由哪些选项引起的;即使不知道具体是哪个选项引起的,也很容易通过搜索引擎搜索关键词,从而快速地解决问题。

OpenCore 的 Release 中,提供了一份详尽解释 Config 中各项选项功能的 PDF 文档 《OpenCore Reference Manual》(位于 Docs/Configuration.pdf )。另外,在该目录下还有每次版本更新的变动说明 (Docs/Differences.pdf). 理论上来说,这些文档应该是配置 OC 时最好的参考依据,but,这么长的好几十页纸和满屏的英文,对于一些新手来说是一件很头疼的事情。

事实上,也有许多写的不错的中文的参考资料,例如 xjn 的 《使用 OpenCore 引导黑苹果》黑果小兵 的 《精解 OpenCore》 是我认为写得比较详尽的两篇。但是我个人非常推荐新手阅读 OpenCore Vanilla Guide 里面的相关部分来配置 OpenCore 引导,虽然仍然是英文,但是里面的文章写得很清晰。

接下来我会以 CoffeeLake 平台的 OC 配置为例,结合 OpenCore Vanilla Guide 中的部分内容,讲解整个配置 OC 引导的过程。

1.1 准备工作

我非常推荐大家在配置 OpenCore 的时候首先遵循最简和增量的原则,也就是:

  • 最简:尽可能地保持配置文件的简洁性,不要勾选没有用途的选项。这样的好处是减少一些因为勾选了部分选项导致的无法解释的行为,并且在排错的时候减少工作量。
  • 增量:第一次配置 OC 时采用最小化的配置,当能够使用最小化配置正常引导 macOS 之后,再逐渐添加必要的 ACPI 补丁和内核拓展。这样的好处是一旦遇到异常情况,可以缩小问题的排查范围。

为了从零开始配置一份 OC 引导,首先你需要下载这些东西。因为 OC 和关键部件更新速度很快,所以推荐下载最新版本。

此外你还需要一个用于编辑 config.plist 的工具:尽可能地使用 Xcode,或 ProperTree,这也是官方推荐的工具。但是随着时间推移,OpenCore Configurator 也逐渐完善了,所以现阶段也可以使用该工具来配置 OC,但必须确定你使用的 OpenCore Configurator 支持你所配置的 OC 版本。

1.2 文件结构

  • 解压 OpenCorePkg,得到 Docs, EFI 和 Utilities 三个文件夹。我们接下来将以 EFI 文件夹为基础配置 OC.
  • 从 Docs 文件夹中,复制 Sample.plistEFI/OC 下并重命名为 config.plist. 该文件就是 OC 的配置文件。
  • Docs/AcpiSamples 文件夹中,使用 MaciASL 编译 SSDT-AWAC.dsl, SSDT-EC-USBX.dsl, SSDT-PLUG.dsl, SSDT-PMC.dsl 为相应的 .aml 文件,复制到 EFI/OC/ACPI 下,我会在后文解释这些 ACPI 补丁文件的作用。
  • 解压 AppleSupportPkg,复制 ApfsDriverLoader.efiVBoxHFS.efiEFI/OC/Drivers 下。你也可以用从别处获得的 HFSPlus.efi 替换 VBoxHFS.efi.
  • 解压 Lilu, WhateverGreen, VirtualSMC,复制相应的 kext 文件到 EFI/OC/Kexts 下。

1.3 修改 config.plist

使用你喜欢的修改工具打开 config.plist,开始修改配置。

1.3.1 修改 ACPI 部分

ACPI

我们主要关心 ACPI=>AddACPI=>Patch 两部分,前者是用来添加 DSDTSSDT 补丁的地方,后者则是用来打 ACPI 重命名补丁的地方。

ACPI=>Add 下,添加 EFI/OC/ACPI 文件夹中的所有编译好的 DSDTSSDT,如前文复制过的 SSDT-PLUG.aml 等,记得将 Enabled 设置为 YES. 特别注意 OpenCore 的 DSDT/SSDT 加载是有顺序的,应该把 DSDT放在最前面;而 SSDT 如果没有特殊情况随意排序即可。

ACPI=>Patch 下,主要是添加一些 ACPI 方法和设备的重命名。我们主要关心每一个 Patch 项的这些属性:

  • Comment:注释,随你的心情填写
  • Find:原始 ACPI 中你要打补丁(改名)的部分,以十六进制的形式填写
  • Replace:如果在原始的 ACPI 中找到需要修改的地方,则将其替换为 Replace 中的内容;同样以十六进制填写
  • Count:这个重命名应该被应用几次,也就是有几个改名的部分被替换,如果不限制则填 0
  • Limit:最多应用次数的限制,如果不限制则填 0
  • Enabled: 是否应用此重命名

打个比方,例如我们在映射键盘的 Fn 快捷键的时候,常常要把原来按快捷键调用的 ACPI 方法重命名,比如把 _Q14 改为 XQ14 ,那么我们可以这样填写:

Comment: change _Q14 to XQ14
Find: <5F513134>        // 注意,如果你使用 Xcode 编辑 Data 时必须就加上 <> 才可以,其它工具则不必要
Replace: <58513134>
Count: 0
Limit: 0
Enabled: YES

特别需要注意一件事情,OC 引导加载的 DSDT/SSDT 和这些 ACPI 补丁,是对所有通过 OC 引导的系统应用的;也就是说,如果你使用 OC 引导 Windows,那么 OC 同样会加载这些 SSDT 并应用这些重命名,这跟 Clover 是不一样的。因此 OC 官方推荐尽量不要有不必要的 ACPI 重命名;使用的 SSDT 中也要使用 _OSI 方法来判断是否为 macOS 按需加载。如果对此想更深入的了解,可以看看 《关于 OpenCore 双系统引导的总结与讨论》 这篇文章。

说起来,那么最开始让大家放进去的那几个 SSDT 有什么用途呢?

SSDT 用途
SSDT-AWAC.aml 修复 300 系列主板(B360, B365, H310, H370, Z390…)系列主板的 RTC 设备问题。例如说部分微星的主板,以及清华同方九代模具,都需要应用这个补丁,否则会卡住而无法进入系统,所以建议八代 (CoffeeLake) 以上的用户都添加这个 ACPI 补丁。
SSDT-EC-USBX.aml 这个 SSDT 同时添加了一个仿冒的 EC 设备并完善了 USB 的供电。当然,如果你的主板的 EmbeddedController 原生的 ACPI 命名就是 EC,则不需要该补丁。
SSDT-PMC.aml 这个 SSDT 与 NVRAM 相关。
SSDT-PLUG.aml Skylake (6 代) 以上的机型,在 Clover 中可以直接勾选 “注入插件类型”,自动注入 plugin-type=1 参数,这是启用原生电源管理的关键。在 OC 中的替代方法就是加载此 SSDT.

至于 ACPI=>Quirks 里面的选项,则可以根据主板的情况按需选择,例如:

  • 如果你加载了自定义的 DSDT, 则 RebaseRegions 选项可以自动重新分配 ACPI 中的存储器域。
  • 如果因为主板无法维护硬件签名导致重启,或睡眠唤醒时出现问题,则可以开启 ResetHwSig 选项。
  • 如果使用 OC 引导 Windows 操作系统时不显示 OEM Logo,可以开启 ResetLogoStatus.

1.3.2 修改 Booter 部分

booter

理论上来说,这一部分的选项不需要怎么修改。这里解释一下部分选项:

选项名 推荐 作用
AvoidRuntimeDefrag YES 修复一些与 UEFI 运行时有关的功能,例如时间、NVRAM、电源控制等
DevirtualiseMmio YES 添加 slide=N 的选项,对于某些 300 系列主板是必须的
DisableSigleUser NO 禁用通过 -sCmd+S 单用户模式,单用户模式类似 Windows 下带命令提示符的安全模式
DisableVaribleWrite NO 本身是为不能支持原生 NVRAM 的主板设计,如果加入了 SSDT-PMC,则不需要勾选
EnableSafeModeSlide YES 在安全模式下启用 slide=N 引导参数
EnableWriteUnprotector YES
ProvideCustomSlide YES 解决引导提示 Only N/256 slide values are usable! 的问题
SetupVirtualMap YES
ShrinkMemoryMap NO 除非内存映射空间很大,否则不需要选择此选项
SignalAppleOs NO 欺骗硬件令其认为始终启动 macOS,不明白有什么意义,总之不选就是

1.3.3 修改 DeviceProperties 部分

这里可以为一些设备注入属性,例如为声卡设备注入 layout-id 使其通过 AppleALC.kext 驱动;或者为显卡注入 ig-platform-id,添加在 DeviceProperties => Add 下即可:

device-properties

DeviceProperties => Add 下的每一个元素应该为一个 Directory,名称为设备的 PCI 路径:

  • 例如声卡的设备路径一般是 PciRoot(0x0)/Pci(0x1f,0x3)
  • 核显的设备路径一般是 PciRoot(0x0)/Pci(0x2, 0x0)

声卡部分根据自己使用的声卡,参考 Supported Codecs 表格填写二进制值即可。例如,对于清华同方模具机型,一般采用 Realtek ALC269vc 声卡,注入 ID 为 29,则填写:

Key: layout-id
Value: <1D000000>
Type: Data

显卡部分可以参考platform-id 速查表 找到对应本机核显的平台和设备 ID,然后填写在对应的设备路径下。同时可能还需要设置一下 framebuffer-stolenmem 等值,以防止因为 DVMT Pre-allocated 值太小导致的 panic.

例如对于笔者的 8 代 CoffeeLake 笔记本平台的 platform-id3E9B0000,则注入:

Key Value Type
AAPL,ig-platform-id 00009B3E DATA
device-id 9B3E0000 DATA
framebuffer-patch-enable 01000000 DATA
framebuffer-stolenmem 00003001 DATA

特别注意 AAPL,ig-platform-iddevice-id 值的顺序是部分按字节反写的。

1.3.4 修改 Kernel 部分

kernel

这部分主要是和内核相关的选项,也是 OC 配置中比较关键的地方。

首先让我们来看 Kernel => Add 部分,这里同时要说一下 OpenCore 与 Clover 的一个区别:Clover 引导时,如果没有特别被禁用掉的 Kext,那么会默认自动加载 kexts 文件夹下对应系统版本号和 Other 文件夹中的所有 kexts;而 OpenCore 并不会自动加在 EFI/OC/Kexts 下的内核拓展,而只会加载你写入 config.plist 中并启用的内核拓展,并且加载 Kexts 是有顺序区分的。我个人理解:这样做的好处是防止一些 可能冲突的 Kexts 因为加载顺序不同,导致出现无法预料的问题。

Kernel => Add 下要为你想加载的每一个内核拓展(及其子拓展)添加一个条目,条目包含以下属性:

属性名 解释
BundlePath 你想加载的内核拓展的路径。对于直接位于 EFI/OC/Kexts 下的 kext,直接填写名字即可,如 Lilu.kext;如果是某一个内核拓展的子拓展,则填写具体路径:如对于 VoodooPS2Controller.kext 的内核子拓展 VoodooPS2Keyboard.kext,则填写 VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Keyboard.kext
Comment 注释,随心情填写
ExecutablePath 可执行文件位置,对于有可执行文件的内核拓展,一般位于 Contents/MacOS/[Kextname],如 Lilu.kext 的可执行文件位于 Contents/MacOS/Lilu;可以在访达中“查看包内容”来找到具体路径;如果没有则留空
PlistPath Info.plist 文件的位置,一般所有的 kext 都有此文件,位于 Contents/Info.plist
MinKernel, MaxKernel 指定加载拓展的内核版本,一般留空即可,表示在所有的 macOS 版本下都加载
Enabled 是否加载该内核

特别需要注意几个地方:

  • 第一是对于那些包含子 kext 的 kext,如 VoodooPS2Controller.kext, VoodooI2C.kext,需要将它们的子 kext(如 VoodooI2CService.kext 等)也一并写入。
  • 内核拓展的加载是有顺序的,例如:建议把 Lilu 放在最前面,VirtualSMC, AppleALC, WhateverGreen 等依赖于 Lilu 的 kext 必须在 Lilu 加载之后加载;I2C 触摸板驱动的加载顺序应为:VoodooI2Cservice.kext => VoodooGPIO.kext => VoodooI2C.kext => VoodooI2CHID.kext 等。错误的加载顺序可能会导致系统 panic 或工作不正常。
  • OpenCore 没有 Clover 的 ForceKextsToLoad 功能,所以如果要强行加载系统 kext,必须将其复制到 EFI/OC/Kexts 下,并写在配置文件中加载。

Kernel => Blocks 用于禁止系统的 Kext 加载;Kernel => Patch 功能则对应的是 Clover 的 KextsToPatchKernelPatch 两个功能,如有需要则可以按照在 Clover 中添加的方式,相同地添加在 OC 中。参数的作用与前文 ACPI 中阐述的一致。

Kernel => Emulate 用于仿冒 CPU ID,如果你有不被 macOS 原生支持的 CPU (如奔腾,赛扬……),则可能需要用到这个功能。如果是较新的酷睿平台,这里可以留空。

Kernel => Quirks 包含了部分常用的内核选项,这里翻译一部分:

属性名 推荐 作用 对应 Clover 选项
AppleCpuPmCfgLock AppleXcpmCfgLock YES 对于那些没有解锁 CFG Lock 的设备,需要将这两项设置为 YES,否则会无法引导 macOS. 如果解锁了CFG Lock (MSR 0xE2),无论是否勾选都不会有问题 KernelPM, KernelXCPM
AppleXcpmExtraMsrs NO 对于某些奔腾和至强的 CPU 需要勾选以关闭多重 MSR 访问 -
AppleXcpmForceBoost NO 强制最大倍频,一般用于至强 CPU -
CustomSMBIOSGuid NO 一般与戴尔笔记本相关 DellSMBIOSPatch
DisableIOMapper YES 开启此选项以便解决与 Intel VT-d 的冲突 -
DummyPowerManagement NO 禁用原生电源管理,可以替代 NullCPUPowerManagement.kext,对于农企家的 CPU 需要勾选,牙膏厂家的则不需要 -
ExternalDiskIcons YES 如果内置的 NVME 设备被识别为外置存储,则勾选此选项 -
LapicKernelPanic NO 一般用于惠普的笔记本无法启动时 KernelLapic
PanicNoKextDump YES 指定当系统发生 panic 时,是否显示已加载的 kext 列表。这里建议设为 YES 以便后期 panic 时排错 PanicNoKextDump
PowerTimeoutKernelPanic YES
ThirdPartyDrives NO 为 SATA SSD 打开 Trim
XhciPortLimit NO 破解 USB 15 端口限制,官方建议定制 USB 替代

1.3.5 修改 Misc 部分

misc

这一部分与 OpenCore 的引导行为有关,官方的建议是:

leave as-is unless you know what you’re doing. (除非你知道自己在做什么,否则保持默认值即可)

这里给出部分推荐设置和解释:

属性 推荐值 解释
Console Mode Max 设置控制台模式为最大允许分辨率
Console Behaviors Os Graphics -
Console Behaviors Ui Text -
Resolution 屏幕的最大分辨率 -
Timeout 按你的喜好设置 引导默认系统的超时
Hibernate Mode Node 黑苹果不要开休眠到硬盘的模式 (Hibernate)
Hide Self YES 在 Picker 中隐藏 OC 启动项
Show Picker Use Picker YES 是否使用操作系统选择器
PollAppleHotKeys YES 是否允许使用热键,如 Cmd+V 进入啰嗦模式
DisableWatchDog YES 官方说解决一些 OC 无法正常引导的问题
AllowNvramReset YES 允许清空 NVRAM,注意在一些机型上该选项会同时清空 UEFI 启动项数据
AllowSetDefault YES 允许使用 Ctrl+Enter 设置默认引导系统
RequireSignature RequireVault NO 因为不使用 FileVault 加密(或文件保险箱),所以不选择
ScanPolicy 0 使 OpenCore 扫描所有分区上的操作系统

上面未提到的值保持默认即可。

1.3.6 修改 NVRAM 部分

nvram

默认 NVRAM 部分有两个分类:

4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 中有一个选项 UIScale,如果没有特殊情况大部分电脑填写 01 即可。

7C436110-AB2A-4BBB-A880-FE41995C9F82 下:

  • boot-args 即引导参数,根据需要填写就好,推荐在调试的时候保留 -v keepsyms=1 debug=0x100 这三个参数。部分主板可能需要填写 slide 值,具体与用 Clover 引导时的规则一致。
  • csr-active-config 即系统完整性保护 (SIP) 的状态:
value 解释
00000000 完全开启 SIP
30000000 允许未签名的 Kext 加载
E7030000 完全关闭 SIP
  • prev-lang:kbd 即默认语言和键盘布局,中国大陆用户可以填写 7A682D48 616E733A 323532.
  • nvda_drv 即是否加载 N 卡驱动,仅限 10.13.6 以下系统,填写 31 即为加载;如果不加载则可以删除该项。

其它的选项我们都可以保留默认,不用修改。

1.3.7 修改 PlatformInfo 部分

smbios

这一部分即为 SMBIOS 信息,填写 Generic 中的内容即可,SpoofVendor 设为 Yes,然后填写序列号 (SystemSerialNumber)、主板序列号 (MLB)、SmUUID (SystemUUID) 和 ROM 等;可以使用 Clover Configurator 或 macserial 等程序生成。SystemProductName 要填写与序列号和主板号对应的型号。

如笔者在 SystemProductName 填写 MacbookPro15,3,表示仿冒 SMBIOS 机型为 MacBook Pro (15inch, 2019), 对应序列号应为 C02xxxxxLVCG.

1.3.8 修改 UEFI 部分

uefi

这一部分主要和 OC 引导系统的行为有关,同时也是 OC 区别于 Clover 引导的行为体现最多的一个部分。

首先设置 ConnectDriversYES, 接下来我们仍然只修改一些必要的部分。

Drivers 中,添加 EFI/OC/Drivers 中你希望加载的 efi 驱动。注意这个加载驱动的列表仍然是有序的,一般我们需要:

  • ApfsDriverLoader.efi : 苹果的 APFS 格式文件系统驱动,引导 macOS 必须驱动
  • VBoxHFS.efi : 苹果的 HFS+ 格式文件系统驱动,也可以用 HFSPlus.efi 替代
  • FwRuntimeService.efi :集成 NVRAM 模拟和 AptioMemoryFix 驱动,必须

其它的则可以根据需要自行添加,如加入 AppleUsbKbDxe.efi 以支持快捷键、加入 VirtualSMC.efiVirtualSMC.kext 配合等。当然,前提是要保证你的 EFI/OC/Drivers 下有这些驱动。

Input 中,基本保持默认即可。可以设置 KeySupport = YES 以开启原生快捷键支持。一般我们不需要修改 Protocols 中的内容,保持默认即可。

Quirks 部分就比较复杂,这里给出部分选项的推荐值和解释,其它的保持默认即可。

属性名 推荐 解释
ReleaseUsbOwnership NO 释放 USB 控制器驱动,等同于 Clover 中的 FixUSBOwnership
RequestBootVarFallback RequestBootVarRouting YES OC 要求开启这两个选项
SanitiseClearScreen YES 修复高分屏以 1024x768 的分辨率显示 OC,但是有时候也会有反效果
ProvideConsoleGOP YES 解决选择引导后黑屏

到这里,终于完成了 OC 的配置,果然如同传言的一般繁琐。接下来就可以把 EFI 文件夹拷贝到 U 盘的 ESP 分区里,尝试启动了。注意的是,不同于 Clover,OC 必须引导 EFI/Boot/bootx64.efi 启动,而不能引导 EFI/OC/OpenCore.efi 启动,否则无效。

2.从 Clover 迁移 OpenCore 的指南

很多人可能正在使用 Clover 启动,如果要从 Clover 转到 OC 引导的话,可能会遇到一些问题。这里就根据我个人转换引导的经验,写一份指南。

2.1 DSDT/SSDT 的改动

因为 Clover 引导 Windows 的时候并不会加载 SSDT 补丁和 ACPI 重命名的,但是 OC 会这样做,所以一般需要对 SSDT 补丁进行一些改动,以便使其只应用于 macOS 下,具体可以参考上文提到的文章。基于此原因,还需要删除不必要的 ACPI 重命名。

需要注意的是,如果仍然保留原先 Clover 下的 SSDT 和 DSDT 以及 ACPI 命名,是仍然可以正常引导 macOS 的。

2.2 部分 ACPI 补丁的替代

在使用 Clover 的时候,Clover 强大的 ACPI 功能可以帮我们自动打了一些补丁,比如在 ACPI 中勾选 “修复 HPET (Fix HPET)”、“修复 IPIC (Fix IPIC)” 等,同时还有注入插件类型的功能。然而这些功能 OpenCore 并不原生支持,我们需要添加并加载一些 SSDT 才可以实现。

对于插件类型,也即 plugin-type=1,在上文中我们已经提到了,可以通过加载 SSDT-PLUG.aml 来解决。

对于 HPETIRQ 相关的补丁,可以使用 SSDTTime 根据原始 DSDT 自动生成。

对于 PNLF,在 WhateverGreen 的 Release 中提供了 SSDT-PNLF.aml,加载该文件即可。

其它选项的替代方案,可以参考:https://github.com/khronokernel/Opencore-Vanilla-Desktop-Guide/blob/master/clover-conversion/Clover-config.md

2.3 引导相关设置

引导参数 (Boot Args):对应 OpenCore NVRAM 部分的 7C436110-AB2A-4BBB-A880-FE41995C9F82 -> boot-args.

2.4 设备相关设置

Clover 提供的大部分设备属性,可以通过对相应设备注入 DeviceProperties 实现,参照此对照表。只有对于 IGPU 的 FakeID 处理方式稍有不同,可以参考这篇指南

2.5 内核补丁相关设置

参考上文 “1.3.4 修改 Kernel 部分”,你能找到与 Clover 对应的选项。

3. 使用 OpenCore 引导时的一些问题及解决方案

事实上,OC 引导现在远远没有达到很成熟的地步,因此初次使用 OpenCore 引导必然会出现这样和那样的问题。尤其是对于 Clover 转 OpenCore 的用户,更是难以理解:为什么同样的配置方法在 Clover 下可用,但是到 OC 下根本无法引导。这里就笔者遇到的一些问题,写出解决方案,供如果有遇到同样问题的人参考。

当然,在遇到问题的时候,Google 和百度永远是你的好伙伴。此外也可以多去 pcbeta 和 tonymacx86 等网站爬帖。OpenCore Vanilla Guide 中的以下文章也是很好的参考:General Troubleshooting .

引导 OpenCore 后回到 BIOS / 引导选择界面

首先要确定你的 ESP 分区内分区结构正确,然后确保你引导的是 EFI/BOOT/bootx64.efi 而不是 EFI/OC/OpenCore.efi,如上文所提到的。

引导时提示 no vault provided!

关闭 Misc -> Security 中的 RequireSignatureRequireVault,关闭 FileVault.

引导系统时卡在 PCI Configuration Begins, Previous Shutdown…, HID: Legacy… apfs_module_start… 等

确认你打了 SSDT-EC.amlSSDT-EC-USBX.aml 补丁和 SSDT-AWAC.aml 补丁。

如果无效,尝试添加 npci=0x2000 参数。

如果仍然无效,关闭 UEFI => Quirks => ReleaseUsbOwnership 选项。

出现禁行标志并提示 still waiting for root devices

首先确定你在 BIOS 中将 SATA 模式设置为 AHCI 而不是 RAID 等。

如果确实是 AHCI,则尝试打开 Kernel => Quirks => XhciPortLimit

如果还是没有解决,尝试打开 UEFI => Quirks => ReleaseUsbOwnership 选项。

如果以上无法解决,考虑定制 USB.

Kernel Panic 并提示 “Cannot perform kext summary”

多半是由于 kext 的加载顺序错误,建议按上文所建议的顺序加载。

因为 AppleIntel***Framebuffer 导致的 Kernel Panic

首先出现这种问题多半是因为 DVMT Pre-allocated 的问题,先进入系统尝试使用 Hackintool 打缓冲帧补丁,并合并到 OC 的 DeviceProperties 中。

但是我在迁移的过程中,发现与 Clover 中同样的属性值和补丁,在 OC 中却导致了这样的错误。最终发现原因是因为没有加载 SSDT-PLUG.aml,即没有注入 plugin-type=1.

I2C 触摸板不可用,但驱动已经加载

强制 IOGraphicsFamily.kext 加载即可。由于 OC 没有 ForceKextsToLoad 的功能,我们需要从 macOS 的 /System/Library/Extendsion 下提取这个 kext 放到 EFI/OC/Kexts 下,并在 config.plist 的 Kernel => Add 中添加此 Kext.

4. 个人对 OpenCore 的看法和总结

到此,这篇文章就要结束了。断断续续地折腾了好久的 OC 引导,对此有一些个人的看法。

首先,OpenCore 是不是未来的潮流,答案是肯定的,因为现在 Hackintosh 社区的重心已经放在了 OC 的开发上,并且许多 kext 的测试已经转到了 OC 上。

但是, OC 一定比 Clover 更优秀吗?至少现阶段我对这个问题并不持肯定的态度。原因有二,第一是虽然 OC 在引导方面的功能很强大,但 OC 的配置十分繁琐,并不一定适合所有的用户。第二是虽然 OC 有很多 Clover 没有的新特性,但是在一些机型的兼容性方面反而不如 Clover. 再有,因为 OC 的引导机制与 Clover 的巨大不同,OC 对多系统引导的支持反而不如 Clover.

所以现阶段我的看法是,对于那些喜欢折腾、有能力解决问题的人,那么可以尝试一下 OpenCore,以便在未来能够无缝过渡;但是对于一般用户,或者追求稳定的用户,则完全没有必要这么着急跟风上 OpenCore.

以上。


Last modified on 2020-02-06

comments powered by Disqus