摘自 : https://blog.csdn.net/weixin_44239151/article/details/109032781
Autosleep原理
-
当系统没有任何事情做的时候,就尝试suspend。
-
当系统中没有wakeup event事件发生的时候,就可以尝试suspend,需要wakeup event framework机制支持。
-
autosleep功能需要在kernel config中开启CONFIG_PM_AUTOSLEEP=y。
-
通过写"mem, disk, standby, freeze"到/sys/power/autosleep可以开启autosleep。
-
通过写"off"到/sys/power/autosleep就可以关闭autosleep。
流程分析
A: 通过执行"echo mem > /sys/power/autosleep"此命令,系统就会在没有事情可做的时候,选择执行suspend的流程。
static ssize_t autosleep_store(struct kobject *kobj,
struct kobj_attribute *attr,
const char *buf, size_t n)
{
suspend_state_t state = decode_state(buf, n);
int error;
if (state == PM_SUSPEND_ON
&& strcmp(buf, "off") && strcmp(buf, "off\n"))
return