Linux ACPI服務ACPI 驅動體系簡介
Linux ACPI服務DSDT: DSDT 稱做 Differentiated Definition Block,存在于 BIOS 中并與當前的硬件平臺兼容的,提供了系統的硬件特性(例如某些設備的內部寄存器和存儲器)的應用策略和配置,在系統初始化的時候,DSDT 被當前系統啟動時初始化到名字空間中。
Linux ACPI服務FADT:
FADT 中包含了 ACPI 的硬件寄存器組(GPE)的應用和配置(包含它們的硬件地址)也包括DSDT表的硬件地址。
ACPI Namespace:
對于ACPI層來說,內存維持了一個目錄形式的指向每個設備,以及 GPE 的名字空間,這個名字樹是通過初始化的時候由 DSDT 創建的,名字樹可以通過 loadtable 方法從 BIOS 中載入 DSDT 改變,而每個設備在 ACPI 層中都被描述成一個對象,包含有對這個設備特性和操作策略的描述列表,系統所有類型設備都是保存在同一個名字樹下。在 ACPI OS 層上調用 _ADR 來獲得 Namesapce 的設備名,Namespace 的例子見例 1-1:
Linux ACPI服務OSPM(OS-directed Power Management):
OSPM 操作系統支持 ACPI 的一個部分,操作系統 (OS)可以從操作系統下驅動程序的角度控制 ACPI 子模塊,同時支持 ACPI 包括 SCI 中斷,設備事件,系統事件模式,這些事件模式可以充分支持 Hot-plug 方式。
Linux ACPI服務SCI 中斷:
(System Control Interrupt) 系統控制中斷,SCI 中斷是一種源自 ACPI 兼容芯片系統中斷,系統映射不同的 ACPI 事件中斷向量以便共享此中斷,當底層硬件產生 SCI 中斷的時候(例如設備插入事件引發中斷),根據通知 OSPM 層處理相對應的 ACPI 事件,OSPM 層會調用預先安裝的中斷句柄。
Linux ACPI服務GPE Block Device 和 GPE 事件:
GPE Block Device 是平臺設計者可按照 FADT(Fixed ACPI Descriptor Table) 描述表中響應 GPE 的寄存器組,GPE 的輸入腳。作為 GPE 設備描述塊中的地址存在于 FADT 中,每個 GPE Block Device 可以容納 128 個 GPE 事件,ACPI 層上提供兩個通用目標寄存器組--GPE0_BLK 和 GPE1_BLK,(也就是說可以響應 256 個 GPE 事件)每個寄存器組中包含兩個等長度的寄存器 GPEx_STS,GPEx_EN,他們的系統地址(硬件地址)都保存在 FADT 中,作為 GPE Blocks 的行為(或者是操作)描述部分存在于 ACPI 名字空間中;用于指示當前的設備的事件,例如設備插入/拔除事件發生的時候,相關的狀態位(GPEx_STS中的位,這個是在硬件設計的時候相關設備的事件信號會連接到這些狀態位)會被外部的事件所置位,生成 SCI,讓 OSPM 層運行相關的控制程方法通知 ACPI 層;GPEx_EN 表示每個事件的使能位,一般說來在南橋(ICH4)中有這幾個寄存器,它們的硬件地址保存在 FADT 中。
GPE 事件就是通過 GPE 寄存器組引發 SCI 中斷后,通告 OSPM 層有關設備的事件,例如下面介紹 Hot-Plug 的時候會詳細或者簡略地介紹到總線枚舉,設備檢查,設備喚醒,設備彈出幾個事件。
ACPI Source Language(ASL):ASL 語言是 ACPI 層用于描述特定的 ACPI 對象的 ACPI 專用語言,并且包括了 ACPI 對象的控制方法(Control method),OEM 廠商和 BIOS 設計者在 BIOS 中使用 ASL 定義所有的設備為 ACPI 對象,并且可以生成 ASL 格式的專門的控制方法,1-1 例就是關于 ASL 的例子:
ASL 的語法規參看 ACPI Specification Revision 2.0AML 和 AML 分析器:AML 是 ACPI 控制方法的虛擬
文章轉載自網管網:http://www.bitscn.com/plus/view.php?aid=7150
【編輯推薦】