【问题标题】:Power Management Framework in LinuxLinux 中的电源管理框架
【发布时间】: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);

    *** }

那么这是如何实现的呢?

【问题讨论】:

  • 您想知道什么?电源管理在内核中是如何实现的?
  • 感谢昨天晚上阅读文档时得到的答复。

标签: linux linux-device-driver power-management


【解决方案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 的回调)(这允许设备类型在必要时覆盖总线类型或类提供的回调)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2013-02-20
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多