SaltyFish's Bowl

更新Clover的配置文件的时候发现了一个新的引导工具——OpenCore
折腾了很久后终于可以使用了,记录一下配置的时候踩得坑

前言

关于OpenCore

OpenCore是继Clover后全新的系统引导工具。其拥有着许多Clover没有的特性,可以带来更加接近白苹果的体验。

不过需要注意的是,由于OpenCore基于ACPI标准以及不会对系统区别对待DSDT、SSDT,因此在启动Windows以及其他系统的时候很容易因为修改的DSDT、SSDT不规范引发各种各样的问题(蓝屏、系统激活状态失效)

OpenCore目前还处于测试阶段,有可能会引起一些问题,本文章也有可能因为OpenCore的更新而过时。

系统截图

SysScreen
SysScreen
SysScreen
SysScreen
SysScreen

本文所提及的内容

  1. 安装前的准备工作

  2. 引导文件配置

  3. 亮度调节、快捷键

  4. 系统睡眠

  5. CPU变频

  6. 一些需要注意的地方

一些软件以及工具

  1. OpenCore Configurator

    注意:OpenCore Configurator版本一定要和OpenCore的版本对应,(可以去关于里面查看),不然有可能导致OpenCore无法正常读取配置文件

  2. Xcode (用以修改文件、config.plist)

  3. MaciASL

  4. 优盘

参考内容

宪武大大oc部件

xjn大佬: 使用OpenCore引导黑苹果

黑果小兵大佬:精解OpenCore

开搞

注意:强烈不建议在配置OpenCore的过程中使用OpenCore引导Windows,很有可能会引发一系列的问题

安装前的准备工作

在配置OpenCore之前,我已经使用了一段时间的clover引导。因此在一些地方我参考了clover的配置,一些准备工作我也使用了Clover完成

提取本机的DSDT

在Clover的启动界面中,按下F4键稍等片刻即可,期间可能会卡顿,不必惊慌,正常现象
提取完成后会在/EFI/ACPI/origin下

https://img.vim-cn.com/72/101d9fd526191195c1df36d91656c74fa0c63e.png

查看本机的分区情况(可选)

某些情况下OpenCore可能会找不到当前引导项,所有我们可能需要手动填写丢失引导的引导信息
在Clover中选择EFI Shell,输入map命令来记录各个分区的ID等信息

https://img.vim-cn.com/fa/75f3f51b422130b764d2fdb1b8382d3649523f.jpg

不要问,问就是座机

提取System UUID

前文提到,由于OpenCore不会对系统区别对待,很有可能会因为系统的uuid不正确而引发各种软件激活失效、登录状态丢失等等一系列问题,所以我们先提取一下系统的UUID

在Windows系统下,打开Powershell,依次输入一下命令

1
2
wmic
csproduct list full

为优盘制作一个EFI分区

制作EFI分区的方法有很多,比如可以直接制作一个MacOS的系统安装盘,又或者你可以在MacOS的磁盘管理中选择抹掉优盘

但是你需要注意的是,这么操作后,你的优盘中的数据将会丢失,注意备份你的个人数据

EFI分区制作完成后,执行以下命令挂载EFI分区

1
sudo diskutil mount disk4s1     #disk4为你的优盘名称,不同的电脑可能会不一样

引导文件配置

在这里,我按照OpenCore的config.plist文件结构来进行说明

下载OpenCore,将文件解压放入优盘的EFI分区内

复制/Docs/Sample.plist/EFI/OC/下,并更名为Config.plist

使用编辑器打开Config.plist,并进行修改

ACPI

  1. 删除Add中的全部内容虽然不删除也没有问题,它们都没有启用,但是看着难受,那就干掉他

  2. 删除Block中的全部内容,理由同上

  3. 删除Patch中的全部内容,并添加Change EC0 to EC的Patch(防止Catalina无法启动)

    1
    2
    3
    Comment: change EC0 to EC
    Find: 4543305F
    Replace: 45435F5F

    注意:其余项目保持默认即可,无需修改
    注注意:OpenCore尽量少用这种更名,后面会更换为SSDT-EC

  4. Quirks中的选项全部关闭即可

Booter

