Feedback

Your feedback is important to keep improving our website and offer you a more reliable experience.

Linux*-ACPI

This project enables Linux to take advantage of platforms supporting Advanced Configuration & Power Interface -- virtually all high-volume i386, x86_64, and ia64 systems since 1999. ACPI, known as a Hardware Abstraction Layer (HAL) in embedded computing, is an abstraction layer between the operating system, platform firmware and hardware. This allows the OS and the platform to evolve independently. The core of the Linux ACPI implementation comes from ACPICA (ACPI Component Architecture). ACPICA includes an ACPI Machine Language (AML) interpreter that is resident in the Linux kernel. Several other operating systems use the same ACPICA core interpreter, including BSD and OpenSolaris. ACPICA also comes with a simulator, test suites, and a compiler, to translate ACPI Source Language (ASL) into AML.

ACPI: Looking for DSDT .. not found!" is printed on console

This message can be ignored.

It is not present in the upstream kernel, but several distributors shipped an out-of-tree "DSDT in initrd" patch which would print this message in the normal case that no DSDT override were present.

See more information on DSDT overrides, go here.

Why override a DSDT?

The DSDT (Differentiated System Description Table) is the primary AML table in the BIOS. Per the description of acpidump, the DSDT can be extracted from the machine, the ASL modified, and a new AML DSDT can be compiled. The sections below show two ways to tell Linux to use this modified DSDT instead of the version that came with the BIOS.

Note that overriding the DSDT is a debugging technique only. It is not a viable way to run a production system, as no vendor would support a system when the customer has modified the system firmware, and no Linux Distributor could possibly support modified system firmware either.

In the early days of Linux ACPI, DSDT modifications were common to work around both BIOS bugs and Linux bugs. However, the stated goal of the Linux ACPI project today is that Linux should run on unmodified firmware. Thus, the DSDT database at the old http://acpi.sourceforge.net web site is now largely a historical artifact.

Where do I get iasl for disassembling and compiling tables?

iASL is part of the ACPICA release, http://www.acpica.org/downloads

Note that "iasl -d" can now not only disassemble a DSDT and SSDT, but also most other ACPI table images.

What if I also want to override the SSDTs?

If you need to modify the code present in an SSDT, then combine all of the SSDTs into a DSDT override, modify it as necessary, and boot with "acpi_no_auto_ssdt", to prevent Linux from automatically loading the SSDTs listed in the RSDT/XSDT.

Is it important if my DSDT doesn't re-compile?

Not necessarily. Many static ASL bugs that are rejected by iASL have workarounds present in the Linux kernel. This is because, even if you might be able to modify and override your DSDT, most users with a system like yours cannot. Of course, you need to get the DSDT to re-compile, if you want to run your modifications.

How do I print to the Linux console from AML?

When CONFIG_ACPI_DEBUG=y and when acpi.debug_level & 0x8, ASL stores to the special object "Debug" will come out in the dmesg. eg

Store("hello world!", Debug)
Store(Local0, Debug)

[ACPI Debug] String: [0x0C] "hello world!"
[ACPI Debug] Integer: 0x00000042

How do I build a custom DSDT into the kernel?

  1. Get original DSDT:
    # cp /proc/acpi/dsdt DSDT
    or
    # acpidump > acpidump.out

    $ acpixtract DSDT acpidump > DSDT.dat
  2. Disassemble it:
    $ iasl -d DSDT.dat
  3. Make your changes:
    $ vi DSDT.dsl
    
      
  4. Build it:
    $ iasl -tc DSDT.dsl
  5. Put it where the kernel build can include it:
    $ cp DSDT.hex $SRC/include/
  6. Add this to the kernel .config:

    CONFIG_STANDALONE=n
    CONFIG_ACPI_CUSTOM_DSDT=y
    CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"
     
  7. Make the kernel and off you go!
    You should see in dmesg: Table [DSDT] replaced by host OS

How do I build a custom DSDT into an initrd?

Go to this topic in the Overriding a DSDT page.

Project: