linux的电源管理架构

linux的电源管理架构

ID:14503552

大小:30.71 KB

页数:16页

时间:2018-07-29

linux的电源管理架构_第1页
linux的电源管理架构_第2页
linux的电源管理架构_第3页
linux的电源管理架构_第4页
linux的电源管理架构_第5页
资源描述:

《linux的电源管理架构》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux的电源管理架构Linux的源代码里,大部分都属于设备驱动程序的代码,因此,大多数电源管理(PM)的代码也是存在于驱动程序当中。很多驱动程序可能只做了少量的工作,另外一些,例如使用电池供电的硬件平台(移动电话等)则会在电源管理上做了大量的工作。这份文档对驱动程序如何与系统的电源管理部分交互做了一个大概的描述,尤其是关联到驱动程序核心中的模型和接口的共享,建议从事驱动程序相关领域的人通过本文档可以了解相关的背景知识。设备电源管理的两种模型===================================驱动程序可以使用其中一种模型来使设备进入低功耗状

2、态:1.系统睡眠模型:驱动程序作为一部分,跟随系统级别的低功耗状态,就像”suspend”(也叫做”suspend-to-RAM”),或者对于有硬盘的系统,可以进入”hibernation”(也叫做”suspend-to-disk”)。这种情况下,驱动程序,总线,设备类驱动一起,通过各种特定于设备的suspend和resume方法,清晰地关闭硬件设备和各个软件子系统,然后在数据不被丢失的情况下重新激活硬件设备。有些驱动程序可以管理硬件的唤醒事件,这些事件可以让系统离开低功耗状态。这一特性可以通过相应的/sys/devices/…/power/wakeup文件来

3、开启和关闭(对于Ethernet驱动程序,ethtool通过ioctl接口达到同样的目的);使能该功能可能会导致额外的功耗,但他让整个系统有更多的机会进入低功耗状态。2.Runtime电源管理模型:这种模型允许设备在系统运行阶段进入低功耗状态,原则上,他可以独立于其他的电源管理活动。不过,通常设备之间不能单独进行控制(例如,父设备不能进入suspend,除非他的所有子设备已经进入suspend状态)。此外,依据不同的总线类型,可能必须做出一些特别的操作来达到目的。如果设备在系统运行阶段进入了低功耗状态,在系统级别的电源状态迁移时(suspend或hiberna

4、tion)就必须做出特别的处理。正因为这个原因,不仅仅设备驱动程序本身,相应的子系统(bustype,devicetype,deviceclass)驱动程序和电源管理核心也会被卷入到rumtime电源管理的工作中来。比如当系统睡眠时,以上的各模块必须互相合作来实现各种多样的suspend和resume方法,以便让硬件进入低功耗状态,唤醒后继续提供服务而不丢失数据。对于低功耗状态的定义,我们没有太多可以说的,因为他们通常特定于系统,甚至特定于某个设备。如果在系统运行状态,足够多的设备进入了低功耗状态,这时的效果其实和进入了系统级别的低功耗状态非常相像。这样一些驱

5、动程序可以利用rumtime电源管理让系统进入一种类似深度省电的状态。大多数进入suspend状态的设备会停止所有的I/O操作:不会有DMA或者IRQ请求(需要唤醒系统的除外),不会有数据的读写,不再接受上层驱动的请求。这对于不同的总线和平台会有不同的要求。关于硬件唤醒事件的一些例子:由RTC发起的闹钟,网络数据包的到达,键盘或者鼠标的活动,媒体的插入或移除(PCMCIA,MMC/SD,USB,等等)。进入系统睡眠状态的接口===================================================内核为各个子系统(bustype,d

6、evicetype,deviceclass)和驱动程序提供了相应的编程接口,以便它们参与它们所关心的设备的电源管理。这些接口覆盖了系统级别的睡眠和runtime级别的管理。设备电源管理操作===================================================子系统和驱动程序的设备电源管理操作,都定义在dev_pm_ops结构中:123456789101112structdev_pm_ops{ int(*prepare)(structdevice*dev); void(*complete)(structdevice*dev); i

7、nt(*suspend)(structdevice*dev); int(*resume)(structdevice*dev); int(*freeze)(structdevice*dev); 13141516171819202122232425262728293031323334353637int(*thaw)(structdevice*dev); int(*poweroff)(structdevice*dev); int(*restore)(structdevice*dev); int(*suspend_noirq)(structdevice*dev); i

8、nt(*resume_noirq)(s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。