保持默认即可,无需修改。觉得碍眼可以将MmioWhitelist中的内容删掉

DeviceProperties

ADDBlock中的内容删除
ADD的内容与Clover中的Devices/Properties中的内容是一致的,用于注入声卡和显卡的信息。用Xcode的话你甚至可以直接复制

Kernel

  1. ADD中用于系统需要一些Kext文件,需要将Kext文件复制到/OC/kext/并且在将kext的基本信息填到里面才能加载

    需要放的kext文件:
    Lilu.kext下面所有驱动的依赖
    WhateverGreen.kext显卡驱动
    AppleALC.kext声卡驱动
    VirtualSMC.kext传感器依赖
    SMCBatteryManager.kext电池
    SMCSuperIO.kextIO传感器
    SMCProcessor.kextCPU传感器
    ApplePS2SmartTouchPad.kext触控板和键盘
    USBPorts.kext定制的USB驱动(只要生成的kext文件)
    AirportBrcmFixup.kext无线网卡
    RealtekRTL8111.kext有线网卡
    BrcmFirmwareData.kext蓝牙固件
    BrcmPatchRAM2.kext 10.14及以下蓝牙需要,MaxKernel填18.7.0
    BrcmPatchRAM3.kext 10.15蓝牙需要,MinKernel填19.0.0
    BrcmBluetoothInjector.kext 10.15蓝牙需要,MinKernel填19.0.0

    各项键值的含义:
    BundlePath:文件名称
    Comment:注释
    Enabled:是否开启
    ExecutablePath:驱动中二进制文件路径,一般为Contents/MacOS/xxxxxx(xxxx为文件名称)
    MaxKermel:此kext可以启用的最大内核(版本)
    MinKernel:与上方相反
    PlistPath:info.plist路径,一般为Contents/Info.plist

    驱动内的文件可通过右击>查看包内容查看
    注意:kext加载是有顺序的,比如,A依赖B,需要将B放在A的前面才能正常加载
    注注意:如果当前kext中还包含其他kext文件,也需要将包含的文件信息写入,位置在当前kext的后面
    这里可以使用OpenCore Configurator,选择完kext就可以帮你把剩下东西补齐

  2. Block保持不变或删除

  3. Patch:添加一项,防止数字音频崩溃

    1
    2
    3
    Comment:AppleALC Kernel Panic
    Find: 636F6D2E 6170706C 65005F5F 6B65726E 656C5F5F 00
    Replace: 6E6F742E 6170706C 65005F5F 6B65726E 656C5F5F 00

    开启Disable RTC wake scheduling防止睡眠唤醒

    其余项保持默认

  1. Quirks: 将AppleCpuPmCfgLockAppleXcpmCfgLock选为Yes

