使用者工具

網站工具


acpi_code_study

這是本文件的舊版!


ACPI 研究

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

ACPI table 尋找方式 在記憶體 E000 中搜尋 “R”,“S”,“D”,“P” Signature

#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 方法來控制系統的硬體資源。這些方法用於配置設備、管理電源並執行其他任務。
acpi_code_study.1716446238.txt.gz · 上一次變更: 2024/05/23 14:37 由 don