追踨法蘭克

2012年5月18日 星期五

ACPI簡介

ACPI (Advanced Configuration and Power Interface),故名思義是對硬體的電源管理和設定的介面。它是由Intel、Microsoft、Phoenix、Toshiba等不同領域的製造商所訂定,它的目的就是讓OS可以對hardware做以上的動作。它的架構主要都在BIOS階段會建立起來,所以我們必須熟悉這本ACPI spec, 目前最新的版本是5.0a.

前六章是ACPI最基本的部分,要觀念清楚,一定要照著順序看,而且要熟讀它。後面章節可
以跳著看,也就是當作工具書來查,如果懂得愈多,對未來處理ACPI的問題也就更容易解決! 當然,要支援ACPI除了hardware , OS也必須支援ACPI, 而在ACPI訂定之前有個APM,這裡指的legacy OS或legacy hardware就是指APM的OS或不支援ACPI的OS或hardware,它將不符合ACPI,所以不在這裡討論。

ACPI既不是軟體的spec,也不是硬體的spec,它包括了軟體和硬體的元素,目的上面也說過,它是讓OS可以對Hardware做電源管理和設定的介面。如圖紅色部分就是ACPI的範圍:



ACPI可以做的事情很多,大致可分為十大類:

System power management: 整個系統的電源管理,ACPI定義了許多Sleep狀態,如S1、S3、S4、S5等,可以在Sleep狀態被Device喚醒,Sleep狀態數字愈高表示睡得越深、耗的電量越少,需要被喚醒的時間也越長。

Device power management: 週邊裝置的電源管理,ACPI定義D0、D1、D2、D3...,數字越大表示耗電量越少,D0表示週邊裝置運作中。ACPI Table也定義了週邊裝置的相關電源控制,可以在OS端透過AP將週邊裝置設定較省電的模式。

Processor power management: 處理器的電源管理,ACPI定義了當CPU不在Sleep狀態時且閒置時,可以進入low power 狀態,也就是C State,數字越大表示越省電,C0表示運作中。

Device and processor performance management: 週邊裝置和處理器的效能管理,ACPI定義為當CPU和設備在動作的時候(C0或D0),做改變效能的動作,這裡指的是P State,它的狀態改變會影響運作的效能,通常是降頻來動作,也可以達到省電的功能。

介紹完四個功能,發現了許多狀態,這是屬於Power State的部份,下面以G State圖表示可以看得更清楚。G0表示系統在工作中,G1為Sleeping, G2為soft off (S5), G3為Mech off(電源斷開).
Configuration / Plug and Play: 組態和隨插即用,ACPI提供了介面讓OSPM可以把資源在插入和移除之間做組態。這些組態將定義在DSDT和SSDT中,它將有一個ID來代表它的Device.

System Event: 糸統事件,ACPI定義了通用的事件模組,如Plug and Ply、Power management、Thermal 等。當系統事件發生時,core logic會設定一個bit在Status Register中來表示事件發生,如果對應的Bit在enable register 被設定,那麼會發出SCI來告訴OS. 當OS 收到SCI事件時,它會去找該事件所對應的control method. 這些control method會以AML的方式告訴OS做什麼事,我們則要用ASL來撰寫它。

Battery management: 電池管理,支援ACPI的電池裝置它是透過OS且以EC來控制,或者由電池的control method來控制。這邊的control method也是由ASL來實作它。

Thermal management: 熱的管理,對於Device的熱管理也是在ACPI定義的範圍,它提供了簡單的、可調整的模組來給OEM定義其Thermal zone、Thermal indicator和method for cooling thermal zones.

Embedded Controller: ACPI定義了標凖的硬體的和軟體的溝通介面給OS bus enumerator和EC之間來做溝通,也就是說可以由Driver來存取EC的資源,讓OEM可以提供platform features給OS的AP使用。

SMBus Controller: ACPI定義了標凖的硬體的和軟體的溝通介面給OS bus enumerator和SMBus Controller之間來做溝通,也就是說可以由Driver來存取SMBus device的資源,讓OEM可以提供platform features給OS的AP使用。

10 則留言:

  1. 您好!我有轉載您的文章若有侵權~請通知~我將立即撤下!謝謝

    回覆刪除
  2. 如果有附轉載來源網站是可以的,請問轉載到哪裡?

    回覆刪除
  3. 請問您知道要如何取得AMD 平台的 ACPI base address嗎 ? 網路上有for intel chipset的方式(就是找ISA bridge,offset 0x43~0x40就是了) 但不知道AMD platform是否也一樣 ?

    回覆刪除
  4. 您好,請問第一張圖可否再解釋的更清楚一點呢

    回覆刪除
  5. 參考資料acpi spec :),有問題再提出吧,前六章非常基本地

    回覆刪除
  6. 請問一下D3(hot) D2 D1 state差別分別是在哪裡?
    別叫我再參考spec了>~< 就是看不是非常懂..才在這裡請教您的

    回覆刪除
    回覆
    1. 親愛的讀者,關於妳的問題,有解答囉 ^_^
      http://frankuefi.blogspot.tw/search/label/ACPI

      刪除
  7. 作者已經移除這則留言。

    回覆刪除