https://01.org/zh/linux-acpi
The goal of this project is to enable Linux to take advantage of platforms that support ACPI (Advanced Configuration & Power Interface). ACPI has been supported on virtually all high-volume i386, x86_64, and ia64 systems, since 1999.
ACPI is an abstraction layer between the OS and platform firmware and hardware. This abstraction allows the OS and the platform to evolve independently. Not only should a new OS be able to handle old hardware, but an old OS should be able to handle new hardware.
The latest ACPI specification is published on the ACPI home page: http://www.acpi.info.
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.
https://www.acpica.org/
The ACPI Component Architecture (ACPICA) project provides an operating system (OS)-independent reference implementation of the Advanced Configuration and Power Interface Specification (ACPI). It can be easily adapted to execute under any host OS. The ACPICA code is meant to be directly integrated into the host OS as a kernel-resident subsystem. Hosting the ACPICA subsystem requires no changes to the core ACPICA code. Instead, a small OS-specific interface layer is written specifically for each host OS in order to interface the ACPICA code to the native OS services.
The complexity of the ACPI specification leads to a lengthy and difficult implementation in operating system software. The primary purpose of the ACPI Component Architecture is to simplify ACPI implementations for operating system vendors (OSVs) by providing major portions of an ACPI implementation in OS-independent ACPI modules that can be easily integrated into any OS.
ABOUT ACPICA
Technical Overview
ACPICA defines and implements a group of software components that together create an implementation of the ACPI specification for both 32-bit and 64-bit platforms. A major goal of the architecture is to isolate all operating system dependencies to a relatively small translation or conversion layer (called the OS Services Layer) so that the bulk of the ACPICA code is independent of any individual OS. Therefore, hosting the ACPICA code on new operating systems requires no source code changes within the ACPICA code itself.
The major kernel-level components of the architecture include:
- AML Interpreter
- ACPI Table Manager
- ACPI Namespace Manager
- ACPI Resource Manager
- ACPI Fixed and General Purpose Event Support
- ACPI Hardware Support
- AML Disassembler (optional)
- AML Debugger (optional)
There are also several user-space tools and utilities that are built upon the above components (The ACPICA components run in both kernel mode and user mode):
- ACPI Source Code Compiler & Disassembler (iASL)
- ACPI Simulator/Executer (AcpiExec)
- ACPI System Table dump to ASCII utility
- ACPI Table Extractor (inverse of acpidump utility)
- ACPI Help Utility (AcpiHelp)
Generation Environments
ACPICA is written in ANSI C, and can be generated under many different 32-bit and 64-bit OS development environments. Source code packages are provided for the following environments: Microsoft Windows* and UNIX*.
- The Windows package includes Visual C++* project files and other ACPI utilities that run under Windows.
- The UNIX package has a format and licensing suitable for inclusion by commercial OS vendors.
There is no standalone Linux* source code package since ACPICA updates for Linux are provided periodically in patch form. The ACPICA subsystem is modified to integrate smoothly with the Linux kernel source. This includes conversion of the ACPICA source code to the Linux kernel coding standard and licensing under the GNU General Public License.