当前位置: 首页 > ds >正文

Linux ACPI - ACPI系统描述表架构(2)

  • ACPI系统描述表架构

1.概要

  ACPI defines a hardware register interface that an ACPI-compatible OS uses to control core power management features of a machine, as described in ACPI Hardware Specification ACPI also provides an abstract interface for controlling the power management and configuration of an ACPI system. Finally, ACPI defines an interface between an ACPI-compatible OS and the platform runtime firmware.

  To give hardware vendors flexibility in choosing their implementation, ACPI uses tables to describe system information, features, and methods for controlling those features. These tables list devices on the system board or devices that cannot be detected or power managed using some other hardware standard, plus their capabilities as described in ACPI Concepts They also list system capabilities such as the sleeping power states supported, a description of the power planes and clock sources available in the system, batteries, system indicator lights, and so on. This enables OSPM to control system devices without needing to know how the system controls are implemented.

  ACPI定义了一个硬件寄存器接口。ACPI兼容OS使用此接口来控制机器的核心电源管理特征。ACPI也提供了一个抽象接口,用来控制ACPI系统的电源管理及配置。此外,ACPI定义了ACPI兼容OS和系统BIOS之间的接口。

  由平台固件创建的RSDP(Root System Description Pointer)结构位于系统内存地址空间中。此结构包含了RSDT(Root System Description Table)或者XSDT(eXtended System Description Table)的地址,而RSDT或者XSDT指向了其他向OSPM提供数据的系统描述表。这些系统描述表一起将系统的基础实现和配置提供给OSPM,如图1所示。

在这里插入图片描述
  所有系统描述表都以相同的头部开始。系统描述表的主要目的是为OSPM定义各种业界标准的实现细节。这样,可以非常灵活地实现硬件需求、设计中涉及的各个部分,同时也将直接控制这些硬件所需的信息提供给OPSM。

  RSDT/XSDT指向内存中其他系统描述表。RSDT/XSDT指向的第一个系统描述表总是FADT(Fixed ACPI Description Table)。FADT中的数据包括各种固定长度的表项,用于描述硬件固定的ACPI特征。FADT总会指向DSDT(Differentiated System Description Table),而DSDT包含了有关系统特征的各种信息和描述。这些表之间的关系如图2所示。

在这里插入图片描述
  当OSPM定位了RSDP结构后,它在物理地址中查找RSDT或XSDT。RSDT以签名“RSDT”开始,而XSDT以签名“XSDT”开始。RSDT或XSDT包含了一个或多个指向其他系统描述表的物理指针,这些系统描述表提供了有关系统的各种信息。在RSDT/XSDT中总会有一个物理地址指向FADT。

  当OSPM跟随一个物理指针找到另一个系统描述表时,它检查每个系统描述表中已知的签名。基于此签名,OSPM随后可以解释系统描述表中实现的特定数据。

  FADT的目的是定义各种与设备配置和电源管理相关的静态信息。FADT以签名“FACP”开始。FADT描述了平台中ACPI硬件寄存器的实现及配置细节。此外,FADT也包含了指向DSDT数据结构的物理指针。DSDT按照定义块格式进行编码。

  • 定义块包含了有关平台硬件实现细节的信息,通过在ACPI名字空间中排列的数据对象的形式来表示。OSPM加载的所有定义块合并在一起形成一个表示此平台的名字空间。数据对象按照AML格式进行编码。AML解释器会评估编码在AML中的数据对象。数据对象可以是静态或动态的值。AML解释器的动态数据对象评估能力包含对编程表达式、计算和逻辑操作的支持。编程表达式中可以对地址空间进行访问(例如访问I/O或者内存)。通过对动态数据对象进行评估来确定结果。动态名字空间对象被称为“控制方法”。OSPM将整个定义块作为一个逻辑单元进行加载或者卸载——向名字空间中添加相关的对象或者从名字空间中移走相关的对象。**在启动时,OSPM总会加载DSDT并且不会卸载此表。**它包含一个称为差异定义块的定义块。此定义块中包含了实现及配置信息。OSPM可以使用这些信息来执行ACPI硬件寄存器所描述信息之外的电源管理、散热管理或即插即用功能。
  • 定义块可以定义新的系统属性,或者在某些情况下修建在之前的定义上。可以从系统内存地址空间中加载定义块。定义块的一种应用是描述和分发平台版本的改变。
  • 通过定义块,可以将硬件平台实现的改变描述给ACPI兼容OS并且将此改变限制在合理的范围内。定义块使用一些明确定义的对象名就可表示一个简单的平台实现。理论上,在一个定义块中也可以定义一个像PCI配置空间那样的访问方法,但那不是定义块规范的目标。这样的一个空间通常被定义为内建的操作符。

