[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區域
- 簡介
- 基本命令
- 高效操作
- 命令操作
- 常用軟件
- 問題設置
- 命令行神器
- 開發配置
- 開發環境配置
- brew
- git
- Karabiner-Elements
- iTerm2
- MacVim
- aria2
- LaunchBar
- zsh
- Tmux
- Charles
- Emacs(感覺不需要了)
- 常用工具
- Alfred
- mac 詞典增強
- Mac 高級操作
- mac 資源
- 黑蘋果
- 個人配置
- 黑蘋果資源
- 驅動集合
- 工具集合
- 黑蘋果指南
- [FAQ] 開始必讀!筆記本電腦常見問題
- [指南] hackintosh之SSDT/DSDT
- [指南] hackintosh之hotpatch
- [指南] 為Sierra(以及后來的版本)進行USB電源屬性注入
- [指南] 10.11+ USB的變化和解決方案
- [指南] 為USBInjectAll.kext創建一個自定義的SSDT
- [指南] Intel IGPU HDMI/DP audio (Sandy/Ivy/Haswell/Broadwell/Skylake)
- [指南] 怎么給DSDT打補丁來顯示電池狀態
- [指南]在雙GPU筆記本電腦中禁用獨立顯卡.md
- [指南]
- OpenCore
- 多系統引導
- hotpatch
- 黑蘋果裝機
- 刷BIOS大法
- dd