ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年8月5日 星期五

kernel, suspend - pm.c : interface of module and kernel

在 commit log 中找與 suspend config 有關的 commit。 git log --grep="suspend" 找到 arch 裡的 pm.c

pm.c 好像是專屬的 power manager module,雖然結構跟一般的 module 一樣,device, driver 兩個,用
init, exit 插入 kernel symbol list。

但是在 init 時,使用的是 suspend_set_ops
implement 在 ./kernel/power/suspend.c static struct platform_suspend_ops *suspend_ops; void suspend_set_ops(struct platform_suspend_ops *ops) { mutex_lock(&pm_mutex); suspend_ops = ops; mutex_unlock(&pm_mutex); }
這個 structure 宣告在 include/linux/suspend.h struct platform_suspend_ops { int (*valid)(suspend_state_t state); int (*begin)(suspend_state_t state); int (*prepare)(void); int (*prepare_late)(void); int (*enter)(suspend_state_t state); void (*wake)(void); void (*finish)(void); void (*end)(void); void (*recover)(void); };
這個 suspend .c 很有趣,就是依照著 platform_suspend_ops 裡面的 function pointer,依照需要的時間來執行。 就是一個 kernel 的 interface 而已。

沒有留言:

標籤

網誌存檔