找回密码
 注册账号
搜索
查看: 5004|回复: 0

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

[复制链接]

755

主题

158

回帖

5568

积分

超级版主

积分
5568

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 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/

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

Archiver|小黑屋|童话镇 |网站地图

GMT+8, 2025.2.22 16:25 , Processed in 0.028516 second(s), 4 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表