一、ACPI简介
高级配置与电源接口(英文:Advanced Configuration and Power Interface,缩写:ACPI),是1997年由英特尔、微软、东芝公司共同提出、制定提供操作系统应用程序管理所有电源管理接口,是一种工业标准,包括了软件和硬件方面的规范。
作为标准中最广为认可的部分,电源管理经历了较多的改进。
早先,高级电源管理将电源管理几乎完全分配给BIOS控制,这大大的限制了操作系统在控制电能消耗方面的功能。
当前,ACPI的电源管理特性以前只适用从便携式计算机(例如膝上型计算机)到桌面型电脑、工作站和服务器。例如,系统可能会进入极低功率消耗状态。这些就是可利用在多数桌面型电脑上的“睡眠”和“休眠”设置。睡眠和休眠状态可以通过移动鼠标,按键盘按键,从另外一台电脑接收一条信息(如果连接到了一个局域网)或者重大系统错误来唤醒系统。
现在,如果ACPI在BIOS和其他系统硬件中被实现,它就可以由操作系统所调用(触发)。
ACPI可以实现的功能包括:
系统电源管理(System power management)
设备电源管理(Device power management)
处理器电源管理(Processor power management)
设备和处理器性能管理(Device and processor performance management)
配置/即插即用(Configuration/Plug and Play)
系统事件(System Event)
电池管理(Battery management)
温度管理(Thermal management)
嵌入式控制器(Embedded Controller)
SMBus控制器(SMBus Controller)
ACPI术语
高级配置电源管理接口(Advanced Configuration and Power Interface (ACPI))
按照在本文中的定义, ACPI是一种描述硬件接口的方法,要足够抽象以允许灵活创新的硬件实现,并且足够具体以允许shrink-wrap OS code使用这个硬件接口
ACPI硬件(ACPI Hardware)
它是一种电脑硬件,具有支持OSPM所必备的特性,而且还具有特定的接口,这些接口的特性是由ACPI规范所指定的描述表(Description Tables)所描述的。
ACPI命名空间(ACPI Namespace)
一个树状层次机构,在受操作系统控制的内存里面,这段内存里面包含命名对象(named objects)等。这些对象(objects)可以是数据对象,控制方法对象,总线/设备包对象等。操作系统通过从驻留在 ACPI BIOS 中的 ACPI Tables 载入载出(loading and/or unloading)定义块(definition blocks),来动态改变命名空间(namespace)的内容。在ACPI Namespace 中的所有信息都来自 Differentiated System Description Table (DSDT),DSDT 里面包含了 Differentiated Definition Block 还有一个或者多个其他的定义块(definition blocks)。
ACPI机器语言(ACPI Machine Language (AML))
是一种由ACPI兼容的OS支持的虚拟机的伪代码(Pseudo-code),里面写有ACPI控制方法和控制对象。
高级可编程中断控制器(Advanced Programmable Interrupt Controller (APIC))
一个中断控制器架构,通常多见于Intel32位架构(Intel Architecture-based 32-bit)的PC系统。APIC架构支持多处理器中断管理(中断均匀的分布在所有处理器),多I/O子系统支持,与8259A兼容,并且支持处理器内 部中断(Inter-Processor Interrupt, IPI)。这个架构由直属于处理器的本地APICs(Local APICs)和在(南桥)芯片中的I/O APIC组成。
ACPI源语言(ACPI Source Language (ASL))
一种和AML等同的编程语言。ASL编译以后就是AML镜像(AML p_w_picpaths)。
控制方法(Control Method)
控制方法定义OS如何执行一个简单的硬件任务。例如,OS调用控制方法(Control Method)去读取一个高温区的温度。控制方法是用一种叫做AML的编码语言写的,AML可以被兼容ACPI的OS所解释并执行。ACPI兼容的系统必 须在ACPI table中提供一组最小的控制方法。OS提供一组well-defined 的控制方法,以使ACPI table开发者能够在他们的控制方法中引用。OEM厂商可以通过,要么Including control methods in the BIOS that test configurations and respond as needed,要么为芯片组的不同修订版包含一组不同的控制方法,来使一个BIOS能够同时支持芯片组的不同修订版。
中央处理器或者处理器(Central Processing Unit (CPU) or Processor)
定义区块(Definition Block)
Definition Blockl以数据和控制方法(编码成AML)的形式包含关于硬件实现和配置详细信息。OEM厂商可以在ACPI Tables中提供一个或者多个Definition Blocks。有一个definition block是必须被提供:那就是Differentiated Definition Block,它描述了基本的系统。在装载Differentiated Definition Block之后,紧接着OS会把Differentiated Definition Block的内容插入到ACPI Namespace。OS可以动态的从the active ACPI Namespace插入和删除的其他definition blocks,可以包含指向Differentiated Definition Block的引用。
装置(Device)
装置上下文(Device Context)
装置中包含的变化的数据;通常是易失性(volatile)数据。当进入或者离开特定的状态(states)的时候,设备应该忘记这些信息,在这 种情况下OS软件负责保存并恢复这些信息。设备上下文(Device Context)指的是包含在设备周边的小数量的信息。同样可以看看System Context。
区分系统描述表(Differentiated System Description Table (DSDT))
OEM厂商必须为ACPI兼容的OS提供一个DSDT。这个DSDT包含Differentiated Definition Block,它能提供关于基本系统的实现和配置信息。OS总是在ACPI Namespace中插入DSDT信息,当系统启动的时候,而且绝不会删除它。
可扩展固件接口(Extensible Firmware Interface (EFI))
它是一个在OS和固件平台之间的接口。这个接口的形式是一种包含有平台相关信息的数据表,and boot and run-time service calls that are available to the OS and loader。这些一起为启动OS提供一个标准的环境。
嵌入式控制器(Embedded Controller)
嵌入式控制器接口(Embedded Controller Interface)
固件ACPI控制结构(Firmware ACPI Control Structure (FACS))
在读写内存中的一种结构,BIOS用它来实现固件和OS之间的信息交换(handshaking )。通过FADT(Fixed ACPI Description Table)FACS被转到兼容ACPI的OS中。FACS包含上次启动时的系统硬件签名,firmware waking vector,和Global Lock。
固定ACPI描述表(Fixed ACPI Description Table (FADT))
一个包含ACPI 硬件寄存器块(Hardware Register Block)的实现和配置详细信息的表,OS需要用这些配置信息来直接管理ACPI硬件寄存器块和DSDT的物理地址,DSDT则包含其他平台的实现和配 置详细信息。 OEM厂商必须在RSDT/XSDT中提供FADF给兼容ACPI的OS。当系统启动的时候,OS则总是把已经定义好了的namespace信息(它存在 于DSDT的Differentiated Definition Block中)插入到ACPI Namespace,并且OS绝不会删除它。
固定特征(Fixed Features)
ACPI接口提供的一组特征。ACPI规范限制硬件编程模型(hardware programming model)在哪产生还有如何产生的。所有的Fixed Features,如果被使用了,会按照本片规范中的描述进行实现,以使OSPM能够直接访问Fixed Features寄存器(fixed feature registers)。
固定特征事件(Fixed Feature Events)
一组事件,当Fixed Feature寄存器中的一对状态和事件位(event bits)被在同一时间设定时,这组事件会在ACPI接口处发生。当一个Fixed Feature时间发生时,系统控制中断(SCI,system control interrupt)is raised。对于ACPI Fixed Feature Events来说OSPM(or an ACPI-aware driver)扮演事件的处理者。
固定特征寄存器(Fixed Feature Registers)
一组在fixed feature register space中的硬件寄存器,fixed feature register space在系统I/O地址空间的特殊的地址里。ACPI为fixed features定义了寄存器块(register blocks)(每个寄存器块从FADT那里得到一个单独的指针)
一般目的事件寄存器(General-Purpose Event Registers)
The general-purpose event registers contain the event programming model for generic features. All general-purpose events generate SCIs.
一般特征(Generic Feature)
全局系统状态(Global System States)
Global System States适用于整个系统,而且对于用户是可见的。各种不同的Global System States在ACPI规范中是从G0标记到G3的。
省略位(Ignored Bits)
在ACPI硬件寄存器中的一些没有被使用的位(bits),在ACPI规范中会指定这些位是“ignored”的。在读的时候,软件会忽略ACPI硬件寄存器中的Ignored Bits位(而不去读取它),写的时候,会保护Ignored Bits(不去写这写位)。
Intel个人电脑架构(Intel Architecture-Personal Computer (IA-PC))
一种对于计算机的一般描述术语,这种计算机的处理器架构符合Intel处理器家族基于Intel架构指令集(Intel Architecture instruction set)的定义,并且有工业标准(industry-standard)PC的结构。
I/O APIC(Input/Output Advanced Programmable Interrupt Controller)
一个输入输出高级可编程中断控制器,用来从设备传递中断给处理器里面的本地APIC(local APIC)。
I/O SAPIC
An Input/Output Streamlined Advanced Programmable Interrupt Controller用来从设备传递中断给处理器里面的本地APIC(local APIC)。应用于安腾处理器(Itanium)。和APIC的不同可以看看Intel
老式的(Legacy)
这是一种电脑状态,在这个电脑状态下电源管理策略是由平台硬件/固件决定的。在如今的系统中,传统电源管理特性被用来支持安装有传统OS的电脑中 的电源管理,这种传统OS并不支持OS直接管理电源架构(OS-directed power management architecture)。
老式的硬件(Legacy Hardware)
没有ACPI或者OSPM电源管理支持的电脑系统。
老式的操作系统(Legacy OS)
此类的操作系统无法得知或对系统的电源管理功能做管理,包含在此类型内的如一些支持APM 1.x的操作系统。
本地APIC(Local APIC)
接收来自I/O APIC的中断。
本地SAPIC(Local SAPIC)
接收来自I/O SAPIC的中断。关于SAPIC,请看“I/O SAPIC”。
复合APIC描述表(Multiple APIC Description Table (MADT))
它被用在支持APIC和SAPIC的系统上,以描述APIC的实现。Following the MADT is a list of APIC/SAPIC structures that declare the APIC/SAPIC features of the machine.
对象(Object)
ACPI Namespace的节点就是objects,这些objects被OS用system definition tables中的信息插入tree。这些objects可以是数据对象(data objects),包对象(package objects),控制方法对象(control method objects)等。包对象refer to其他对象(objects)。对象同样拥有类型(type),大小(size),和相对名称(relative name)。
对象名(Object name)
ACPI Namespace的一部分。有一组规则for naming objects。
操作系统直接电源管理(Operating System-directed Power Management (OSPM))
电源(和系统)管理的一个模型,在其中OS扮演重要的角色,使用全局信息为手边的任务优化系统行为(system behavior)。
包(Package)
一组objects。
电源开关(Power Button)
用户按的按钮或者其他有触点的开关(switch contact)设备,通过它可以把系统从睡眠或者soft off状态切换到工作状态,还可以给OS发送信号使OS从睡眠或者soft off状态恢复到工作状态。
电源管理(Power Management)
一种最小化系统电源消耗的软硬件机制,管理系统热量限制,延长系统电池使用时间(battery life)。电源管理在系统速度,噪音,电池使用时间,处理器速度,还有电源消耗之间获取平衡。一些system functions,比如appliance (for example, answering machine, furnace control) operations,需要电源管理。
电源资源(Power Resources)
设备需要的资源(比如power planes和clock sources),设备需要在给定的电源状态下对这些资源进行操作。
电源来源(Power Sources)
寄存器分组(Register Grouping)
由两个寄存器块组成(它有两个指向两个不同寄存器块的指针)。在寄存器分组(register grouping)内部的固定位可以被在两个寄存器块(register blocks)之间拆分。这就允许了在寄存器分组内部的位可以被在两个芯片(chips)之间拆分。
保留位(Reserved Bits)
在ACPI硬件寄存器中有一些没有被使用的位,在ACPI规范中被称为保留位。为了未来能够扩展,硬件寄存器保留位总是被归零,并且写入的数据不 会造成其他的影响。OSPM的实现必须往所有使能和状态寄存器的保留位写“0”,同样还要往控制寄存器(control registers)的preserve bits写“0”
根系统描述指针(Root System Description Pointer (RSDP))
兼容ACPI的系统必须在系统低地址空间(system’s low address space)提供一个RSDP。这种结构的唯一目的就是提供RSDT和XSDT的物理地址。
根系统描述表(Root System Description Table (RSDT))
signature为RSDT的table,它跟随在一组指向其他系统描述表(system description tables)的物理指针之后。OS通过跟随RSDP结构中的指针来定位RSDT。
全局状态(Global System States)
ACPI规范定义了一台兼容ACPI的计算机系统可以有以下七个状态(所谓的全局状态):
G0('S0)正常工作状态:计算机的正常工作状态-操作系统和应用程序都在运行。CPU(s)执行指令。 在这个状态下(即没有进入G1睡眠),CPU和像硬盘、DVD驱动器等等这些的设备可以一再的进入和从低能源状态回来,叫做C0-Cn和D0-D3。(例如膝上型计算机,当使用电池运行的时候通常关掉所有当前未使用的设备;一些桌面型计算机也这么做来减少噪声。)
G1 睡眠 细分为从S1到S4这四种状态。系统从这几种状态被唤醒到G0运行(唤醒等待时间)所需的时间最短的是S1,其次是S2和S3,最后是S4。此外/sys/power/state对应的关键字与状态: standby(S1), mem(S3), disk(S4)
S1:最耗电的睡眠模式。处理器的所有寄存器被刷新,并且CPU停止执行指令。CPU和内存的电源一直维持着,一些设备如果没有被使用那么就会被停止供电。这种模式通常指上电待机或者简单叫做POS,特别在BIOS设置界面上。一些新式的计算机不再支持S1;老式的电脑对S1支持可能要比S3好。
S2:一个比S1更深的睡眠状态,已经不给CPU供电了;然而,通常这种模式并不被采用。
S3 :在BIOS中叫做"挂到内存" (Suspend to RAM/STR),在Windows XP以后的Windows版本和一些Linux发行版中叫做"待机(Standby)", 在Windows Vista和Mac OS X则叫做"睡眠(Sleep)",虽然ACPI规范仅仅提到术语"S3"和"睡眠(Sleep)"。在这个状态下,主存储器(RAM)仍然有电源供给,尽管它也是几乎唯一的有电源供给的组件。因为操作系统、 所有应用程序和被打开的文档等等的状态都是保存在主存储器中,用户可以把工作恢复到正好上次他们保持的状态-计算机从S3状态回来时主存储器的内容和它进 入S3状态时候的内容是相同象的。(规范中提到了S3和S2是相当类似的,只有更多的组件在S3状态下会被关掉电源。) 相比较S4来说S3有两个好处;计算机恢复的过程比重启要快,第二,如果任何正在运行的应用程序(被打开的文档等等)有私有信息在里面,这些信息是不会被 写到硬盘上的。然而,在系统不能被唤醒比如遇到了电源故障的时候, 高速缓冲存储器可能会被flushed来防止数据毁坏。
S4: 在Windows中叫休眠, 在Mac OS X中叫作安全睡眠,也称为挂到硬盘,虽然ACPI规范中只提到了一个术语S4(main article:Hibernate(OS feature))。在这个状态下,所有主存储器的内容被储存在非易失性存储器,例如硬盘, 保护操作系统当前的状态,包括所有应用程序,打开的文档等.这意味着从S4恢复后,用户可以恢复到原本的工作状态,采用的方法和S3是一样的。S4和S3 之间的差异是,除了把主存储器中的内容移进移出所消耗的时间以外,在S3状态下的时候如果一旦停电了,所有主存储器上的数据就会丢失,包括所有的没有保存 的文档,而在S4状态下则没有影响.S4和其他的S状态有很大不同,事实上更类似G2Soft Off状态和G3 Mechanical Off状态,而不是S1-S3.在S4状态下的系统同样可进入G3(Mechanical Off)状态,并且保留S4时候的状态信息.所以它可以恢复到以前的运行状态在关掉电源之后.
G2(S5)Soft Off--G2,S5,和Soft Off都是相同的叫法。G2和G3Mechanical Off几乎是相同的,但有些部件仍然带电,使计算机仍然可以被键盘、时钟、调制解调器(电话唤醒)、LAN(网络唤醒)还有USB设备所唤醒。[1]在启动系统从G2恢复到G0正常工作模式的过程中,无论是G3 Mechanical Off还是G2都得运行启动程序来启动操作系统。
此外,当操作系统在不支持ACPI的情况下运行,这种状态被定义为Legacy。在这个状态下,硬件和电源不是通过ACPI来管理的,实际上已经禁用了ACPI。
设备电源状态(Device Power State)
设备状态对于用户来说往往是不可见的,比如当一个设备已经没有电源供应的时候,可能整个系统还是在工作状态,光驱应该是一个很好的例子吧。 设备状态是与设备相关的状态,他们的定义和以下四个因素有关:
电源消耗(Power consumption),设备用电量的多少。
设备状态/环境(Device context),设备(从D0进入其他状态的时候)保留了多少原来的状态/环境。操作系统负责保存丢失的设备状态/环境。
设备驱动(Device driver),让设备恢复到D0,驱动程序应该做什么(或者做多少)。
设备状态有一下几个:
D0 Fully-On 是(正常)工作状态,电源消耗量最多,设备是完全被相应的,并且设备保留了全部的设备状态/环境。
D1 和 D2是中间电源状态,它的定义根据设备的不同而有所不同。
D3 Off是设备电源关闭所以对总线来说是没有相应的。设备状态/环境全部丢失,操作系统会重新初始化设备当重新给它加电的时候。这个状态下的设备恢复到D0相比之下需要最长的时间。
设备状态 | 电源消耗 | 保留设备状态信息 | 驱动程序恢复 |
---|---|---|---|
D1 | D0>D1>D2>D3 | >D2 | <D2 |
D2 | D0>D1>D2>D3 | <D1 | >D1 |
D3 - Off | 0 | 没有保留 | 完全初始化并且装载 |
处理器电源状态(Processor Power State)
处理器电源状态(C0到C3状态,后面还有Cn)是指在G0状态下(只对G0状态有效,在其他状态下不予讨论)的处理器电能消耗和温度管理的状态。
只有C0状态下CPU才会执行指令,C1到Cn状态下CPU都处于各种不同程度的睡眠状态(Sleeping States),在这睡眠状态下,CPU都有一个恢复到C0的唤醒时间(latency),它是和CPU的电能消耗有关的,通常,用电能量越小意味着得花更长的时间恢复到C0状态,也就是唤醒时间越长。
当在C0状态下时,ACPI允许通过定义节流阀(throttling)过程,和通过进去多性能状态(multiple performance states,P-states)来改变处理器的性能。
各个状态的定义如下所示:
C0是正常工作状态,当处理器处于这种状态下的时候,它能正常处理指令。
C1(通常称为Halt)拥有最短的唤醒时间,这个延时必须短到操作系统软件使用CPU的时候不会考虑到唤醒时间方面的因素。一些处理器,比如说奔腾4(Pentium 4),支持C1E(Enhanced C1 state)这样的低电能消耗技术。
这个状态是不被软件所见的。
C2 (通常称为Stop-Clock),这个状态下处理器维持着所有的软件所见的状态信息,但是需要更长的时间来恢复到C0。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C1而不是C2状态,C2比C1更省电。
C3 (通常称为Sleep),相比C1和C2更省电了。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C2而不是C3状态,当处于C3状态时,处理器缓存保留了所有的状态信息,但是忽略所有的侦听。操作系统软件负责保证缓存数据的一致性。
设备和处理器性能状态(Device and Processor Performance States)
设备和处理器性能状态(Px状态)是在C0(对于处理器)和D0(对于设备)下定义的电源消耗和能力的状态。性能状态允许OSPM在性能和能源消耗之间获取平衡。P0是最高性能状态,从P1到Pn是连续的低性能状态,最高限制n为16。
P0状态,使用最大性能并且消耗的电能最多。
P1状态,性能比前者要小,但是消耗电能也相应少一些。
Pn状态,n是的大小是依赖于处理器和设备的,处理器和设备可以定一个任意的不超过16的数字。
这个状态在Intel处理器中称为SpeedStep,在AMD处理器中称为PowerNow!或Cool'n'Quiet,在VIA处理器中称为PowerSaver。
二.ACPI 驱动体系简介
ACPI 驱动体系是支持 ACPI Hot Plug 的基础,在论述 Hot Plug 之前首先要介绍 ACPI 体系,根据ACPI 规格定义的 ACPI 驱动体系(简称 ACPI CA),目前 ACPI 组织已经提供了完整的 Unix 版本的ACPI 驱动体系,这个体系主要目的在于让操作系统和当前的 ACPI 硬件隔离开,让 Linux 中通过一系列的接口来访问 ACPI 层。下面列出 ACPI CA 的接口,例如电源管理和配置,热拔插等等:
在 ACPI 规范中将 ACPI 体系分割成 ACPI 核心层(Core subsystem),用于提供基本的 ACPI 服务(AML 翻译和名字空间管理);OS 服务层(OS service)提供针对不同的操作系统的和 ACPI 单元接口服务,下面将详细介绍它们。
a. ACPI 核心层:
ACPI 核心层分成几个相互关联的逻辑模块,每个模块之间包含一些相关的 ACPI API,当用户在编写相关的含有 ACPI 服务的驱动程序的时候,会调用这些相关模块的接口。
1. AML Interpreter: 从上可知AML(后面将详细介绍)分析器是基础,负责分析和运行从本地计算机 BIOS 提供的 AML 文件流,一般说来 AML 翻译器为其他的 ACPI 服务模块提供方法节点运行和获得名字空间中某个方法节点的对象服务。
2. ACPI Table Management 是一个负责载入,管理,分析,校验 ACPI 模块中所使用的各种来自系统 BIOS 的一些特殊的支持 ACPI 服务的表格,例如:RSDT,FSDT,FACS,DSDT等等,这些表在操作系统进行初始化的时候被载入内存。
3. Namespace Management 在 AML 翻译器之上提供名字空间服务,它负责创建和管理内部的名字空间。
4. Resource Management:资源管理提供建立在名字空间资源的配置和获取,其中包括了 PCI的设备的地址区间,中断等重要参数。它所提供的服务包括:获取和设定当前的资源,获取设备上可能存在的地址区间以及 PCI 设备的中断路由表(IRQ Routing Tables),获取当前设备的电源支持能力(例如是否支持 S1-S5 状态)。
5. ACPI H/W Management:该模块用于控制对桥芯片上 ACPI 寄存器和时钟以及其他 ACPI 关联硬件的访问,例如 ACPI GPE 状态寄存器和使能寄存器,系统状态获得。 Event handling:事件管理模块是用于管理系统控制中断(SCI)的发生和 GPE 事件的响应,SCI 包括 ACPI 时钟中断,以及 GPE 事件管理。这个单元负责"分发"地址空间和操作空间(OperationRegion)的事件到当前的操作系统层,并负责调用相关的句柄来进行处理。
b.OS 服务层:
ACPI OS 服务层(OSL)可以让 ACPI 逻辑模块在本地操作系统上运行。OS 服务层通过可在主机操作系统中使用的接口,设备驱动程序,将从
ACP 核心的服务转换成本地操作系统的访问和调用;而操作系统层通过 OSL 向 ACPI 核心层发出呼叫;OSL 层对 ACPI
核心层实现了一系列完成操作系统独立功能的标准接口(例如存储分配和硬件访问)。
OSL 的组成模块介绍:
1.OS 引导服务:
在 OS 载入过程中引导服务是一些初始化的功能,在大多数其它的操作系统初始化之前执行。这些服务包括 ACPI 子系统的初始化。
2.设备驱动载入服务:
对于出现在 ACPI 名字空间中的设备节点,操作系统必须有一个模块用以探测到它们并载入驱动,读入配置空间,设备驱动载入服务提供这项装置。
3.操作系统运行服务:
运行服务包括大部分 ACPI 系统和 OS 交互的外围接口,用于当前内核的进程/线程操作,以及提供和当前操作系统接口的互斥,信号,进程队列,休眠,暂停等,以及事件日志及电源管理功能。
4.异步服务
异步功能包括中断服务(系统控制中断),事件处理和分配(既定事件,GPE 事件,通知事件和操作区访问事件),以及错误处理。
从 OS 至 ACPI 子系统的请求:
ACPI 核心层和 ACPI OS 层,以及操作系统之间的关系如下:
acpid用来记录ACPI事件的发生并执行相应动作。acpid在系统启动的时候在后台运行。它会读取事件文件(/proc/acpi/event)中的事件。当接收到一个ACPI事件,acpid会检查规则列表,然后执行与之对应的规则。如果锁文件(/var/lock/acpid)存在,acpid就会忽略到来的事件。比如说按电源键会关机,盖上笔记本盖子会休眠等等。。
若是没有acpid进程,则这些事件不会被响应。
规则默认定义在/etc/acpi/events目录的文件中。每一条规则都包含event和action。event的值是用来匹配事件的正则表达式。action是一条在shell环境下执行的命令。
除了规则文件外,acpid还接收一个UNIX socket连接。任何程序都可以连接到这个socket。一旦连接,acpid会发送所有的ACPI事件文本到这个程序。程序可以过滤这些信息来获取它需要的。直到acpid关闭才会关闭这个连接。
acpid会记录所有它的活动到syslog(syslog或messages文件),包括任何action的stdout和stderr。
-l:记录所有事件和动作的信息
-L:创建锁文件(/var/lock/acpid)来停止事件的响应和执行,可删除锁文件恢复。
-m:更改socket文件的权限,默认为0666
-S:不要打开socket文件
acpi_listen是一个简单的shell友好的工具,它用来连接acpid并监听事件。当一个事件发生时,acpi_listen会把它打印到标准输出。
-c:接收的事件最大数
-t:监听最长时间
kacpimon是一个连接到三种ACPI事件源的监控程序。这三种分别是:/proc/acpi/event;netlink;the input layer(/dev/input/event*)。因为acpid和kacpimon都连接到同样的源,因此在运行kacpimon前需停止acpid。
如果想把kacpimon的输出输出到一个文件,退出时使用Esc,而不是Ctrl-C