這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
acpi_code_study [2024/05/23 14:30] don |
acpi_code_study [2024/05/23 15:29] (目前版本) don |
||
---|---|---|---|
行 3: | 行 3: | ||
ACPI(Advanced Configuration and Power Interface)是一種用於配置和管理現代電腦硬體的標準。它提供了一種統一的機制來描述系統的硬體資源,並允許作業系統與這些資源進行交互。 | ACPI(Advanced Configuration and Power Interface)是一種用於配置和管理現代電腦硬體的標準。它提供了一種統一的機制來描述系統的硬體資源,並允許作業系統與這些資源進行交互。 | ||
+ | |||
+ | |||
+ | ===== ACPI table 尋找方式 ===== | ||
+ | |||
+ | 在記憶體 E000 中搜尋 “RSD PTR ” (Notice that this signature must contain a trailing | ||
+ | blank character.) | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | < | ||
+ | #include < | ||
+ | |||
+ | 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-> | ||
+ | | ||
+ | | ||
+ | | ||
+ | rsdp++; | ||
+ | if (rsdp > (__RSDP_SIGNATURE*)0x000FFFFF) { | ||
+ | return nullptr; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if (rsdp-> | ||
+ | return nullptr; | ||
+ | } | ||
+ | |||
+ | return rsdp; | ||
+ | } | ||
+ | </ | ||
+ | |||
RSDT(Root System Description Table)和 XSDT(Extended System Description Table) | RSDT(Root System Description Table)和 XSDT(Extended System Description Table) | ||
行 16: | 行 59: | ||
以下是 Windows 操作系統如何使用 ACPI 的一些詳細資訊: | 以下是 Windows 操作系統如何使用 ACPI 的一些詳細資訊: | ||
- | * 啟動時:在 Windows 啟動時,它會使用 ACPI 資料表來獲取有關系統硬體的資訊。這些資訊用於初始化硬體並準備好作業系統。 | + | |
- | * 電源管理:Windows 使用 ACPI 來控制系統的電源管理功能。例如,當您關閉電腦時,Windows 會使用 ACPI 將系統置於睡眠或休眠狀態。 | + | |
- | * 設備管理:Windows 使用 ACPI 來管理系統的設備。例如,當您插入新設備時,Windows 會使用 ACPI 來配置設備並使其可用於作業系統。 | + | |
+ | |||
+ | | ||
+ | |||
+ | {{: | ||
+ | |||
ACPI 對 Windows 操作系統至關重要。它允許 Windows 配置和管理系統的硬體資源,並提供電源管理和設備管理功能。 | ACPI 對 Windows 操作系統至關重要。它允許 Windows 配置和管理系統的硬體資源,並提供電源管理和設備管理功能。 | ||
行 24: | 行 73: | ||
以下是一些有關 Windows 操作系統如何使用 ACPI 的附加細節: | 以下是一些有關 Windows 操作系統如何使用 ACPI 的附加細節: | ||
- | Windows 使用 ACPI 驅動程式來與 ACPI 資料表進行交互。這些驅動程式由硬體製造商提供,並允許 Windows 訪問系統的硬體資源。 | + | * Windows 使用 ACPI 驅動程式來與 ACPI 資料表進行交互。這些驅動程式由硬體製造商提供,並允許 Windows 訪問系統的硬體資源。 |
- | Windows 使用 ACPI 事件來監控系統狀態。這些事件用於通知 Windows 系統狀態的變化,例如當設備插入或拔出時。 | + | |
- | Windows 使用 ACPI 方法來控制系統的硬體資源。這些方法用於配置設備、管理電源並執行其他任務。 | + | * 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 ===== | ||
+ | |||
+ | |||
+ | {{: | ||
+ | {{: | ||