1.各种suspend状态及其对应关系和执行动作:
suspend各状态宏 | 宏值 | pm_labels /sys/power/state | mem_sleep_labels /sys/power/mem_sleep | 各状态待机动作 |
PM_SUSPEND_ON | 0 | |||
PM_SUSPEND_TO_IDLE | 1 | freeze | s2idlbe | 1.停止用户空间程序运行 2.所有外设备设置低功耗状态 |
PM_SUSPEND_STANDBY | 2 | standby | shallow | 3.disable非唤醒和被触发的中断 4.disable非引导CUP 5.执行sys级别待机 |
PM_SUSPEND_MEM | 3 | mem | deep | 6.memory供电模式调整 |
PM_SUSPEND_MAX | 4 | disk | disk | 7.保存系统快照写入磁盘 8.memory掉电 |
2.suspend流程图(主要流程)
suspend过程主要分为5个阶段:suspend_freeze -> suspend_prepare -> suspend_suspend -> suspend_late -> suspend_noirq ,5各阶段顺序递进执行;后4个阶段主要是设备的待机过程,每个阶段都有对应的待机函数。
a.suspend_freeze:主要在于冻结用户和内核进程;
b.suspend_prepare:调用各设备prepare函数,为设备执行suspend函数进入supend函数做准备;
c. suspend_suspend:调用各设备suspend函数使设备进入suspend状态;
d.suspend_late:在suspend函数后执行,主要调用各设备suspend_late函数
e.suspend_noirq:该阶段时会关所有非唤醒中断,然后调用各设备的suspend_noirq函数。