[文档] 从 Clover 到 OpenCore (3) —— 摆脱对 Clover ACPI Quirks 的依赖

[复制链接]
查看287 | 回复0 | 2020.4.23 20:53 | 显示全部楼层 |阅读模式
摆脱对 Clover ACPI Quirks 的依赖

Clover 的 ACPI Quirks 的确是非常方便。一个开关,关机变重启就修复了;三个开关,声卡 HPET、IRQ、TIMR 就修复了;等等等等。但是在 OpenCore 是没有内置这些 ACPI 修复的,所以在 Clover 下的 ACPI Quirk 现在都必须用 SSDT 实现。所幸的是,我们依然可以从 OC-little ( https://github.com/daliansky/OC-little )  里找到绝大部分我们需要的补丁。

FixIPIC:使用 OC-little 的「声卡 IRQ 补丁」章节中的 SSDT-IPIC
FixSBUS:参考 OC-little 的「注入设备」章节中的「SBUS_SMBU 补丁」
FixShutdown:参考 OC-little 的「PTSWAK 综合补丁章节」,需要添加其中的 EXT1 插件补丁(该补丁由我贡献)
FixDisplay:使用 WhateverGreen ( https://github.com/acidanthera/WhateverGreen )  和在缓冲帧补丁中定制显示接口解决
AddMCHC:使用 OC-little 的「添加缺失的设备」章节中的 SSDT-MCHC
FixHDA:该修复已包含在 AppleALC ( https://github.com/acidanthera/AppleALC )  中,使用 AppleALC 即可。
FixHPET、FixRTC 和 FixTIMR:使用 OC-little 的「声卡 IRQ 补丁」章节中的 SSDT-HPET_RTC_TIMR-fix

注意根据原始 DSDT 查看 _STA 内变量是 HPAE 还是 HPTE,并自行修改 SSDT。


FixSATA:这个先不管它,OpenCore 中有对应的 ExternalDiskIcons 的 Quirk,也可以使用 innie.kext 解决
AddPNLF:参考 OC-little 的「注入设备」章节中的「PNLF 注入方法」
AddIMEI:使用 WhateverGreen 即可
FixIntelGfx:使用 WhateverGreen 即可
AddHDMI:使用 WhateverGreen 即可

FixADP1:有两种修复方法
直接 DSDT 重命名 AC0_ to ADP1,根据原始 DSDT 中对 AC0_ 设备的定义,可能还需要用 SSDT 为 ADP1 设备注入 Name (_PRW, Package (0x02) {0x1C,0x03})。
使用 SSDT 的方法,禁用原始 AC0_ 设备,并新增 ADP1 设备。根据原始 DSDT,可能还要为新增的 ADP1 设备添加 Name (_PRW, Package (0x02) {0x1C,0x03})


  1. DefinitionBlock ("", "SSDT", 2, "SUKA", "FixADP1", 0x00001000)
  2. {
  3.     External (_SB_.ADP1, DeviceObj)
  4.     External (_SB_.AC0_, DeviceObj)

  5.     If (_OSI ("Darwin"))
  6.     {
  7.         Scope (\_SB)
  8.         {
  9.             Scope (AC0_)
  10.             {
  11.                 Method (_STA, 0, NotSerialized)
  12.                 {
  13.                     Return (Zero)
  14.                 }
  15.             }

  16.             Device (ADP1)
  17.             {
  18.                 Name (_ADR, Zero)
  19.                 Name (_PRW, Package (0x02) {
  20.                     0x1C,
  21.                     0x03
  22.                 })
  23.                 Method (_STA, 0, NotSerialized)
  24.                 {
  25.                     Return (0x0F)
  26.                 }
  27.             }
  28.         }
  29.     }
  30. }
复制代码

除了这些开关以外,Clover 还有一些其它的 ACPI 设定,也有与之对应的替代。

DisableASPM:没有很好的代替方法,可以在设备属性(Device Properties)中分别添加相关设备的 PCI 总线位置、并注入属性 pci-aspm-default | DATA | <00>。
PluginType:参考 OC-little 的「注入 X86」章节添加 SSDT-PLUG 补丁。
Generate P States 和 Generate C States:这些是六代以前 CPU 才需要的设置,可以用 ssdtPRGen.sh ( https://github.com/Piker-Alpha/ssdtPRGen.sh )  生成对应的 SSDT。
降压和超频功能:Clover 的实现相当简陋,即使 Clover 官方也不建议使用;降压推荐使用 VoltageShift ( https://github.com/sicreative/VoltageShift ) 。

完成上述配置项的精简后,还是以 -v 重启,正常开机后在终端查看日志中是否包括 ACPI Error:

  1. $ log show --last boot | grep -Ei "ACPI"
复制代码




转载自:https://blog.skk.moe/post/from-clover-to-opencore/


上一篇:从 Clover 到 OpenCore (2) —— 减少不必要的 DSDT 重命名
下一篇:从 Clover 到 OpenCore (4) — 更新设备属性 开始迁移到 OpenCore 上
LOADREAM
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则