2.ACPI系统描述表

  The Root System Description Pointer (RSDP) structure is located in the system’s memory address space and is setup by the platform firmware. This structure contains the address of the Extended System Description Table (XSDT), which references other description tables that provide data to OSPM, supplying it with knowledge of the base system’s implementation and configuration (see Root System Description Pointer and Table ).
在这里插入图片描述

  • RSDP(Root System Description Pointer)
  • RSDT(Root System Description Table)
  • XSDT(Extended System Description Table)
  • FADT(Fixed ACPI Description Table)
  • FACS(Firmware ACPI Control Structure)
  • DSDT(Differentiated System Description Table)
  • SSDT(Secondary System Description Table)
  • MADT(Multiple APIC Description Table)
  • SBST(Smart Battery Table)
  • ECDT(Embedded Controller Boot Resource Table)
  • SRAT(System Resource Affinity Table)
  • SLIT(System Locality Distance Information Table)

2.1.DSDT 描述

  DSDT (Differentiated System Description Table) is a part of the ACPI specification. It supplies information about supported power events in a given system. ACPI tables are provided in firmware from the manufacturer. A common Linux problem is missing ACPI functionality, such as: fans not running, screens not turning off when the lid is closed, etc. This can stem from DSDTs made with Windows specifically in mind, which can be patched after installation. The goal of this article is to analyze and rebuild a faulty DSDT, so that the kernel can override the default one.

  DSDT(差异化系统描述表)是一个重要的表格,它定义了操作系统在启动过程中如何与硬件交互。DSDT 通常包含系统硬件资源的详细描述、设备节点、方法、事件以及电源管理相关的信息。编译完成后的 DSDT 被加载到系统内存中,并由操作系统的 ACPI 驱动进行解析。

  DSDT 是 ACPI 表格之一,ACPI 表格通常存储在系统的内存中,具体存放位置通常在以下地址:

  • 0x000E0000 到 0x000FFFFF:这是传统的内存区域,许多 BIOS 或 UEFI 固件将 ACPI 表格加载到该区域,尤其是 DSDT 和其他 ACPI 表格(如 SSDT, FADT, SRAT 等)。
  • 系统固件(BIOS 或 UEFI):ACPI 表格通常会嵌入到系统的固件中,并且在启动时被加载到内存中。
    具体来说,DSDT 表格在系统启动时由固件(如 BIOS 或 UEFI)读取并加载到内存中,然后操作系统会在其启动过程中访问这些表格。

