Linux中的电源管理框架

时间:2012-10-19 04:50:23

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

我发现整个设备拓扑基于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 个答案:

答案 0 :(得分: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)
。   最后,如果设备类型和类对象的pm字段都是NULL(或那些对象不存在),则总线提供的回调(即dev-> bus-> pm的回调)将是used(这允许设备类型覆盖由总线类型或类提供的回调,如果需要)。