使用者工具

網站工具


acpi_code_study

ACPI 研究

ACPI(Advanced Configuration and Power Interface)是一種用於配置和管理現代電腦硬體的標準。它提供了一種統一的機制來描述系統的硬體資源,並允許作業系統與這些資源進行交互。

ACPI table 尋找方式

在記憶體 E000 中搜尋 “RSD PTR ” (Notice that this signature must contain a trailing blank character.)

#include <stdint.h>

typedef struct __RSDP_SIGNATURE {
  uint8_t signature[4];
  uint8_t checksum;
  uint8_t oem_id[6];
  uint8_t reserved[2];
  uint32_t length;
  uint64_t rsdp_address;
} __RSDP_SIGNATURE;

__RSDP_SIGNATURE* find_rsdp() {
  __RSDP_SIGNATURE* rsdp = (__RSDP_SIGNATURE*)0x000E0000;
  while (rsdp->signature[0] != 'R' ||
         rsdp->signature[1] != 'S' ||
         rsdp->signature[2] != 'D' ||
         rsdp->signature[3] != 'P') {
    rsdp++;
    if (rsdp > (__RSDP_SIGNATURE*)0x000FFFFF) {
      return nullptr;
    }
  }

  if (rsdp->checksum != 0) {
    return nullptr;
  }

  return rsdp;
}

RSDT(Root System Description Table)和 XSDT(Extended System Description Table) RSDT 和 XSDT 的工作方式非常相似。操作系統會首先找到 RSDP(Root System Description Pointer), 這是一個指向 RSDT 或 XSDT 的指標。然後,操作系統會使用 RSDT 或 XSDT 來查找其他 ACPI 資料表,這些資料表描述了系統的硬體資源。

  • RSDP 通常位於系統記憶體中的固定位置(例如,0x000E0000)。
  • RSDT 和 XSDT 都包含指向其他 ACPI 資料表的指標。這些指標是 32 位或 64 位的,具體取決於資料表的類型。
  • ACPI 資料表使用簽名來識別它們。簽名是一個四個字元的字符串,用於唯一識別資料表。

Windows 操作系統使用 ACPI 來配置和管理系統的硬體資源。它使用 ACPI 資料表來獲取有關系統硬體的資訊,例如 CPU、記憶體、儲存、匯流排和設備。Windows 還使用 ACPI 來控制系統的電源管理功能,例如睡眠和休眠。

以下是 Windows 操作系統如何使用 ACPI 的一些詳細資訊:

  • 啟動時:在 Windows 啟動時,它會使用 ACPI 資料表來獲取有關系統硬體的資訊。這些資訊用於初始化硬體並準備好作業系統。
  • 電源管理:Windows 使用 ACPI 來控制系統的電源管理功能。例如,當您關閉電腦時,Windows 會使用 ACPI 將系統置於睡眠或休眠狀態。
  • 設備管理:Windows 使用 ACPI 來管理系統的設備。例如,當您插入新設備時,Windows 會使用 ACPI 來配置設備並使其可用於作業系統。

ACPI 對 Windows 操作系統至關重要。它允許 Windows 配置和管理系統的硬體資源,並提供電源管理和設備管理功能。

以下是一些有關 Windows 操作系統如何使用 ACPI 的附加細節:

  • Windows 使用 ACPI 驅動程式來與 ACPI 資料表進行交互。這些驅動程式由硬體製造商提供,並允許 Windows 訪問系統的硬體資源。
  • Windows 使用 ACPI 事件來監控系統狀態。這些事件用於通知 Windows 系統狀態的變化,例如當設備插入或拔出時。
  • Windows 使用 ACPI 方法來控制系統的硬體資源。這些方法用於配置設備、管理電源並執行其他任務。

XSDT出現的時間點

XSDT(Extended System Description Table)是在 ACPI 3.0 規格中引入的。它是一種 64 位資料表,用於儲存指向其他 ACPI 資料表的指標。在 ACPI 3.0 之前,使用 RSDT(Root System Description Table)來儲存這些指標。RSDT 是一種 32 位資料表,因此它只能儲存有限數量的 ACPI 資料表指標。

XSDT 的引入允許在 ACPI 系統中使用更多 ACPI 資料表。這對於現代電腦系統來說很重要,因為它們通常包含比舊電腦系統更多更複雜的硬體。

以下是 ACPI 規格中引入 XSDT 的一些詳細資訊:

ACPI 3.0 規格於 2009 年 3 月 31 日發佈。 XSDT 在 ACPI 3.0 規格的第 4.1.3 節中定義。 RSDT 在 ACPI 3.0 規格的第 4.1.2 節中定義。 以下是一些使用 XSDT 的 ACPI 系統的示例:

Windows 8 及更高版本 Linux 3.10 及更高版本 macOS X 10.8 及更高版本

ACPI POWER STATE

acpi_code_study.txt · 上一次變更: 2024/05/23 15:29 由 don