四极管:OAL电源管理(一)

2019-07-13 22:15发布

  四极管:OAL电源管理(一)   电源管理可以提高整个系统电源的效率,通常需要为系统的每一个设备都提供电源管理功能、 一、电源管理器 电源管理器用于管理设备的电源并提高整个Windows CE操作系统的效率,对于电源管理器,我们应该理解一下几点: (1)、电源管理可以用来减少目标设备的电源消耗并在系统处于复位、运行、空闲和挂起状态时维护和保护位于RAM中的文件系统。 (2)、电源管理器为设备能够智能地管理自身的电源提供了框架,并且在设备的电源状态与整个系统的电源状态之间提供了一种隔离机制,它允许当操作系统运行时关闭一些设备的电源,或者当操作系统的大部分被挂起时允许有些设备的电源处于打开状态。 (3)、电源管理器被实现为动态链接库Pm.dll,它并不限制平台的电源需求或设计。 (4)、在默认状态下,电源管理器被内建到操作系统映像中,但可以通过定义BSP_NOPM环境变量来移除,这将从操作系统映像中移去Pm.dll。 (5)、开发者可以定制自己的系统电源状态,如RunAC、RunDC、挂起等,这些状态不是预先定义的,也没有必要是线性排列的,开发者可以在系统配置中将电源状态名作为注册键,系统对可以定义多少个系统电源状态没有限制。 (6)、开发者要负责显式的定义设备电源状态与系统电源状态之间的映射。 (7)、设备电源状态时静止的、预先定义的,电源管理器将一个设备的状态传递给驱动程序,驱动程序负责负责将设备状态映射到设备并在物理设备上完成适当的状态转换。 物理设备没有必要支持所有必须支持所有的设备电源状态。所有设备都必须支持的设备电源状态是全开(Full On)状态D0,当一个驱动程序请求进入一个设备不支持的电源状态时,进入下一个支持的可用电源状态。如果一个设备不能唤醒系统,那么它应该关闭系统而不是让它停滞在挂起(Suspend)状态。 当一个设备驱动程序被加载时,它应该使这个设备进入全开(Full On)状态D0,在一个驱动程序被卸载时,如果可能则应该使这个设备进入关闭(Off)状态D4。   设备电源状态 设备电源状态 注册键 描述 Full On D0 设备被打开和运行的状态,设备接收来自系统的全部电量并为用户提供全部的功能 Low On D1 设备以比D0更低的电量或者性能工作的全功能状态。D1可以被应用于正在被使用的设备,这时的设备不是工作在最佳的性能状态 Suspend D2 设备处于被部分供电并在当设备被请求时可以唤醒自己的状态 Sleep D3 设备被部分供电并在需要时能以自己的电量去唤醒系统电源的状态,D3所消耗的电量必须小于或者等于D2所消耗的电量 Off D4 设备没有被供电的状态,处于D4状态的设备不应该消耗明显的电量 (8)、随电源管理系统存在一组内核IOCTL,电源管理器使用这些IOCTL来操作系统的电源状态。这些IOCTL包括以下几类: IOCTL_HAL_ENABLE_WAKE; IOCTL_HAL_DISABLE_WAKE IOCTL_POWER_SET; IOCTL_POWER_GET; IOCTL_POWER_QUERY; IOCTL_POWER_CAPABILITIES IOCTL_POWER_SEQUENCE; IOCTL_PEGISTER_POWER_RELATIONSHIP 二、系统电源状态到设备电源状态的映射 开发者可以在系统配置中将电源状态名定义为注册键。系统电源状态到设备电源状态的映射被列为注册表里每一个电源状态名的值,注册表定义如下: [HKLMSYSTEMCurrentControlSetControlPowerStateName] Flags:REG_DWORD:xxx (Default):REG_DWORD:Dx DeviceName:REG_DWORD:Dx 各个值的意义如下表所示: 注册表值 描述 Name 定义系统的电源状态名 Flags 表示POWER_STATE_XXX值的掩码,在Pm.h中定义;或者是OEM定义的电源状态标志 (Default) 所有设备的默认电源设置。当没有定义默认设置时,电源管理器假定设备的默认电源状态为D0 Dx 设备电源状态,设置为D0、D1、D2、D3或者D4.这是在系统电源状态Name时设备运行的状态 DeviceName 可选,定义除(Default)之外有特定设备电源状态需求的设备,如COM1:dword:3 具体驱动实现举例下一节将会做介绍.