前言
这篇博客来聊一聊Linux系统的休眠与唤醒。
嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦!
目录
- 前言
- 1. 休眠
- 1.1 休眠的几种状态
- 1.2 查看节点所处的状态
- 1.3 休眠唤醒次数查看
- 2. 唤醒
- 3. 问题
- 参考资料
1. 休眠
1.1 休眠的几种状态
系统是可以休眠的,实际是保存系统上下文然后挂起(suspend)。
Linux可以通过终端得知内核的休眠方式:
cat /sys/power/state
可以看到,在开发板的命令行运行的结果发现我们的linux内核支持freeze、standby、mem三个模式。
Linux的休眠方式有以下四种:
freeze: 冻结I/O设备,将它们置于低功耗状态,使处理器进入空闲状态,唤醒最快,耗电比其它standby, mem, disk方式高
standby:除了冻结I/O设备外,还会暂停系统,唤醒较快,耗电比其它 mem, disk方式高
mem: 将运行状态数据存到内存,并关闭外设,进入等待模式,唤醒较慢,耗电比disk方式高
disk: 将运行状态数据存到硬盘,然后关机,唤醒最慢
我们可以通过echo指令让linux系统进入置顶的休眠模式。
echo standby > /sys/power/state
1.2 查看节点所处的状态
查看节点/sys/kernel/debug/wakeup_sources
可以打印出系统的锁并可以但看到其当前所处的状态:
1.3 休眠唤醒次数查看
节点/sys/kernel/debug/suspend_stats
查看之前的休眠状态,会总结休眠唤醒成功多少次,失败多少次,在哪一步失败
cat /sys/kernel/debug/suspend_stats
2. 唤醒
当我们休眠时,如果想唤醒,则需要添加中断唤醒源,使得在休眠时,这些中断是设为开启的,当有中断来,则会退出唤醒,常见的中断源有按键,USB等.
要实现这个效果,首先需要有一个中断程序,比如按键驱动程序,此处博主直接用之前学imx6ull的按键驱动程序来作为案例展示一下
首先需要进入lib/modules/4.1.15
中,然后注册其中已准备好的按键驱动并加入&
让其在后台运行
depmod
modprobe key.ko
./keyApp /dev/key &
然后我们让系统进入休眠状态。
此时我们再按下开发板上对应的按键即可退出休眠状态。
3. 问题
/sys/kernel/debug/下没有任何文件的
参考资料
[1] Linux电源管理-休眠与唤醒