Linux 中的电源管理框架
Posted
技术标签:
【中文标题】Linux 中的电源管理框架【英文标题】:Power Management Framework in Linux 【发布时间】:2012-10-19 04:50:22 【问题描述】:我观察到整个设备拓扑基于Buses --> Device + Driver
。 linux (suspend + resume)
提供的电源管理存在于总线中。设备驱动程序中也有类似的功能。
struct bus_type ***
int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev);
***
struct device_driver ***
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
***
那么这是如何实现的呢?
【问题讨论】:
您想知道什么?电源管理在内核中是如何实现的? 感谢昨天晚上阅读文档时得到的答复。 【参考方案1】:我搜索了很多,终于在文档中得到了答案:
为确保在设备暂停或恢复时需要与设备通信的网桥和类似链接可用,设备树按自下而上的顺序遍历以暂停设备。自上而下的顺序用于恢复这些设备。
设备树的顺序是由设备注册的顺序定义的:子设备永远不能在其父设备之前注册、探测或恢复;并且不能在该父级之后删除或暂停。
策略是设备树应该匹配硬件总线拓扑。
关于总线和设备挂起和恢复回调:
所有阶段都使用总线、类型或类回调(即在 dev->bus->pm、dev->type->pm 或 dev->class->pm 中定义的方法)。 这些回调是互斥的,因此如果设备类型提供了一个由其 pm 字段指向的 struct dev_pm_ops 对象(即同时定义了 dev->type 和 dev->type->pm),则包含在该对象中的回调(即 dev ->type->pm) 将被使用。否则,如果该类提供其 pm 字段指向的 struct dev_pm_ops 对象(即定义了 dev->class 和 dev->class->pm),则 PM 核心将使用来自该对象的回调(即 dev->上课->下午)。 最后,如果设备类型和类对象的 pm 字段均为 NULL(或那些对象不存在),则将使用总线提供的回调(即来自 dev->bus->pm 的回调)(这允许设备类型在必要时覆盖总线类型或类提供的回调)。
【讨论】:
以上是关于Linux 中的电源管理框架的主要内容,如果未能解决你的问题,请参考以下文章