2.1.1.OS 如何解析 DSDT 表格

  OS在启动时会通过一系列的步骤来解析 DSDT 表格。这个过程包括以下几个主要步骤:

  • 加载 ACPI 表格
    操作系统通常会在系统启动时查找 ACPI 表格。在 UEFI 系统中,操作系统会通过 UEFI 固件接口来查找并加载 ACPI 表格。常见的 ACPI 表格位置包括:

    • SDT (System Description Table) 中定义的表格地址。
    • RSDP (Root System Description Pointer),它位于物理内存的一个固定位置。RSDP 是一个指向 ACPI 表格的指针,操作系统通过该指针找到其他 ACPI 表格的位置,包括 DSDT。
  • 定位 DSDT 表格
    通过 RSDP,操作系统会查找包含 DSDT 的 RSDT 或 XSDT 表格。RSDT 和 XSDT 都包含指向所有 ACPI 表格的指针,包括 DSDT。

    • RSDT(Root System Description Table)是 ACPI 1.0 中使用的表格,存储着指向所有 ACPI 表格的 32 位指针。
    • XSDT(Extended System Description Table)是 ACPI 2.0 和更高版本中的表格,存储着指向所有 ACPI 表格的 64 位指针。
      在 RSDT 或 XSDT 中找到 DSDT 后,操作系统就可以加载并解析它。
  • 解析 DSDT 表格
    一旦操作系统加载了 DSDT,它会解析其中的内容。具体来说,操作系统会读取 ACPI 表中的硬件信息、设备节点、资源描述符、电源管理信息等。以下是操作系统如何使用 DSDT 中的信息:

    • 设备节点和资源管理:DSDT 中定义了硬件资源(如内存、I/O 端口、IRQ 等)以及如何与硬件设备进行交互。操作系统会根据这些描述来初始化和配置硬件设备。
    • 电源管理:DSDT 包含电源管理方法和状态(如 _S0、_S4、_S5 等),操作系统使用这些信息来控制系统的电源状态。例如,当操作系统需要进入睡眠模式时,会根据 DSDT 中定义的电源管理方法执行相关操作。
    • ACPI 方法的执行:DSDT 中可能包含方法(如 _STA,_INI,_PS0,_PS3 等),这些方法用于控制硬件的状态和行为。操作系统会根据需要调用这些方法。例如,当操作系统需要启动一个设备时,它会执行 _INI 方法。
  • 执行 ACPI 方法
    DSDT 中定义的设备方法通常是以 ACPI 机器语言(AML)形式编写的。操作系统的 ACPI 驱动程序会执行这些方法。它们会在不同的硬件事件和状态转换时被触发。例如:

    • 电源管理:通过调用 DSDT 中定义的 _S0、_S4、_S5 等方法,操作系统可以控制系统的电源状态。
    • 设备状态管理:例如,设备的初始化、启动、停止等操作,可以通过调用设备方法来完成。
  • 设备管理和调度
    操作系统利用 DSDT 中描述的硬件资源和设备信息来管理和调度硬件设备。通过 DSDT 操作系统能够获得设备的地址、资源需求和电源管理要求,进而执行以下操作:

    • 配置设备(例如,PCI 设备的配置、内存映射、I/O 地址等)。
    • 管理设备的生命周期(如启动、暂停、关闭等)。
    • 处理硬件中断和事件。
  • ACPI 电源管理
    操作系统会根据 DSDT 中定义的电源状态,控制系统的电源模式。例如,当用户请求系统进入睡眠状态时,操作系统会通过调用 DSDT 中的 _S4 方法,进入休眠状态;当从休眠状态恢复时,操作系统会通过 _S0 方法恢复到正常工作状态。

2.1.2.ACPI Definition Blocks

  为了让OSPM能够控制计算机上的设备的资源和热插拔,ACPI提供了一种描述这些设备的信息和控制方式的结构,称为ACPI Definition Blocks,它们按照一种层级结构组织,这种组织方式成为ACPI Namespace。这个命令空间的开始是ROOT,符号“/”,下面又分配了几个预定义的命令空间:
在这里插入图片描述
在这里插入图片描述

  ACPI Definition Blocks包含在DSDT(Differentiated System Description Table)和很多的二级表(SSDT,Secondary System Description Tables)之中。

refer to

  • https://blog.csdn.net/jxdzlgl2018/article/details/144954888
  • https://blog.csdn.net/qq_44189622/article/details/142205896
  • https://blog.csdn.net/jiangwei0512/article/details/51614383
  • https://wiki.archlinux.org/title/DSDT
  • https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html
http://www.xdnf.cn/news/3893.html

相关文章:

  • 【Redis】Redis常用命令
  • 软件架构之旅(6):浅析ATAM 在软件技术架构评估中的应用
  • 蓝桥杯15届国赛 合法密码
  • 嵌入式系统基础知识
  • 【Hive入门】Hive与Spark SQL集成:混合计算实践指南
  • python使用cv2在图片上标点
  • Python语句类型与格式规范研究
  • RT-Thread studio的驱动5.1.0报错修改
  • c++学习
  • 算法笔记。质数筛算法
  • 一种实波束前视扫描雷达目标二维定位方法——论文阅读
  • 短信登录功能实现(黑马点评)
  • 高中数学联赛模拟试题精选学数学系列第6套几何题
  • QT —— QWidget(1)
  • 白皮解读:数据流通关键技术白皮书【附全文阅读】
  • MNN 支持 DeepSeekVL
  • shell入门
  • 通过Docker部署Prometheus + Grafana搭建监控平台【超详细版】
  • 驱动总裁v2.19(含离线版)驱动工具软件下载及安装教程
  • 实用在线工具箱OmniTools
  • Python硬核革命:从微控制器到FPGA的深度开发指南
  • 多模态大语言模型arxiv论文略读(五十七)
  • Java响应式编程
  • DeepSeek实战--蒸馏
  • Java快速上手之实验六
  • Scrapy框架之【settings.py文件】详解
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-rtdetr(十一)
  • 强化学习:山地车问题
  • 【信息系统项目管理师】【论文】项目背景-通用部分(可背诵)
  • P1434 [SHOI2002] 滑雪