What is DSDT/SSDT?
The Advanced Configuration and Power Interface (ACPI) defines a large number of tables that provide the interface between an ACPI-compliant operating system and system firmware. These allow description of system hardware in a platform-independent manner in ACPI Machine Language (AML). The DSDT (Differentiated System Description Table) is the main table in the ACPI part of a computer’s BIOS, defines most of main devices in system. The SSDT (Secondary System Description Table) has same structure with DSDT, but it’s usually smaller and defines some specific devices.
By default, bootloaders will get all OEM tables from BIOS/UEFI and transfer it to OSes.
Why do we have to patch DSDT/SSDT on hackintosh?
Unlike Windows or Linux, OS X has an incomplete ACPI implementation which supports only a subset of DSDT in Mac models only. On Hackintosh system, some devices are not defined compatible with OS X, and they can’t work correctly.
Patching the DSDT allows the user to better support their hardware.
Most bootloaders allow user to replace the OEM table in BIOS/UEFI by tables defined in .aml files.
Dumping original DSDT/SSDT from your system
Before patching your DSDT/SSDT you need to get them under the AML format ( ACPI Machine Language ). There are many ways to get them:
Run RW-Everything, go to Access > ACPI Tables, select DSDT tab, Save as Binary, choose All File (*.*) in “Save as type” section add .aml extension to the file.
Repeat with all remaining SSDT tables
Run these commands:
sudo apt-get update
sudo apt-get install acpidump
sudo acpidump > acpidump.out
sudo acpixtract -a acpidump.out
Linux will dump all available DSDT/SSDT tables to your Desktop. You just need to look for the DSDT and SSDTs, rename the extension from .dat to .aml (AML) and save it onto your USB.
OS X (Only Clover bootloader)
At Clover entry menu, hit F4, then boot into OS X, all available ACPI table will be dumped into /EFI/Clover/ACPI/origin/
Decompile original DSDT/SSDT
All DSDT and SSDT tables can’t be edited directly, we need to recompile it to a .dsl text format in order to edit. Since DSDT and SSDTs have a connection with each others, you need to have all of them to recompile
Download latest iasl ( Intel’s compiler and decoder ), unzip and copy the iasl file to Desktop,copy all DSDT/SSDTs in .aml extension to Desktop. Open Terminal and run these commands:
./iasl -da DSDT.aml SSDT*.aml
All DSDT/SSDTs will be decompiled in .dsl text format.
Note that if the above commands gives you error, it’s because of some SSDT tables have duplicate names. Check the log and delete the SSDT which gives the error.
Add edited DSDT/SSDTs to the bootloader
After editing and compiling it from .dsl to .aml, you can get the bootloader to use them by putting them in the right directory:
Note: If you have multiple SSDT that is needed to be loaded, rename them as: SSDT.aml, SSDT-1.aml, SSDT-2.aml, … and so on.
Bootloader will “drop” all original DSDT from the system to load the edited ones when booting up. For dropping SSDT, you need to select DropSSDT=True ( Chameleon ) or Drop OEM SSDT=True ( Clover )