Now all that is left to do is to reboot and to [[#Verify successful override|verify the result.]]
DSDT (Differentiated System Description Table) is a part of the ACPI specification. It supplies information about supported power events in a given system. ACPI tables are provided in firmware from the manufacturer. A common Linux problem is missing ACPI functionality, such as: fans not running, screens not turning off when the lid is closed, etc. This can stem from DSDTs made with Windows specifically in mind, which can be patched after installation. The goal of this article is to analyze and rebuild a faulty DSDT, so that the kernel can override the default one.
Basically a DSDT table is the code run on ACPI (Power Management) events.
It is possible that the hardware manufacturer has released an updated firmware which fixes ACPI related problems. Installing an updated firmware is often preferred over this method because it would avoid duplication of effort.
This process does tamper with some fairly fundamental code on your installation. You will want to be absolutely sure of the changes you make. You might also wish to clone your disk beforehand.
Even before attempting to fix your DSDT yourself, you can attempt a couple of different shortcuts:
To use only one OS interface, add . This tells the firmware that there is only one supported operating system, so this is often the recommended solution.
To remove an interface, use a an exclamation point in the beginning of the string.
Other strings to test:
Out of curiousity, you can follow the steps below to extract your DSDT and search the .dsl file. Just grep for "Windows" and see what pops up.
A DSDT file is originally written in ACPI Source language (an .asl/.dsl file). Using a compiler this can produce an 'ACPI Machine Language' file (.aml) or a hex table (.hex). To incorporate the file in your Arch install, you will need to get hold of a compiled .aml file -- whether this means compiling it yourself or trusting some stranger on the Internet is at your discretion. If you do download a file from the world wide web, it will most likely be a compressed .asl file. So you will need to unzip it and compile it. The upside to this is that you will not have to research specific code fixes yourself.
Arch users with the same laptop as you are: a minority of a minority of a minority. Try browsing other distributions/Linux forums for talk about the same model. It is likely they have the same problems and either because there is a lot of them, or because they are tech savvy -- someone there has produced a working DSDT and may even provide a precompiled version (again, use at your own risk). Search engines are your best tools. Try keeping it short: 'model name' + 'dsdt' will probably produce results.
What compiled the original code? Check if your system's DSDT was compiled using Intel or Microsoft compiler:
In case Microsoft's compiler had been used, abbreviation INTL would instead be MSFT. In the example, there were 5 errors on decompiling/recompiling the DSDT. Two of them were easy to fix after a bit of googling and delving into the ACPI specification. Three of them were due to different versions of compiler used and are, as later discovered, handled by the ACPICA at boot-time. The ACPICA component of the kernel can handle most of the trivial errors you get while compiling the DSDT. So do not fret yourself over compile errors if your system is working the way it should.
Examine any errors outputted from creating the hex AML table and fix them. For example:
Amend the file at line 6727 where the error occurred:
Increase the OEM version. Otherwise, the kernel will not apply the modified ACPI table. For example, before increasing the OEM version:
After increasing the OEM version:
Create the hex AML table again after fixing all errors and increasing the OEM version:
You might want to try the option for C include file to insert into kernel source. If no errors and no warnings are raised, you should be good to go.
This method has the advantage that you do not need to recompile your kernel, and updating the kernel will not make it necessary to repeat these steps.
You will want to be familiar with compiling your own kernel. The most straightforward way is with the "traditional" approach. After compiling DSDT, iasl produce two files: and .
Look for messages that confirm the override, for example: