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 中的电源管理框架的主要内容,如果未能解决你的问题,请参考以下文章

Linux 中的电源管理通知

Linux电源管理_wakelocks

Linux电源管理

Linux电源管理

Linux电源管理

[单片机框架][drivers层][bq25601] charger 电源管理