前言
之前使用 Clover 作为系统系统引导,再加上本身接触的比较晚,查阅很多资料都是老版本,包括一些驱动什么的,版本众多,看着迷糊,虽然使用没啥问题,无奈有时间遇到一个小问题需要花大量的时间去查找寻找时间,所以这段时间尝试使用 OpenCore 作为新的系统引导(下文简称 OC)。因为 OC 出世不长,有些资料版本比较新,很适合像我这种不需要了解某个事物历史等因素。还好这次入坑遇到不少人帮助,非常感谢一些朋友的帮助让我少走一点弯道,到此为止现在系统能够正常使用。
准备
前一段时间虽然成功,但因为网卡和显卡驱动问题一直拖到这个月,所以这次换了一部分硬件,不知道算是降级体验吗?
- 主板:微星 Z370-OC-ProMS-7B48
- CPU:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
- 显卡:NVIDIA GeForce GTX 1070 Ti=> 降级替换 蓝宝石 RX590 8G D5 超白金 极光特别版 (2304个流处理器)
- 磁盘:WDC WDS240G2G0A-00JH30 (240GB) / NVMe Asgard AN3 1TNVM (1.0TB) / ST2000DM006-2DM164 (2.0TB)
- 内存条:阿斯加特 - 16.0GB
- 板载网卡:Realtek PCIe GbE Family Controller
- 无线网卡:Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)=> BCM94360CD
- 声卡:Realtek High Definition Audio
- 显示器:一个飞利浦 直面 1080P / 俩个三星 曲面屏 1080P=> 三星直板 4K 分辨率支持HDR 显示器 - 俩个
因为手里有三星设备,想体验Sumsunng Dex 系统,加上三星品控不错,所以入了三星显示器。至此为止,硬件基本满足黑苹果的需求,下面进行引导替换。由于这仅仅是替换引导,不需要对系统进行更换,所以只是替换 EFI 目录下的 Clover 引导而已。
首先需要准备一个刻录系统的优盘,这边可以参考下之前的 刻录系统文章 ,如果你懒的话可以直接使用磁盘工具 格式化优盘:
- 名称随意编写,例如 OC
- 格式选择 MS-DOS(FAT)
这样且当做 EFI 分区,下面大部分操作就在这里面进行。
无论无何不能在系统安装的磁盘的
EFI里进行修改操作,如果破坏无法进入系统真的完蛋了。其次要勤奋备份自己的
EFI数据,因为折腾不容易,丢了又要从头开始。
转移
之前不知道在哪看到的,不管是 Clover 还是 OpenCore 引导驱动越少越好,较少对系统的干扰因素。所以当时制作引导,只保留最精简的驱动和配置。这边我不会细细讲解配置过程,因为网上的教程实在是太多了,可以参考下:精解OpenCore 和 使用OpenCore引导黑苹果 ,写得不错,看他们写的文章,花了三个小时搞定 EFI 引导。
当时版本:OpenCore-0.5.7
下载 OC 解压把 EFI 文件夹放到优盘下面,并且查看 /EFI/OC 文件夹下内容:
Drivers文件夹下:
| 驱动文件 | 解释 | 
|---|---|
| HiiDatabase.efi | 用于给 Ivy Bridge (3 代酷睿) 或更老代主板上支持 UEFI 字体渲染, UEFI Shell 中文字渲染异常时使用, 新主板不需要 | 
| NvmExpressDxe.efi | 用于在 Haswell (4 代酷睿) 或更老的主板上支持 NVMe 硬盘, 新主板不需要 | 
| OpenCanopy.efi | 实现图形界面,一般用于主题 | 
| OpenRuntime.efi | 内存寻址补丁 | 
| OpenUsbKbDxe.efi | 键盘组合键的使用 | 
| XhciDxe.efi | 用于给 Sandy Bridge (2 代酷睿) 或更老的主板上支持 XHCI, 新主板不需要 | 
综合上述,只保留 OpenRuntime.efi 文件,其他可以删除,当然把 OpenCanopy.efi 保留下来。然后额外添加
| 驱动文件 | 解释 | 
|---|---|
| ApfsDriverLoader.efi | APFS格式支持 | 
| HFSPlus.efi | HFS格式支持 | 
下面整内核驱动 Kext:
| 内核驱动 | 解释 | 
|---|---|
| Lilu.kext | Acidanthera 驱动底层依赖 Github | 
| Applealc.kext | 声卡驱动 Github | 
| VirtualSMC.kext | 传感器驱动依赖 Github | 
| SMCProcessor.kext | CPU 核传感器 Github | 
| SMCSuperIO.kext | IO 传感器 Github | 
| WhateverGreen.kext | 核显 & 显卡驱动 Github | 
| IntelMausi.kext | Intel 类千兆网卡驱动(如果是用无线网卡可以不需要) Github | 
| Usbinjectall.kext | USB 通用驱动 Github | 
| NVMeFix.kext | 为 NVME 硬盘增加 ASPT 属性来保证节电 Github | 
将刚刚解压的 OC 文件夹下的 Docs/Sample.plist 文件重命名放入 EFI/OC/config.plist ,和 ACPI 文件夹同级。使用 Xcode 或者 PlistEdit Pro 打开 config.plist 删除上面的无用注释 #WARNING - # 。如果这类文本编辑器看着不直观可以使用 OCC 编辑器进行管理:文档介绍 。
然后根据上面的教程对自己配置进行一步个性化配置,这边不多说了。值得注意的时候,注意三码要一样,不然出现丢失 Apple ID 的问题,其次切换引导需要清除 NVRAM 再进入系统。
完善
声卡
在 config.plist/DeviceProperties/ 的 PciRoot(0x0)/Pci(0x1f,0x3) 有个 Layout-id 属性注入自己的 Codecs ,更多教程查看:AppleALC支持的Codecs列表及AppleALC的使用 。
核显加速
由于是独显输出,核显就拿来加速吧:在 config.plist/DeviceProperties/ 的 PciRoot(0x0)/Pci(0x2,0x0) 有个 AAPL,ig-platform-id 填入值是:0300983E  ,当时没理解这个,原来是固定值。如果没有独显,需要核显驱动视频那需要根据自己的 CPU 平台进行注入 GPUID:Coffee Lake帧缓冲区补丁及UHD630 Coffee Lake ig-platform-id数据整理 。
USB 3.0 定制
当初在屏蔽 USB2 死活屏蔽不了,然后发现是 Usbinjectall.kext 驱动下错了,应该是 @Sniki 维护的  Usbinjectall.kext 驱动,剩下可以参考:Hackintool 使用教程及插入姿势。值得注意是这边只需要最后生成的 USBPorts.kext 驱动放入 Kexts 文件夹下,并且禁用 USBInjectAll.kext 驱动即可。
CPU 变频
参考 CPUFriend的安装与使用 ,不过这个文章没有说出 System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resources/ 哪个 plist 文件,这边是你的 board-id 名字的文件,终端输入:
➜  ~ ioreg -l | grep board-id          
    |   "board-id" = <"Mac-63001698E7A34814">
