ACPI Table基本知識(BIOS觀點):
1.包在BIOS ROM中 的 ASL Code 就是ACPI Table,而ACPI Table有分成不同類型的Table(RSDT/FADT/DSDT...etc.)。
2.像是我們比較常使用的DSDT Table就是放了一些event code,簡單說就是當某個H/W event 發生後,系統OS會去依照描述在這個DSDT Table中的ASL Code去執行,而這些Acpi Table包在BIOS ROM中的形式是AML Code (類似機器碼)。
3.BIOS在開機過程中會把包在BIOS ROM中的Acpi Table 載入到RAM 中,然後留下一些資訊給OS來找到他們,最簡單的例子就是RSDP Table會放在1M以下的某個位址(一般都是在E0000h~FFFFFh),然後OS就可以透過搜尋"Signature"(某個標記字)的方式來找到其他的Acpi Table entry point。
[勘誤] 應該是RSDP Structure 不是 RSDP Table ,打錯了 >.< ,感謝糾正! 這個Struct內的RSD PTR欄位會指向RSDT Table ,而如何找這個Struct的方式就是在1M以下的地方找"RSD PTR",有興趣的自己用Debug.com 找看看吧 ^^。 4. OS 需要有一個 AML 翻譯器去翻譯這些AML Code,然後執行他們。 5. 每個Platform 的Host Controller 的暫存器位址會不同,所以BIOS需要透過ACPI Table來告知OS這些暫存器的位址,這樣子做的好處是OS不需要知道你是在什麼Platform,因為他只單純看BIOS所提供的H/W 資訊。 6. ACPI Table還可以用來當作OS 啟動金鑰,例如SLIC Table就是一個例子,OS透過檢查包在BIOS ROM中的ACPI Table的內容來決定是不是一個台OEM 電腦。 其他詳細介紹請參閱ACPI Spec 3.0b 以及微軟網站介紹,下圖為參考微軟文件說明:
5 則留言:
"RSDP Table會放在1M以下的某個位址"
這句話有一點小問題,應該是RST PTR 會被放在低於1M space,RSDT 一般不會在 lower 1M space 當中。
p.s. 我也曾經這樣「誤看」,在 0- 1M 中要找 RSDT,結果就是沒找到!
回覆:
嗯嗯,沒錯,我打太快,應該是RSDP Structure 在1M以下我打成了RSDP Table >.< ,而這個Structure裡面的RST PTR欄位指向RSDT Table。
RSDP 不等於RSDT 喲!...感謝你的糾正喔!
想請問一下,上述你提到的ACPI Table和
ACPI(advanced configuration & power interface)進階配置和電源介面,是否是一樣的東西呢?
ACPI 是一個規範.
ACPI Table是規範中的東西....
有點像ACPI是一台汽車.
ACPI Table是汽車中的零件.
而零件又分成不同部位,所以有很多不同種類的ACPI Tables...
你好~我想請問一下~在開機過程中~BIOS去找到記憶體位址上適當的位子,寫入各種ACPI Table之後,到進到OS前,還需要做什麼動作嗎?例如:set某些register,或是告訴EC要進ACPI mode了? 而進入OS之後,ACPI又有什麼動作嗎? 還是只要OS自己去記憶體上面找ACPI table? 謝謝
張貼留言