The AML Debugger

Copyright (C) 2016, Intel Corporation
Author: Lv Zheng <lv.zheng@intel.com>


This document describes the usage of the AML debugger embedded in the Linux
kernel.

1. Build the debugger

   The following kernel configuration items are required to enable the AML
   debugger interface from the Linux kernel:

   CONFIG_ACPI_DEBUGGER=y
   CONFIG_ACPI_DEBUGGER_USER=m

   The userspace utlities can be built from the kernel source tree using
   the following commands:

   $ cd tools
   $ make acpi

   The resultant userspace tool binary is then located at:

     tools/acpi/power/acpi/acpidbg/acpidbg

   It can be installed to system directories by running "make install" (as a
   sufficiently privileged user).

2. Start the userspace debugger interface

   After booting the kernel with the debugger built-in, the debugger can be
   started by using the following commands:

   # mount -t debugfs none /sys/kernel/debug
   # modprobe acpi_dbg
   # tools/acpi/power/acpi/acpidbg/acpidbg

   That spawns the interactive AML debugger environment where you can execute
   debugger commands.

   The commands are documented in the "ACPICA Overview and Programmer Reference"
   that can be downloaded from

   https://acpica.org/documentation

   The detailed debugger commands reference is located in Chapter 12 "ACPICA
   Debugger Reference".  The "help" command can be used for a quick reference.

3. Stop the userspace debugger interface

   The interactive debugger interface can be closed by pressing Ctrl+C or using
   the "quit" or "exit" commands.  When finished, unload the module with:

   # rmmod acpi_dbg

   The module unloading may fail if there is an acpidbg instance running.

4. Run the debugger in a script

   It may be useful to run the AML debugger in a test script. "acpidbg" supports
   this in a special "batch" mode.  For example, the following command outputs
   the entire ACPI namespace:

   # acpidbg -b "namespace"
