2012-10-19 47 views
2

我觀察到整個設備拓撲結構基於Buses --> Device + Driver。總線上提供了linux (suspend + resume)提供的電源管理。設備驅動程序中還有類似的功能。Linux中的電源管理框架

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); 

    *** } 

那麼這是如何實現的?

+0

你想知道什麼樣的存在?內核中如何實現電源管理? – shinymetal

+0

謝謝昨天晚上在閱讀文檔時得到了答案。 – shingaridavesh

回答

1

我搜索了很多,終於得到了我的文檔答案:

爲了確保橋樑和類似的鏈接需要跟一個設備都可以當設備被暫停或恢復,設備樹走在自下而上的順序暫停設備。自上而下的順序用於恢復這些設備。

設備樹的排序由設備註冊的順序定義:子設備永遠不會在其父設備之前註冊,探測或恢復;並且不能在該父母之後被移除或暫停。

策略是設備樹應該匹配硬件總線拓撲。

而對於總線和設備掛起和恢復回調:

所有階段使用總線,類型或類回調(也就是,在dev亡> BUS->時定義的方法,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的回調)將會是使用(如果需要,這允許設備類型覆蓋由總線類型或類提供的回調)。