更新Clover的配置文件的时候发现了一个新的引导工具——OpenCore
折腾了很久后终于可以使用了,记录一下配置的时候踩得坑
前言
关于OpenCore
OpenCore是继Clover后全新的系统引导工具。其拥有着许多Clover没有的特性,可以带来更加接近白苹果的体验。
不过需要注意的是,由于OpenCore基于ACPI标准以及不会对系统区别对待DSDT、SSDT,因此在启动Windows以及其他系统的时候很容易因为修改的DSDT、SSDT不规范引发各种各样的问题(蓝屏、系统激活状态失效)
OpenCore目前还处于测试阶段,有可能会引起一些问题,本文章也有可能因为OpenCore的更新而过时。
系统截图
本文所提及的内容
安装前的准备工作
引导文件配置
亮度调节、快捷键
系统睡眠
CPU变频
一些需要注意的地方
一些软件以及工具
-
注意:OpenCore Configurator版本一定要和OpenCore的版本对应,(可以去关于里面查看),不然有可能导致OpenCore无法正常读取配置文件
Xcode (用以修改文件、config.plist)
优盘
参考内容
xjn大佬: 使用OpenCore引导黑苹果
黑果小兵大佬:精解OpenCore
开搞
注意:强烈不建议在配置OpenCore的过程中使用OpenCore引导Windows,很有可能会引发一系列的问题
安装前的准备工作
在配置OpenCore之前,我已经使用了一段时间的clover引导。因此在一些地方我参考了clover的配置,一些准备工作我也使用了Clover完成
提取本机的DSDT
在Clover的启动界面中,按下F4键稍等片刻即可,期间可能会卡顿,不必惊慌,正常现象
提取完成后会在/EFI/ACPI/origin下
查看本机的分区情况(可选)
某些情况下OpenCore可能会找不到当前引导项,所有我们可能需要手动填写丢失引导的引导信息
在Clover中选择EFI Shell
,输入map
命令来记录各个分区的ID等信息
不要问,问就是座机
提取System UUID
前文提到,由于OpenCore不会对系统区别对待,很有可能会因为系统的uuid不正确而引发各种软件激活失效、登录状态丢失等等一系列问题,所以我们先提取一下系统的UUID
在Windows系统下,打开Powershell,依次输入一下命令
1 | wmic |
为优盘制作一个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
删除
Add
中的全部内容虽然不删除也没有问题,它们都没有启用,但是看着难受,那就干掉他删除
Block
中的全部内容,理由同上删除
Patch
中的全部内容,并添加Change EC0 to EC
的Patch(防止Catalina无法启动)1
2
3Comment: change EC0 to EC
Find: 4543305F
Replace: 45435F5F注意:其余项目保持默认即可,无需修改
注注意:OpenCore尽量少用这种更名,后面会更换为SSDT-EC
Quirks
中的选项全部关闭即可
Booter
保持默认即可,无需修改。觉得碍眼可以将MmioWhitelist
中的内容删掉
DeviceProperties
将ADD
和Block
中的内容删除ADD
的内容与Clover中的Devices/Properties
中的内容是一致的,用于注入声卡和显卡的信息。用Xcode的话你甚至可以直接复制
Kernel
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就可以帮你把剩下东西补齐Block
保持不变或删除Patch
:添加一项,防止数字音频崩溃1
2
3Comment:AppleALC Kernel Panic
Find: 636F6D2E 6170706C 65005F5F 6B65726E 656C5F5F 00
Replace: 6E6F742E 6170706C 65005F5F 6B65726E 656C5F5F 00开启
Disable RTC wake scheduling
防止睡眠唤醒其余项保持默认
Quirks
: 将AppleCpuPmCfgLock
和AppleXcpmCfgLock
选为Yes
Misc
BlessOverride
中添加一项\EFI\Microsoft\Boot\bootmgfw.efi
,类型为`StringBoot
:
ConsoleBehaviourOs: Text
ConsoleBehaviourUi: Text
ConsoleMode: Max
HibernateMode: Auto
HideSelf: No
PollAppleHotKeys: Yes
Resolution: 1920x1080
ShowPicker: Yes
UsePicker: Yes
Timeout: 5
Debug
保持默认Entries
保持默认Security
:
ScanPolicy: 0
RequireSignature: No
RequireVault: No
AllowNvramReset: Yes
AllowSetDefault: Yes其余保持默认
Tools
保持默认
NVRAM
ADD
:
7C436110-AB2A-4BBB-A880-FE41995C9F82
的Boot Args
添加-v -debug=0x100
LegacySchema
:
7C436110-AB2A-4BBB-A880-FE41995C9F82
中添加efi-boot-device
efi-boot-device-data
两项其他选项保持默认
PlatformInfo
可以使用OpenCore Configurator自动生成,机型为
MacBookPro14.1
Generic
的System UUID
中填写从Windows系统当中获取的UUID其他选项保持默认
UEFI
下载 AppleSupport,放在
/EFI/OC/Drivers
下在
Drivers
添加AppleUsbKbDxe.efi
注: HFSplus.efi 启动速度要比VBoxHFS.efi要快上一些,如需替换自行下载
Input
清空PointerSupportMode
,将KeySupport
设置为YESProtocols
中ConsoleControl
、AppleSmcIo
(启用OpenCore内的virtualsmc.efi)设置为Yes,其余为NOQuirks
中IgnoreInvalidFlexRatio
IgnoreTextInGraphics
ProvideConsoleGop
RequestBootVarFallback
RequestBootVarRouting
SanitiseClearScreen
设置为Yes,其余为No
确认无误后,就可以重启了,现在系统应可以重启了,如果正常的话,系统就可以正常启动。下面就可以进行其他方面的调整
亮度以及亮度快捷键
两种方式选择一个即可
ACPI方式修复亮度
下载宪武大大的OC部件包,放到桌面备用
在所有提取的ACPI文件中搜索
_BCL
、_BCM
、_BQC
,锐7000的位置在SSDT-0-SaSsdt.aml
中由搜索结果可知,
_BCL
、_BCM
、_BQC
的所属设备名称为DD1F
,所以SSDT-PNLF-ACPI
中我们无需修改,保存为aml复制到EFI/OC/ACPI/
中,并在config.plist中的ACPI/ADD中
添加即可。
如果不是设备名称不是DD1F
,需要将补丁文件中的DD1F
修改为设备名称下载ACPIBacklight.kext,放入
EFI/OC/Kexts
中,并在config.plist中添加信息修改config.plist中的
NVRAM/ADD
项
在7C436110-AB2A-4BBB-A880-FE41995C9F82
的Boot Args
添加applbkl=0
禁用Whatevergreen的亮度驱动
定制亮度补丁修复
不知道什么原因,直接将SSDT-PNLF补丁放入会导致Win10蓝屏,所以我一开始使用了ACPI的方式修复亮度,后来发现是如果将补丁插入_SB
就会蓝屏,将插入位置修改为_SB_.PCI0.GFX0
就可以,两种方式都记录一下下好了
打开部件包中的SSDT-PNLF-SKL_KBL.dsl
,Device(PNLF)
的上方添加 External (_SB_.PCI0.GFX0, DeviceObj)
将_SB
修改为_SB_.PCI0.GFX0
,保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD中
添加即可。
亮度快捷键
打开提取的DSDT,搜索
0x86
、0x87
,可以看到按键建码为_Q1C
和_Q1D
,设备名称为Scope (_SB.PCI0.LPCB.EC0)
在condig.plist中的
ACPI/patch
中添加以下内容1
2
3
4
5
6
7Comment: change _Q1C to XQ1C
Find: 5f513143
Replace: 58513143
Comment: change _Q1D to XQ1D
Find: 5f513144
Replace: 58513144打开
SSDT-BKeyQ14Q15-TP-LPCB.dsl
,将_Q14
、_Q15
、XQ14
、XQ15
,修改为_Q1C
、_Q1D
、XQ1C
、XQ1D
,保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD
中添加即可。不要使用PS2K的方法,使用PS2K会在按下调节键的时候发生Kernel Panic重启
亮度保存
将OpenCore解压夹中的 /Docs/AcpiSamples/SSDT-ALS0.dsl
保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD中
添加即可。
系统睡眠
修复睡眠后就被唤醒
打开提取的DSDT,搜索
_PRW
,可以看到以下内容1
2
3
4Method (_PRW, 0, NotSerialized) // _PRW: Power Resources for Wake
{
Return (GPRW (0x6D, 0x04))
}因此使用SSDT-GPRW补丁
在condig.plist中的
ACPI/patch
中添加以下内容1
2
3Comment: change GPRW to XPRW
Find: 47505257 02
Replace: 58505257 02打开
SSDT-GPRW.dsl
,保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD中
添加即可。
修复唤醒后一些问题
打开提取的DSDT,搜索
_PTS
和_WAK
可以看到以下字样1
2
3Method (_PTS, 1, NotSerialized) // _PTS: Prepare To Sleep
Method (_WAK, 1, Serialized) // _WAK: Wake因此使用
_PTS to ZPTS(1,N)
和_WAK to ZWAK(1,S)
在condig.plist中的
ACPI/patch
中添加以下内容1
2
3
4
5
6
7Comment: _PTS to ZPTS(1,N)
Find: 5f505453 01
Replace: 5a505453 01
Comment: _WAK to ZWAK(1,S)
Find: 5f57414b 09
Replace: 5a57414b 09打开
SSDT-PTSWAK.dsl
,保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD中
添加即可。
修复RTC导致的唤醒
经过上述操作之后,电脑就可以正常睡眠了。然而,电脑在睡眠过程中会出现莫名其妙的唤醒问题。
在终端中,执行log show --last 1d |grep -i "Wake reason"
,可以看到到电脑的唤醒原因都是RTC (Alarm)
,查阅了资料,发现可以只需要禁用RTC的唤醒功能就可以了
注意:这样修复之后,系统中电源小憩的功能就会失灵
在config.plist中的Kernel/patch
中开启开启Disable RTC wake scheduling
即可
换完之后,在终端中执行sudo pmset schedule cancelall
,这样就可以去掉电源信息中的计划任务了
这样,睡眠就会正常了
系统变频
加载原生的电源管理
打开提取的DSDT,搜索
Processor
可以看到以下字样1
2
3
4
5
6
7
8
9
10
11Scope (_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
补丁打开
SSDT-PLUG-_PR.CPU0.dsl
,保存为aml后放到EFI/OC/ACPI/
,并在config.plist中的ACPI/ADD中
添加即可。
CPU 变频
打开终端,执行以下命令
1
2
3
4
5
cd Desktop
git clone https://github.com/corpnewt/CPUFriendFriend.git
cd CPUFriendFriend
./CPUFriendFriend.command首先设置最低频率,,然后设置EPP值,越小性能越强
第一段: 最低频率80
,EPP0x80
第二段: 最低频率80
,EPP0x70
将生成的
CPUFriendDataProvider.kext
,放入EFI/OC/Kexts
中,并在config.plist中添加信息下载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才能识别apfs分区
后记
差不多这样应该就可以运行了。享受更加接近白果的体验吧
往期传送门 :
联想小新锐7000の黑苹果折腾记(一)
联想小新锐7000の黑苹果折腾记(二)