2020年6月21日 星期日

關於DSDT描述表

關於DSDT描述表

ACPI 是 Hewlett-Packard, Intel, Microsoft, Phoenix 和 Toshiba
共同制定的一個開放的行業規範。是 The Advanced Configuration and Power Interface
的縮寫,也就是「電源管理模式和配置管理的接口規範」。從名字可以看出主要是「電源管理」和「配置管理」。是 BIOS 的一個高級功能模塊。

它幫助操作系統合理控制和分配計算機硬件設備的電量,有
了ACPI,操作系統可以根據設備實際情況,根據需要把不同的硬件設備關閉。如Win7, Win8或者Win10系統,系統睡眠時,系統把當前信息儲存在內存中,只保留內存等幾個關鍵
部件硬件的通電,使計算機處在高度節電狀態。當然這只是它功能中的很少一部分。

它主要涵蓋的功能包括:

System power management(系統電源管理) Device power management(設備電源管理) Processor power management(處理器電源管理) Device and processor performance management(設備及處理器性能管理)Configuration / Plug and Play(配置/即插即用) System Events(系統事件) Battery management(電池管理) Thermal management(溫度管理) Embedded Controller(嵌入式控制器) SMBus Controller(SMBus控制器)
在計算機應用平台,ACPI越來越重要。ACPI由很多表組成,包括:RSDP,SDTH,RSDT,FADT,FACS,DSDT,SSDT,MADT,SBST,XSDT,ECDT,SLIT,
SRAT。其中DSDT就是它的一個重要的描述表。

DSDT 包含了所有和基本系統(basesystem)不同的設備的信息,basesystem 每台機器都是一樣的,這個是在 acpi spec 裡指定的,但是每台機器都是不相同的,所以不相同的設備大都是由 DSDT 表來描述。它包含了很多AML代碼。大多數 BIOS 是針對 windows 開發的,而
windows 自己也不完全遵循 acpi 規範,所以因為 BIOS 的 bug,這些代碼本身可能有錯,導致其他的系統,如 linux,mac os 出錯。

Mac OS X不完整支持ACPI規範,僅支持它的子集DSDT。

如何提取 bios 的 DSDT.AML
請參考https://yucharles54.blogspot.com/2017/02/os-x.html中的如何取得原始的DSDT.aml的說明
我偏愛5.的用法

如何反編繹DSDT.dsl
下面的 refs.txt 內容有一些常見的(但不太常見)缺少的符號(正如該貼中有些用戶所報告的),反編繹程序容易使它們混淆。 首先在您的 DSDT/SSDT文件所在的目錄中創建 refs.txt:
External(MDBG, MethodObj, 1)
External(_GPE.MMTB, MethodObj, 0)
External(_SB.PCI0.LPCB.H_EC.ECWT, MethodObj, 2)
External(_SB.PCI0.LPCB.H_EC.ECRD, MethodObj, 1)
External(_SB.PCI0.LPCB.H_EC.ECMD, MethodObj, 1)
External(_SB.PCI0.PEG0.PEGP.SGPO, MethodObj, 2)
External(_SB.PCI0.GFX0.DD02._BCM, MethodObj, 1)
External(_SB.PCI0.SAT0.SDSM,MethodObj, 4)
External(_GPE.VHOV, MethodObj, 3)
External(_SB.PCI0.XHC.RHUB.TPLD,MethodObj, 2)

注意:創建 refs.txt 的一個方便的方法是在終端中使用 pbpaste命令。複製上面的文本到剪貼板(我假設你知道如何做到這一點),然後: 代碼(文本):
pbpaste>refs.txt  利用了mac上的兩個命令行工具,pbcopy 可以把管道輸入複製到剪貼板,pbpaste 可以把剪貼板內容導出,這將在您當前的目錄中創建 refs.txt。




然後在反編繹過程中使用它: 代碼(文本):
iasl -da -dl -fe refs.txt DSDT.aml SSDT*.aml






iasl -dl -fe refs.txt DSDT.aml SSDT*.aml




較早版本的iasl反編繹程序會將這些外部聲明放在所有其他外部聲明之前。這也是一個糟糕的選擇。大多數情況下,您需要移動它們,以便它們遵循其他外部聲明而不是前面的聲明。這將是顯而易見的,因為你會從外部聲明,從 refs.txt 插入後面的錯誤。在目前支持ACPI 6.1的iasl中,這個bug已經修復了。