說明:
1. based on linux2.6.32, only for mem(sdr)
2. 有興趣請先參考閱讀: 電源管理方案apm和acpi比較.doc
linux系統的休眠與喚醒簡介.doc
4. 基於手上的乙個專案來討論,這裡只討論共性的地方
雖然linux支援三種省電模式:standby、suspend to ram、suspend to disk,但是在使用電池供電的手持裝置上,幾乎所有的方案都只支援str模式(也有同時支援standby模式的),因為std模式需要有交換分割槽的支援,但是像手機類的嵌入式裝置,他們普遍使用nand來儲存資料和**,而且其上使用的檔案系統yaffs一般都沒有劃分交換分割槽,所以手機類裝置上的linux都沒有支援std省電模式。
一、專案power相關的配置
目前我手上的專案的linux電源管理方案配置如下,.config檔案的截圖,當然也可以通過make menuconfig使用圖形化來配置: #
# cpu power management #
# config_cpu_idle is not set
## power management options #
config_pm=y
# config_pm_debug is not set
config_pm_sleep=y
config_suspend=y
config_suspend_freezer=y
config_has_wakelock=y
config_has_earlysuspend=y
config_wakelock=y
config_wakelock_stat=y
config_user_wakelock=y
config_earlysuspend=y
# config_no_user_space_screen_access_control is not set
# config_console_earlysuspend is not set
config_fb_earlysuspend=y
# config_apm_emulation is not set
# config_pm_runtime is not set
config_arch_suspend_possible=y
config_net=y
上面的配置對應下圖中的下半部分圖形化配置。。。,看來是直接在kconfig檔案中刪除了配置std模式的選項。
# pwd
/sys/power
# ls
state wake_lock wake_unlock wait_for_fb_sleep wait_for_fb_wake
# cat state
mem如果配置了巨集config_pm_debug,那麼在power目錄下會多出乙個pm_test檔案,cat pm_test後,列出的測試選項有:[none] core processors platform devices freezer。關於這個test模式的使用,可以參考kernel文件:/kernel/documentation/power/basic-pm-debugging.txt
這個文件我也有詳細的閱讀和分析。
二、sys/power和相關屬性檔案建立
kernel/kernel/power/main.c
static int __init pm_init(void)
core_initcall(pm_init); //
看的出來,該函式是很早就被呼叫,
initcall
等級為1
static struct attribute_group attr_group = ;
struct attribute_group ;
// 屬性檔案都是以最基本得屬性結構
struct attribute
來建立的
static struct attribute * g = ;
#ifdef config_pm_sleep
#ifdef config_pm_debug
power_attr(pm_test);
#endif
#endif
power_attr(state);
#ifdef config_pm_trace
power_attr(pm_trace);
#endif
#ifdef config_user_wakelock
power_attr(wake_lock);
power_attr(wake_unlock);
#endif
#define power_attr(_name) /
static struct kobj_attribute _name##_attr = , /
.show = _name##_show, /
.store = _name##_store, / }
// 而這些被封裝過的屬性結構體,將來會使用
kobject
的ktype.sysfs_ops->show(store)
這兩個通用函式通過
container_of()
巨集找到實際的屬性結構體中的
show
和store
函式來呼叫。
關於更多sysfs的內容,請檢視其他關於這部分內容的詳細解析文件。
標準linu休眠和喚醒機制分析 一
說明 1.based on linux2.6.32,only for mem sdr 2.有興趣請先參考閱讀 電源管理方案apm和acpi比較.doc linux系統的休眠與喚醒簡介.doc 4.基於手上的乙個專案來討論,這裡只討論共性的地方 雖然linux支援三種省電模式 standby susp...
標準linu休眠和喚醒機制分析 一
說明 1.based on linux2.6.32,only for mem sdr 2.有興趣請先參考閱讀 電源管理方案 apm和 acpi 比較.doc linux 系統的休眠與喚醒簡介 doc 3.本文先研究標準 linux 的休眠與喚醒,android 對這部分的增改在另一篇文章中討論 4....
標準linu休眠和喚醒機制分析 一
說明 1.based on linux2.6.32,only for mem sdr 2.有興趣請先參考閱讀 電源管理方案apm和acpi比較.doc linux系統的休眠與喚醒簡介.doc 4.基於手上的乙個專案來討論,這裡只討論共性的地方 雖然linux支援三種省電模式 standby susp...