Secondary System Description Table (SSDT)
So what are DSDTs and SSDTs? Well, these are tables present in your firmware that outline hardware devices like USB controllers, CPU threads, embedded controllers, system clocks and such. A DSDT(Differentiated System Description Table) can be seen as the body holding most of the info with smaller bits of info being passed by the SSDT(Secondary System Description Table).
You can think of the DSDT as the building blueprints with SSDTs being sticky notes outlining extra details to the project
Differentiated System Description Table (DSDT)
DSDT 是 The Differentiated System Description Table 的简写。字面上就可以知道它是一个描述系统不同信息的表。它包含了所有除基本系统以外所有不同设备的信息,也就是每台计算机设备的基本系统是相同的,而不相同的设备用 DSDT 来描述。
DSDT 表代码为 ACPI Machine Language (AML)。
用户通过修改DSDT可以得到更好的硬件支持,最简单的理解就是DSDT是描述硬件的。
修改 DSDT 的主要目的就是让 mac系统识别存在这个硬件并告诉 mac 系统你的硬件位置,以便让 mac 系统内置的驱动来驱动硬件工作。
修改 DSDT 的基本过程:
- 提取 bios 的 AML 文件,反编译为 dsl text 文件,修改完毕后,编译到 Aml,然后替换 BIOS 中的 DSDT。
How to patch DSDT
For OpenCore: If you’re using OpenCore, copy your ACPI files to EFI/OC/ACPI. You’ll also need to add the ACPI files entries in ACPI>Add section of your config.plist
How to Create SSDTs
- Prebuilt SSDTs
- They’re universal but don’t teach much
- For most users, we recommend this as it does not require any compiling
- Automated tools
- Mainly seen with SSDTTime, work much better than prebuilts as there’s less bloat however doesn’t teach you much
- Manually creating them
- Will always work, be much cleaner and get to learn about the process
- However requires you to deal with code
Prebuilt SSDTs
- SSDT-EC-USBX-DESKTOP
- Used for disabling your real Embedded controller and creating a fake one for macOS to play with
- USBX portion is used for injection USB power properties missing on Skylake and newer
Automated tools - SSDTTime
Refer to https://dortania.github.io/Getting-Started-With-ACPI/ssdt-methods/ssdt-easy.html#adding-to-opencore
Manually creating them
Refer to https://dortania.github.io/Getting-Started-With-ACPI/ssdt-methods/ssdt-long.html
Getting a copy of your DSDT
-
On your Windows, Download acpidump.exe(opens new window)
-
In command prompt run
path/to/acpidump.exe -b -n DSDT -z
, this will dump your DSDT as a .dat file. Rename this to DSDT.aml
Compiling and decompiling ACPI Tables
Decompile ACPI Tables
- On macOS, download MaciASL and open the DSDT.aml that you get just now, which automatically decompiles it to a .dsl
Compile a .dsl to a .aml
-
grab iasl-stable (opens new window) and run the following:
path/to/iasl path/to/DSDT.aml