LinuxCommandLibrary

iasl

Compile ACPI Source Language

SYNOPSIS

iasl [options] [file...]

PARAMETERS

-d
    Disassemble an ACPI AML file into ASL code. This is the default action for AML input files.

-tc
    Compile an ASL file into AML bytecode. This is the default action for ASL input files.

-dc
    Disassemble and then recompile. Useful for validating an existing AML file by round-tripping through ASL.

-p
    Specify a common filename prefix for all generated output files.

-o
    Specify the name for the primary output file (e.g., compiled AML or disassembled ASL).

-i
    Include a specific ASL file during compilation; used for modular ASL development.

-sa
    Indicate that input files are raw ACPI tables (AML) to be sourced for compilation or disassembly.

-da
    Dump ACPI tables from system memory or a specified file into a disassemblable format.

-s
    Display statistics about the compiled or disassembled ACPI tables.

-vo
    Display verbose warnings during compilation or disassembly.

-ve
    Display verbose errors during compilation or disassembly.

-vr
    Display verbose remarks during compilation or disassembly.

-va
    Display all verbose output (warnings, errors, and remarks).

-w
    Set the warning level: 0 (suppress all warnings), 1 (warnings), 2 (remarks).

-e
    Ignore compile-time errors and attempt to complete the compilation.

-l
    List all supported command options and their brief descriptions.

-v
    Display the iasl compiler version information.

-?
    Display the help message and exit.

DESCRIPTION

The iasl command, part of the Intel ACPI Component Architecture (ACA) tools, serves as a crucial utility for developers and enthusiasts working with ACPI (Advanced Configuration and Power Interface) firmware. It acts as both a compiler, translating human-readable ACPI Source Language (ASL) code into compact ACPI Machine Language (AML) bytecode, and a disassembler, converting AML bytecode back into ASL. This bidirectional capability is indispensable for debugging, modifying, or customising ACPI tables—such as the Differentiated System Description Table (DSDT) or Secondary System Description Tables (SSDT)—which govern power management, device configuration, and other low-level hardware interactions on a system. It's often used to fix ACPI-related issues in Linux, like problems with suspend/resume, fan control, or specific hardware recognition, by allowing users to extract, patch, and recompile their system's ACPI tables.

CAVEATS

Modifying ACPI tables can be complex and risky; incorrect changes can lead to system instability, boot failures, or hardware malfunctions. Recompiling ACPI tables often requires specific patches or a deep understanding of the system's ACPI implementation. The generated AML must typically be loaded dynamically by the kernel or integrated into a custom BIOS, which is an advanced procedure. Disassembly of AML to ASL is not always perfectly reversible, especially for highly optimised or legacy AML.

ACPI DSDT/SSDT

The DSDT (Differentiated System Description Table) and SSDT (Secondary System Description Tables) are core ACPI tables that describe the system's hardware configuration to the operating system. iasl is primarily used to extract, modify, and recompile these tables to fix ACPI bugs or enable specific hardware features on platforms where the vendor-provided firmware is incomplete or buggy.

TYPICAL WORKFLOW FOR PATCHING DSDT

A common workflow involves using acpidump to extract the DSDT, then iasl -d to disassemble it into ASL. The ASL source is then manually edited to apply necessary patches (e.g., from a kernel patch or a community fix). Finally, iasl -tc recompiles the modified ASL back into AML, which can then be loaded by the kernel (e.g., via initramfs or kernel command line parameters).

HISTORY

The iasl utility is a key component of the ACPI Component Architecture (ACA) distribution, developed and maintained by Intel. Its development began with the advent of the ACPI specification itself, evolving alongside the standard to support new features and address complexities in firmware implementation. It serves as Intel's reference ACPI compiler/disassembler, making it the de facto standard tool for ACPI table manipulation on Linux and other platforms. Its continuous development reflects the ongoing importance of ACPI for modern operating systems' interaction with hardware, particularly concerning power management, device discovery, and thermal control.

SEE ALSO

acpidump(8), acpi(1), dmidecode(8), cpupower(1)

Copied to clipboard