
休眠状态指的是一种系统低功耗运行状态。在此状态下,各种支持休眠模式的外围设备也都全部进入休眠模式,CPU 挂起,所有用户态应用程序和内核态进程全部被冻结,内存处于自刷新模式。系统处于休眠状态会屏蔽所有除唤醒之外的所有命令,直到系统被某种原因唤醒才会解除此种状态。

一、休眠方式
支持哪种休眠方式:



- 强制进入休眠(立刻进入休眠)

- 自动进入休眠(前提条件)

二、自动休眠唤醒
结合:wake_lock 一起使用
前提条件:CONFIG_PM_AUTOSLEEP
echo mem > /sys/power/autosleeap
节点 /sys/kernel/debug/wakeup_sources 打印出系统的锁, 并可以看到其当前所处的状态:

新增操作:

释放:

三、休眠唤醒次数查看
节点 /sys/kernel/debug/suspend_stats 查看之前休眠的状态,会总结休眠唤醒成功多少次,失败多少次及在哪一步失败 :

四、直接命令查看是否有活跃锁
c
awk '$6 != 0 {print $1" "$6}' /sys/kernel/debug/wakeup_sources1

五、wake_lock
wake_lock 是一种用于管理内核中的唤醒锁机制。它可以用来防止系统在某些操作期间进入低功耗状态(如挂起、休眠等)。
你的驱动模块当前在处理一个非常重要的事情,不允许休眠。(wake_lock)
cpp
static struct wake_lock my_wakelock;
// 初始化 wake_lock
wake_lock_init(&my_wakelock, WAKE_LOCK_SUSPEND, "my_wakelock");
// 使用 wake_lock
wake_lock(&my_wakelock);
// 完成后释放 wake_lock
wake_unlock(&my_wakelock);1
2
3
4
5
6
7
2
3
4
5
6
7
案例:(插入 USB,就不允许系统自动进入休眠)
目录:phy/rockchip/phy-rockchip-usb.c

释放休眠锁:

六、外设的休眠唤醒
pm:结构体
suspend:下电
resume:上电


