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 utilities 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/power/acpi/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/power/acpi/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"
