Linux acpi off简介

运维 系统运维
计算机领域的一个基本方法是增加一个抽象层,从而使得抽象层的上下两层独立的发展,ACPI事实上也是借鉴类似的思想。ACPI的抽象主要是通过ACPI表中提供的信息来实现,这些信息包括ACPI寄存器、AML代码、配置信息等。

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解释执行一个这样的标准函数就可以实现特定的功能。举个例子:
 

  1. Scope (_SB.PCI0.LPC)  
  2. {  
  3. OperationRegion (LPCS, PCI_Config, 0x00, 0x0100)  
  4. Field (LPCS, AnyAcc, NoLock, Preserve)  
  5. {  
  6. Offset (0x60),  
  7. PIRA, 8,  
  8. }  
  9. }  
  10. Device (LNKA)  
  11. {  
  12. Method (_DIS, 0, NotSerialized)  
  13. {  
  14. Or (\_SB.PCI0.LPC.PIRA, 0x80, \_SB.PCI0.LPC.PIRA)  
  15. }  
  16. }  

 

比如我们想禁止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得到。

【编辑推荐】

  1. Linux 查看磁盘空间实现代码介绍
  2. Linux操作系统需要微软的十大帮助
  3. 探寻Linux到底需要多低的配置
  4. Linux测试工具tcpdump监视TCP/IP连接命令介绍
  5. Linux流量控制实例应用介绍


 

责任编辑:chenqingxiang 来源: CSDN
相关推荐

2010-06-18 12:47:04

Linux acpi

2010-06-18 12:26:17

Linux acpi

2010-06-18 14:58:42

Linux ACPI服

2010-06-18 15:22:14

Linux ACPI服

2010-06-18 12:38:31

Linux acpi

2010-06-18 14:41:48

Linux ACPI服

2010-06-18 14:09:29

Linux acpi电

2010-06-18 12:58:17

Linux acpi电

2013-11-25 17:39:17

Linux内核PCIACPI

2010-09-17 16:27:16

ECHO OFF

2010-03-09 17:57:46

2010-06-21 15:04:00

Linux apt

2011-09-15 14:03:58

linux软件仓库

2011-01-10 16:45:45

2010-06-23 16:35:50

Linux Bash

2010-01-07 17:36:38

Linux静态库

2009-11-30 09:50:26

Linux内核Linux内核体系

2010-06-21 10:49:24

Linux APM

2013-11-25 17:39:45

UEFI论坛ACPI计算平台

2009-09-25 10:10:52

Linux学习Linux目录简介
点赞
收藏

51CTO技术栈公众号