Linux电源管理

Linux支持较旧的APM和较新的ACPI电源管理实现。APM专注于基本系统和OS电源管理,其中许多电源管理策略都在BIOS级别上进行控制;当电源管理事件在BIOS和OS之间传递时,APM驱动程序充当BIOS和Linux OS之间的接口。通知设备这些事件,以便它们可以适当响应。

ACPI在电源管理和平台配置方面提供了更大的灵活性,并允许平台独立性和OS对电源管理事件的控制。除了电源管理策略外,ACPI还支持以下策略:响应热事件(例如风扇),物理运动事件(例如按钮或盖子),CPU状态,电源(例如电池,交流电源)等此类策略。

电源管理软件管理状态转换以及设备驱动程序和应用程序。设备驱动程序负责在将设备状态置于低功耗状态之前保存设备状态,然后在系统处于活动状态时还原设备状态。通常,应用程序不参与电源管理状态转换。一些专用软件(例如Linux的IEGD)直接处理某些设备,以处理状态转换。除了IEGD外,Linux中还有一些常用的软件技术,包括X Window系统,Window管理器以及一些开源过程,例如/sys/power/state和/proc/acpi/event,它们也提供了一些Linux电源管理的一部分功能。

X Window

X Window系统受许多操作系统支持,包括Linux,Solaris和HP-UX。 它为OS提供了图形功能,并支持用户级别,系统级别和/或关键的待机,挂起和恢复。 在APM实现中,X服务器控制电源管理事件。 在ACPI实现中,X Window系统将图形消息作为用户进程进行处理,但是系统范围内的电源管理事件(如暂停/恢复)由内核模式驱动程序处理。

X Window系统受许多操作系统支持,包括Linux,Solaris和HP-UX。 它为OS提供了图形功能,并支持用户级别,系统级别和/或关键的待机,挂起和恢复。 在APM实施中,X服务器控制电源管理事件。 在ACPI实现中,X Window系统将图形消息作为用户进程进行处理,但是系统范围内的电源管理事件(如暂停/恢复)由内核模式驱动程序处理。

Window Manager

Linux上的窗口管理器是用户级进程,可提供图形用户界面并提供可靠的操作系统电源管理。 在Linux中受支持的多个窗口管理器中,有两个流行的窗口管理器GNOME和KDE。 在GNOME中,电源管理使用硬件抽象层(HAL)并涉及在称为DBUS的开源消息传递接口上构建的开源平台电源管理,而KDE3提供名为KPowersave的专有电源管理解决方案。

英特尔嵌入式显卡驱动程序

在英特尔嵌入式图形驱动程序(IEGD)电源管理中,内核模式驱动程序可帮助Linux内核管理电源。它还负责图形设备的初始化和资源分配。为了让您清楚地了解电源事件的流程,以下是“挂起至RAM”示例的主要部分。

当平台中发生电源管理事件时(例如,当按下按钮或触发窗口管理器选项时,就会将挂起RAM启动),并通知操作系统该事件。通常,Linux操作系统采用协议在软件组件和Linux内核之间传递事件。使用此类协议,操作系统(通常通过窗口管理器)命令内核进入低功耗状态,这时Linux内核通过通知X-Server驱动程序来启动挂起过程。 进入低功耗状态之前,X显示屏必须切换到控制台模式。通过在Linux内核中实现ACPI,此切换由X-Server进行 IEGD进程保存图形状态并注册信息时,驱动程序将调用“离开虚拟终端”功能。然后,Linux内核冻结所有用户进程,包括X Window进程。现在内核准备好检查哪些设备已准备好进行挂起操作,并调用每个设备驱动程序的挂起功能(如果已实现),以便将设备时钟置于D3模式-有效地将所有设备置于较低功耗州。在这一点上,只有Linux内核代码正在运行,这会冻结除代码运行所在的处理器之外的所有其他活动处理器。

在执行内核侧挂起代码之后,将执行两种ACPI方法,即PTS和GTS,其结果对于Linux内核可能并不明显。但是,在实际进入睡眠之前,内核将内核唤醒代码的地址写入固定ACPI描述表(FADT)中的某个位置。这使内核能够在接收到还原命令后正确唤醒。 恢复命令通常是由用户事件产生的,例如按键,鼠标移动或按下电源按钮,这会打开系统电源。开启后,系统跳至BIOS起始地址,执行诸如设置内存控制器之类的内务处理任务,然后扫描ACPI状态寄存器以向RAM指示系统先前已挂起。如果支持视频重新发布,则在恢复操作期间,BIOS还将调用此函数以重新执行视频BIOS(vBIOS)代码,从而完全重启vBIOS。

然后,系统跳到先前编程的地址,如ACPI寄存器的状态和FADT所示。唤醒地址导致内核代码执行,从而使CPU返回保护模式并恢复寄存器状态。从这一点出发,其余的唤醒过程将遍历挂起过程的相反路径。调用ACPI WAK方法,恢复所有驱动程序,并重新启动用户空间。如果正在运行,则X服务器驱动程序将调用Enter虚拟终端功能,并且IEGD将恢复图形设备状态和注册信息。保存控制台模式后,X服务器驱动程序重新进入GUI,从而成功完成唤醒。

Ibid

Last updated