Misc

  1. BlessOverride中添加一项\EFI\Microsoft\Boot\bootmgfw.efi,类型为`String
  2. Boot:
    ConsoleBehaviourOs: Text
    ConsoleBehaviourUi: Text
    ConsoleMode: Max
    HibernateMode: Auto
    HideSelf: No
    PollAppleHotKeys: Yes
    Resolution: 1920x1080
    ShowPicker: Yes
    UsePicker: Yes
    Timeout: 5
  1. Debug 保持默认

  2. Entries 保持默认

  3. Security
    ScanPolicy: 0
    RequireSignature: No
    RequireVault: No
    AllowNvramReset: Yes
    AllowSetDefault: Yes

    其余保持默认

  4. Tools 保持默认

NVRAM

  1. ADD
    7C436110-AB2A-4BBB-A880-FE41995C9F82Boot Args添加 -v -debug=0x100

  2. LegacySchema:
    7C436110-AB2A-4BBB-A880-FE41995C9F82中添加efi-boot-device efi-boot-device-data两项

  3. 其他选项保持默认

PlatformInfo

  1. 可以使用OpenCore Configurator自动生成,机型为 MacBookPro14.1

  2. GenericSystem UUID 中填写从Windows系统当中获取的UUID

  3. 其他选项保持默认

UEFI

  1. 下载 AppleSupport,放在/EFI/OC/Drivers

  2. Drivers添加AppleUsbKbDxe.efi

    注: HFSplus.efi 启动速度要比VBoxHFS.efi要快上一些,如需替换自行下载

  1. Input清空PointerSupportMode,将KeySupport设置为YES

  2. ProtocolsConsoleControlAppleSmcIo(启用OpenCore内的virtualsmc.efi)设置为Yes,其余为NO

  3. QuirksIgnoreInvalidFlexRatio IgnoreTextInGraphics ProvideConsoleGop RequestBootVarFallback RequestBootVarRouting SanitiseClearScreen 设置为Yes,其余为No

确认无误后,就可以重启了,现在系统应可以重启了,如果正常的话,系统就可以正常启动。下面就可以进行其他方面的调整

亮度以及亮度快捷键

两种方式选择一个即可

ACPI方式修复亮度

  1. 下载宪武大大的OC部件包,放到桌面备用

  2. 在所有提取的ACPI文件中搜索_BCL_BCM_BQC,锐7000的位置在SSDT-0-SaSsdt.aml

  3. 由搜索结果可知,_BCL_BCM_BQC的所属设备名称为DD1F,所以SSDT-PNLF-ACPI中我们无需修改,保存为aml复制到EFI/OC/ACPI/中,并在config.plist中的ACPI/ADD中添加即可。
    如果不是设备名称不是DD1F,需要将补丁文件中的DD1F修改为设备名称

    https://img.vim-cn.com/46/7604ba56b6f06f73b0c6b31f5192c8f712e874.png

  4. 下载ACPIBacklight.kext,放入EFI/OC/Kexts中,并在config.plist中添加信息

  5. 修改config.plist中的NVRAM/ADD
    7C436110-AB2A-4BBB-A880-FE41995C9F82Boot Args添加 applbkl=0禁用Whatevergreen的亮度驱动

定制亮度补丁修复

不知道什么原因,直接将SSDT-PNLF补丁放入会导致Win10蓝屏,所以我一开始使用了ACPI的方式修复亮度,后来发现是如果将补丁插入_SB就会蓝屏,将插入位置修改为_SB_.PCI0.GFX0就可以,两种方式都记录一下下好了

打开部件包中的SSDT-PNLF-SKL_KBL.dslDevice(PNLF)的上方添加 External (_SB_.PCI0.GFX0, DeviceObj)_SB修改为_SB_.PCI0.GFX0,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

https://img.vim-cn.com/0e/ccda26be6881d0adeca26e026ff39a713e771d.png

亮度快捷键

  1. 打开提取的DSDT,搜索0x860x87 ,可以看到按键建码为_Q1C_Q1D,设备名称为Scope (_SB.PCI0.LPCB.EC0)

    https://img.vim-cn.com/5b/fee03b993a8dc71b4e10b9236e2c022c478cbf.png

  1. 在condig.plist中的ACPI/patch中添加以下内容

    1
    2
    3
    4
    5
    6
    7
    Comment: change _Q1C to XQ1C
    Find: 5f513143
    Replace: 58513143

    Comment: change _Q1D to XQ1D
    Find: 5f513144
    Replace: 58513144
  2. 打开SSDT-BKeyQ14Q15-TP-LPCB.dsl,将_Q14_Q15XQ14XQ15,修改为_Q1C_Q1DXQ1CXQ1D,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

    https://img.vim-cn.com/ff/2fef29a2e81f01b85c76af0187715a5c3614c1.png

    不要使用PS2K的方法,使用PS2K会在按下调节键的时候发生Kernel Panic重启

亮度保存

将OpenCore解压夹中的 /Docs/AcpiSamples/SSDT-ALS0.dsl保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

系统睡眠

修复睡眠后就被唤醒

  1. 打开提取的DSDT,搜索_PRW,可以看到以下内容

    1
    2
    3
    4
    Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
    {
    Return (GPRW (0x6D, 0x04))
    }

    因此使用SSDT-GPRW补丁

  2. 在condig.plist中的ACPI/patch中添加以下内容

    1
    2
    3
    Comment: change GPRW to XPRW
    Find: 47505257 02
    Replace: 58505257 02
  3. 打开SSDT-GPRW.dsl,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

修复唤醒后一些问题

  1. 打开提取的DSDT,搜索 _PTS_WAK可以看到以下字样

    1
    2
    3
    Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep

    Method (_WAK, 1, Serialized) // _WAK: Wake

    因此使用_PTS to ZPTS(1,N)_WAK to ZWAK(1,S)

  2. 在condig.plist中的ACPI/patch中添加以下内容

    1
    2
    3
    4
    5
    6
    7
    Comment: _PTS to ZPTS(1,N)
    Find: 5f505453 01
    Replace: 5a505453 01

    Comment: _WAK to ZWAK(1,S)
    Find: 5f57414b 09
    Replace: 5a57414b 09
  3. 打开SSDT-PTSWAK.dsl,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

修复RTC导致的唤醒

经过上述操作之后,电脑就可以正常睡眠了。然而,电脑在睡眠过程中会出现莫名其妙的唤醒问题。

在终端中,执行log show --last 1d |grep -i "Wake reason" ,可以看到到电脑的唤醒原因都是RTC (Alarm),查阅了资料,发现可以只需要禁用RTC的唤醒功能就可以了

rtc alarm

注意:这样修复之后,系统中电源小憩的功能就会失灵

在config.plist中的Kernel/patch中开启开启Disable RTC wake scheduling即可

换完之后,在终端中执行sudo pmset schedule cancelall,这样就可以去掉电源信息中的计划任务了

这样,睡眠就会正常了

sleep bingo

系统变频

加载原生的电源管理

  1. 打开提取的DSDT,搜索 Processor可以看到以下字样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Scope (_PR)
    {
    Processor (CPU0, 0x01, 0x00001810, 0x06){}
    Processor (CPU1, 0x02, 0x00001810, 0x06){}
    Processor (CPU2, 0x03, 0x00001810, 0x06){}
    Processor (CPU3, 0x04, 0x00001810, 0x06){}
    Processor (CPU4, 0x05, 0x00001810, 0x06){}
    Processor (CPU5, 0x06, 0x00001810, 0x06){}
    Processor (CPU6, 0x07, 0x00001810, 0x06){}
    Processor (CPU7, 0x08, 0x00001810, 0x06){}
    }

    因此使用SSDT-PLUG-_PR.CPU0补丁

    https://img.vim-cn.com/cc/4fdd5e310084f27490306613bfbd67a97cddd4.png

  2. 打开SSDT-PLUG-_PR.CPU0.dsl,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加即可。

CPU 变频

  1. 打开终端,执行以下命令

    1
    2
    3
    4
    5

    cd Desktop
    git clone https://github.com/corpnewt/CPUFriendFriend.git
    cd CPUFriendFriend
    ./CPUFriendFriend.command
  2. 首先设置最低频率,,然后设置EPP值,越小性能越强
    第一段: 最低频率80,EPP 0x80
    第二段: 最低频率80,EPP 0x70

https://img.vim-cn.com/fa/3e8dd6b937a7a5bdb6d6c9b9a70ef6c83fb7cd.png

  1. 将生成的CPUFriendDataProvider.kext,放入EFI/OC/Kexts中,并在config.plist中添加信息

  2. 下载CPUFriend.kext,并将其放入EFI/OC/Kexts中,并在config.plist中添加信息
    注意:CPUFriend.kext 在config.plist中应在 CPUFriendDataProvider.kext的前面

其他注意的地方

EC更名

由于OpenCore的特性,因此尽量少用全局的更名补丁。在之前使用了changge ec0 to ec这个补丁,我们可以使用SSDT-EC补丁来替换

打开SSDT-EC.dsl,保存为aml后放到EFI/OC/ACPI/,并在config.plist中的ACPI/ADD中添加,删除change ec0 to ec补丁即可。

Windows下使用启动助理切换引导

在macOS下,打开转换启动助理。然后点击操作 >下载Windows支持软件,将文件保存下来然后进Windows下安装即可。

BOOTCAMP

注:安装完更新一下bootcamp才能识别apfs分区

后记

差不多这样应该就可以运行了。享受更加接近白果的体验吧

往期传送门 :
联想小新锐7000の黑苹果折腾记(一)
联想小新锐7000の黑苹果折腾记(二)


扫码领红包

 评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题 , 总访问量为 字数统计:26.6k。 载入天数...载入时分秒...