echo mem > /sys/power/sate
/kernel/power/main.c
state_store()
request_suspend_state(state)
queue_work(suspend_work_queue, &early_suspend_work)
early_suspend_work
early_suspend
会调用所有注册的early_suspend函数
wake_unlock(&main_wake_lock)
删除当前节点(main_wake_lock),判断has_lock=0,如果为0,则调用suspend_work,不为0,则开启timer
suspend_work_queue
suspend
pm_suspend
enter_state(state)
enter_state(state)
sys_sync 同步文件系统
suspend_prepare冻结进程
pm_prepare_console 分配一个终端来输出log
usermodehelper_disable 关闭用户态的helper进程
suspend_freeze_processes 冻结进程
try_to_freeze_tasks 判断释放有wake_lock,若有则冻结失败
suspend_devices_and_enter 让外设进入休,如果失败,会recover
suspend_ops->prepare()
disable_nonboot_cpus()
suspend_enter(state) 关闭中断
arch_suspend_disable_irqs()
device_power_down()
常用命令
cat /sys/kernel/debug/wakeup_sources active_since
cat /sys/power/state
cat /sys/power/wake_lock
echo 1 > /sys/power/pm_print_times 打印休眠时间