[指南] 怎么给DSDT打补丁来显示电池状态
最后更新于:2022-04-02 05:46:14
[TOC]
# 如何给 DSDT 打补丁显示电池状态
英文原文:[[Guide] How to patch DSDT for working battery status](https://www.tonymacx86.com/threads/guide-how-to-patch-dsdt-for-working-battery-status.116102/)
# 背景
由于PC中的电池硬件与 Apple SMbus 硬件不兼容,因此在笔记本电脑上运行OS X 时,我们使用 ACPI 访问电池状态。 通常,我建议您使用ACPIBatteryManager.kext,可在此处找到:https://github.com/RehabMan/OS-X-ACPI-Battery-Driver
AppleACPIPlatform 的更高版本无法正确访问EC(嵌入式控制器)中的字段。 由于各种ACPI电池故障方法(`_BIF`,`_STA`,`_BST`等),这会导致ACPIBatteryManager 出现问题。 尽管可以使用较旧版本的AppleACPIPlatform(来自Snow Leopard),但还是希望使用最新版本的AppleACPIPlatform,因为对于具有Ivy Bridge CPU的计算机,它可以为这些计算机启用本机电源管理。 要使用最新版本,必须更改 DSDT 以符合 Apple的AppleACPIPlatform 的限制。
特别是,EC 中大于8位的任何字段都必须更改为一次访问8位。 这包括16、32、64和更大的字段。
您应该熟悉DSDT / SSDT修补程序的基本知识:http://www.tonymacx86.com/yosemite-laptop-support/152573-guide-patching-laptop-dsdt-ssdts.html
# 现有补丁
首先,可能是笔记本电脑已经有可用的补丁程序。 在以下位置查看我的补丁程序:https://github.com/RehabMan/Laptop-DSDT-Patch
为了将您的 DSDT与补丁匹配,通常需要首先了解补丁是如何生成的,这样您就知道在 DSDT 中寻找什么,并能够将您看到的与已经可用的补丁匹配。补丁集与补丁的更改比例很高,不会产生错误,并且似乎对所有需要修补的字段都进行了修补。
此处提供更多信息:https://www.tonymacx86.com/threads/guide-how-to-patch-dsdt-for-working-battery-status.116102/page-333#post-1360697
**注意**:不要使用DSDT编辑器或MaciASL以外的任何程序。我只用 MaciASL 测试。
# 其他相关的DSDT补丁
除了多字节EC字段外,还有一些其他的 DSDT 问题会影响电池状态。这些特殊的问题并不特定于电池状态,但它们通常是在尝试实现电池状态时第一次被注意到。电池代码可能依赖于有一个可识别的Windows版本作为主机操作系统。要进行修复,请从 laptop DSDT 补丁库应用 “OS Check fix”。这将导致 DSDT 采取与运行 “Windows 2006” 时相同的操作,您可以更改补丁以影响不同的选择(例如。“Windows
另一个常见的问题是,OS X 的 ACPI 实现很难使用非零 SyncLevel 声明的 Mutex 对象(有关更多信息,请阅读ACPI规范)。要进行修复,请应用笔记本 DSDT 补丁库中的 “Fix Mutex with non-zero SyncLevel”。
# 所需技能
DSDT是一个“程序”。 因此,在进行修改时具有一些编程/计算机技能会很有帮助。 同样,DSDT 补丁本身也具有自己的语言(在 MaciASL Wiki 中进行了简要说明,可在此处找到:http://sourceforge.net/projects/maciasl/ )。 最后,补丁本身基本上是正则表达式搜索/替换的作用域,因此有助于理解正则表达式(regex)。 熟悉编译器,编译器错误以及确定编译器告诉您有关代码错误的内容的功能也很有用。
另外,熟悉 ACPI 是一个好主意。 您可以在此处下载规范:https://www.acpica.org/
本指南的目的不是教您基本的编程技巧,正则表达式或 ACPI 语言。
# 修补过程
我使用了一种相当 “机械” 的过程来修补 DSDT 的电池状态。 我只是寻找OS X觉得讨厌的部分并机械地转换它。我不太努力去确定代码的哪些部分将实际执行,我只是转换我看到的一切。
要继续学习,请从本文下载示例DSDT并继续学习。这个特殊的例子DSDT是 HP Envy 14 的。最终的,完整的补丁,可以从我的补丁库 HP Envy 14 中获得。
首先确定 DSDT 中可能需要更改的区域。将 DSDT加载到 MaciASL 中并搜索“EmbeddedControl”。在单个DSDT中可以有多个“EmbeddedControl”部分,每个部分都附加了字段声明。
因此,为了找到这个声明,我总是从寻找embeddedcontrol开始。在示例DSDT中,您将找到这个单独的EC区域
';