然后进行文章的操作。
USBX供电
添加 USBPower.kext 驱动即可
CPU 电源管理
参考:注入X86
节能五项
SSDT-PM.aml
/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20200110 (64-bit version)
 * Copyright (c) 2000 - 2020 Intel Corporation
 * 
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASL2s2csv.aml, Sun Apr 12 22:14:00 2020
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x000000C6 (198)
 *     Revision         0x02
 *     Checksum         0xC2
 *     OEM ID           "ACDT"
 *     OEM Table ID     "PM"
 *     OEM Revision     0x00001000 (4096)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20180427 (538444839)
 */
DefinitionBlock ("", "SSDT", 2, "ACDT", "PM", 0x00001000)
{
    External (_SB_.PCI0.LPCB, DeviceObj)
    External (_SB_.PCI0.PMCR, DeviceObj)
    Device (PPMC)
    {
        Name (_ADR, 0x001F0002)  // _ADR: Address
        OperationRegion (PMCB, PCI_Config, Zero, 0x0100)
        Field (PMCB, AnyAcc, NoLock, Preserve)
        {
            VDID,   32, 
            Offset (0x40), 
            Offset (0x41), 
            ACBA,   8, 
            Offset (0x48), 
                ,   12, 
            PWBA,   20
        }
    }
    Scope (_SB.PCI0.LPCB)
    {
        Device (PMCR)
        {
            Name (_HID, EisaId ("APP9876"))  // _HID: Hardware ID
            Name (_STA, 0x0B)  // _STA: Status
            Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
            {
                Memory32Fixed (ReadWrite,
                    0xFE000000,         // Address Base
                    0x00010000,         // Address Length
                    )
            })
        }
    }
}
原生 NVRAM 支持
修改 config.plist 支持:
- Booter → Quirks → DisableVariableWrite = no
- Misc → Security → AllowNvramReset = yes
- Misc → Security → ExposeSensitiveData = 3
- NVRAM → LegacyEnable = no
添加 DSDT 补丁SSDT-PMC.dsl:
/*
 * Intel 300-series PMC support for macOS
 *
 * Starting from Z390 chipsets PMC (D31:F2) is only available through MMIO.
 * Since there is no standard device for PMC in ACPI, Apple introduced its
 * own naming "APP9876" to access this device from AppleIntelPCHPMC driver.
 * To avoid confusion we disable this device for all other operating systems,
 * as they normally use another non-standard device with "PNP0C02" HID and
 * "PCHRESV" UID.
 *
 * On certain implementations, including APTIO V, PMC initialisation is
 * required for NVRAM access. Otherwise it will freeze in SMM mode.
 * The reason for this is rather unclear. Note, that PMC and SPI are
 * located in separate memory regions and PCHRESV maps both, yet only
 * PMC region is used by AppleIntelPCHPMC:
 * 0xFE000000~0xFE00FFFF - PMC MBAR
 * 0xFE010000~0xFE010FFF - SPI BAR0
 * 0xFE020000~0xFE035FFF - SerialIo BAR in ACPI mode
 *
 * PMC device has nothing to do to LPC bus, but is added to its scope for
 * faster initialisation. If we add it to PCI0, where it normally exists,
 * it will start in the end of PCI configuration, which is too late for
 * NVRAM support.
 */
DefinitionBlock ("", "SSDT", 2, "ACDT", "PMCR", 0x00001000)
{
    External (_SB_.PCI0.LPCB, DeviceObj)
    Scope (_SB.PCI0.LPCB)
    {
        Device (PMCR)
        {
            Name (_HID, EisaId ("APP9876"))  // _HID: Hardware ID
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (_OSI ("Darwin"))
                {
                    Return (0x0B)
                }
                Else
                {
                    Return (Zero)
                }
            }
            Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
            {
                Memory32Fixed (ReadWrite,
                    0xFE000000,         // Address Base
                    0x00010000,         // Address Length
                    )
            })
        }
    }
}
编译 SSDT-PMC.aml 文件加入 ACPI 补丁支持。
OC 主题支持
主题资源:OcBinaryData
添加主题驱动支持:EFI -> OC -> Drivers -> OpenCanopy.efi
- Misc-其它设置 → Boot → PickerMode 启动菜单模式: External
- Misc-其它设置 → Boot → PickeraTtribute 图形界面设置属性: 1
- UEFI-UEFI设置 → UEFI驱动,添加OpenCanopy.efi项
未完待续...
分享
个人自用 EFI 分享地址:个人网盘

