[文档] 从 Clover 到 OpenCore (2) —— 减少不必要的 DSDT 重命名

[复制链接]
查看474 | 回复0 | 2020.4.23 10:59 | 显示全部楼层 |阅读模式
减少不必要的 DSDT 重命名

acidanthera 团队认为,不恰当的 DSDT 重命名可能会对设备硬件造成伤害;而且,OpenCore 下的 DSDT 重命名会对包括 Windows 在内的所有操作系统生效。因此,迁移到 OpenCore 时很重要的一步是减少不必要的 DSDT 重命名:既降低伤害硬件的概率、又尽可能避免 Windows 等其它操作系统受到影响。

以下是一些不再需要的 DSDT 重命名,可以参考这个表进行精简、或使用 SSDT 代替:

EHC1 to EH01 和 EHC2 to EH02 :建议用 OpenCore 官方的 SSDT-EHCx_OFF ( https://github.com/acidanthera/O ... s/SSDT-EHCx_OFF.dsl )  关闭 EHC 控制器。六代(Skylake)及以上的机器已经没有 EHC 控制器了,可以直接删除。

SAT0 to SATA 和 SAT1 to SATA :实质上完全没用。

HECI to IMEI、HEC1 to IMEI、MEI to IMEI 和 IDER to MEID:WhateverGreen ( https://github.com/acidanthera/WhateverGreen )  能够处理这个问题。

GFX0 to IGPU、PEG0 to GFX0、PEGP to GFX0 和 SL01 to PEGP:WhateverGreen 能够处理这个问题。除非你没有使用 WhateverGreen,否则没必要保留这些重命名。

EC0 to EC、H_EC to EC、ECDV to EC 和 PGEC to EC :虽然 macOS 的 USB 电源管理需要名称为 EC 的控制器,但是你完全可以使用 OC-little ( https://github.com/daliansky/OC-little )  中的「仿冒 EC」补丁。随意重命名 EC 控制器可能会对硬件造成伤害。

HDAS to HDEF、CAVS to HDEF 和 AZAL to HDEF :AppleALC ( https://github.com/acidanthera/AppleALC )  能够处理这个问题。除非你在用 VoodooHDA 万能声卡驱动,否则没必要保留这些重命名。

STAS to Noop :建议由 OC-little 中的 SSDT-AWAC 相关补丁替代。


虽然新的时钟设备 AWAC 逐渐普及,但是 macOS 尚不支持 AWAC,因此在 macOS 下需要使用传统的 RTC。

在 DSDT 中有一个 STAS 变量使 AWAC 和 RTC 互锁、避免两个时钟设备同时启用。
由于部分机器无法在 BIOS 中禁用 AWAC 启用 RTC,传统的解决方法是将 STAS 重命名为 Noop,从而同时启用两个时钟设备,而在 macOS 下只有一个 RTC 能正常工作。
但是如果这一重命名在 Windows 下也生效,意味着在 Windows 下将会暴露两个时间设备,这无疑对系统有害。同时,这也严重违反 ACPI 规范。
因此,在 OpenCore 下应该通过 SSDT-AWAC 修改 STAS 变量的值,实现在 macOS 下禁用 AWAC、启用 RTC。

感谢 Bat.bat ( https://github.com/williambj1 )  大佬指出。


PXSX to ANS1 和 PXSX to ANS2 :建议用 NVMeFix.kext ( https://github.com/acidanthera/NVMeFix )  修复 NVMe SSD 的电源管理。

LPC0 to LPCB :如果你要添加 SMBUS 支持,OC-little 中分别有 SBUS 的 SSDT 注入补丁和 MCHC 设备补丁。


顺便提醒一下,使用 OC-little 的补丁的时候,需要注意设备的原始 DSDT 中的 LPC 总线名称,并且必要时要自己修改 SSDT 以使 LPC 总线名称匹配。


PC00 to PCIO、FPU to MATH、TMR to TIMR、GBE1 to ETH0 和 PIC to IPIC :这些重命名实质上也是完全没用的。

_OSI to XOSI 和 OSID to XSID :除非你的某些硬件设备只能在 Windows 下工作(比如 I2C 触摸板只能在 Windows 下使用,再比如 ThinkPad 对 FreeBSD 的特殊优化),否则完全没有必要使用 SSDT-XOSI 补丁来伪装操作系统。而且大部分情况下,直接定制 SSDT 也可以解除某些硬件的操作系统限制。

关于「定制 SSDT 以解除限制」,一种方法是通过「预置变量法」(详见 OC-little 的「总述」章节)禁用原始设备的函数如 _STA,另一种方法是通过延长 Find 和 Replace 的上下文实现对相关 _STA 的函数的精确重命名,然后通过 SSDT 添加新的 _STA 函数。

感谢 Bat.bat ( https://github.com/williambj1 )  大佬补充说明。

_DSM to XDSM :首先遍历一下你的 SSDT 补丁中没有依赖 _DSM 的,如果没有,这个重命名也应该删除,因为这个重命名涉及的范围实在太大了、太过于危险。

我的建议是,尽可能只添加和 Method 名称有关的重命名(如 GPRW to XPRW、_Q14 to XQ14),而且随后要通过 SSDT 确保在非 macOS 操作系统下要调用并返回原始函数,确保在非 macOS 操作系统下的原始 DSDT 行为不会被改变。如果万不得已要添加其它重命名(如通过重命名禁用某些设备),那么就要权衡这一重命名的后果。

如果你完成了精简 DSDT 重命名并保存了 config,接下来的操作还是一样的,备份原始 EFI、然后以 -v 重启,看看能不能正常开机。如果可以正常开机,登录以后打开终端执行以下命令、查看日志中是否包括 ACPI Error:

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


上述修改和 Clover 依然是兼容的,完成精简 DSDT 重命名后依然可以继续使用 Clover。


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



上一篇:OC引导配置工具 OpenCore Configurator v2.0.0.0
下一篇:从 Clover 到 OpenCore (3) —— 摆脱对 Clover ACPI Quirks 的依赖
LOADREAM
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则