Linux acpi off簡介
Linux acpi off – the Advanced Configuration & Power Interface. ACPI是OS,BIOS和硬件之間的抽象層。它允許OS和平臺獨立的發展,比如新的OS可以控制老的平臺,老的OS也可以控制新的平臺而不需要額外的修改。
ACPI寄存器,描述了和ACPI相關的寄存器。OS可以直接從ACPI表中取得這些寄存器的信息,因此不必了解具體的硬件配置。
AML代碼,一種類C的代碼。由BIOS提供,OS的AML解釋器(在Linux中叫ACPI CA)解釋執行這些代碼。這是ACPI抽象層的關鍵,下面會詳細介紹。
配置信息,ACPI包含的配置信息很多,比如多處理器配置信息(MADT)、NUMA配置信息(SRAT、SLIT)、高精度定時器(HPET)等。
AML代碼是抽象的關鍵。為了消除平臺相關性,BIOS把平臺相關的操作用AML代碼來實現。OS不需要知道平臺細節,它只是解釋執行這些代碼,在解釋執行的過程中平臺相關的操作就被執行了。ACPI規范定義了一些標準的AML函數,OS解釋執行一個這樣的標準函數就可以實現特定的功能。舉個例子:
- Scope (_SB.PCI0.LPC)
- {
- OperationRegion (LPCS, PCI_Config, 0x00, 0x0100)
- Field (LPCS, AnyAcc, NoLock, Preserve)
- {
- Offset (0x60),
- PIRA, 8,
- }
- }
- Device (LNKA)
- {
- Method (_DIS, 0, NotSerialized)
- {
- Or (\_SB.PCI0.LPC.PIRA, 0x80, \_SB.PCI0.LPC.PIRA)
- }
- }
比如我們想禁止LNKA設備,Linux acpi off規范定義了OS必須執行此設備的_DIS函數。從硬件的角度來講,禁止LNKA設備需要將某個PCI設備的配置空間的寄存器0×60的最高位置上。OS不需要知道硬件的細節,它解釋執行_DIS函數即可。上面的代碼就是AML代碼,由BIOS提供,語句‘Or (\_SB.PCI0.LPC.PIRA, 0×80, \_SB.PCI0.LPC.PIRA)’實際上就是給寄存器\_SB.PCI0.LPC.PIRA置上最高位, 而PIRA就是PCI設備LPC的配置空間的寄存器0×60。從此段代碼我們可以明顯的看出BIOS以AML代碼的形式隱藏(抽象)了硬件的細節,從而使得OS看到的是一個平臺無關的硬件。
更多的Linux acpi off預定義的函數可以在ACPI規范中找到,可以在http://www.acpi.info下載最新的規范。
Linux acpi off實現中使用的AML解釋器是ACPICA -the ACPI Component Architecture. 可以從http://www.intel.com/technology/iapc/acpi/downloads.htm得到。它包含一個AML解釋器(Linux kernel包含了這個解釋器,很多其他OS也是如此,比如BSD、opensolaris等),一個編譯器(將ACPI Source Language (ASL)編譯成AML代碼)和一些測試工具。
最新的Linux acpi off的代碼可以使用git在http://www.kernel.org/git/?p=linux/kernel/git/lenb/linux-acpi-2.6.git得到。
【編輯推薦】
- Linux 查看磁盤空間實現代碼介紹
- Linux操作系統需要微軟的十大幫助
- 探尋Linux到底需要多低的配置
- Linux測試工具tcpdump監視TCP/IP連接命令介紹
- Linux流量控制實例應用介紹