【FAQ】全志R系列休眠唤醒使用和框架介绍
-
【问题背景】
硬件:R系列芯片
软件:Tina【问题简述】
说明:该FAQ旨在记录休眠唤醒的基本框架。
【问题分析】
1.相关术语
2.简要概述
所谓的功耗管理通俗的讲就是省电,两个出发点:
能不用就不用-间歇供电和断电--->静态功耗。
必须用时少用-降低供电电压和频率--->动态功耗。
功耗管理可分为静态功耗管理与动态功耗管理,当前Linux下的功耗管理技术主要如下图所示。静态功耗管理通常指的是对待机情况下的功耗进行管理,它需要检测整个系统的工作状态。
动态功耗管理通常指的是对运行时的CPU或device的电压频率进行调整。
因此功耗管理会涉及包括供电(Power Supply)、充电(Charger)、时钟(Clock)、频率(Frequency)、电压(Voltage)、休眠/唤醒(Suspend/Resume)等方面。2.1配置
make kernel_menuconfig
[*] Suspend to RAM and standby Standby基础功能,配置会默认选上部分依赖。 [*] Wake lock 借鉴安卓锁机制,有锁就不能进入深度休眠。 [*] Scene lock 用于设置系统进入何种场景standby,如:normal,super,usb... [*] Early suspend 浅度休眠,配合wake_lock机制使用,一般用来关屏。 [*] Opportunistic sleep Autosleep机制。 [*]Power Management Debug Support 调试相关宏的开关。
2.2文件节点
配置好相应功能后进行编译,烧写到小机端会产生/sys/power目录,并在其下产生一些文件节点。
R18平台的文件节点如下图:
2.3框架流程
P表示platform,也即系统相关的处理,实现整个系统的休眠操作;
D表示device,表示设备相关的处理,实现设备相关的休眠操作,这部分在各设备驱动中实现。
可以看到suspend/resume大致流程:冻结所有进程/线程(除开当前线程) → 各设备驱动进行相关的状态保存、降频等操作 → 关闭非启动CPU(仅保留CPU0) → 进入P.enter → 开启所有CPU → 各驱动设备恢复状态 → 解冻进程/线程。
其中P.enter是最关键的操作,该函数不同的处理代表不同的standby模式。当然进入不同的standby,需要相关配套的硬件。AXP的作用是可以控制各路电源,没有AXP,就不能关闭CPU电源,相当于就不能进入Super standby。CPUS在CPU断电的情况下继续运行,在收到各种唤醒源之后,通过AXP将CPU以及其他各路电压恢复,让系统唤醒。
Super standby的必要条件是AXP,但是有CPUS可以扩展唤醒源。
由上面的分析可以简单的得出一个结论:休眠唤醒可以按照进程,设备,系统等分为不同的程度,而且是串行的,也就是说这条链中一旦有某个环节(如某个设备无法休眠或唤醒)出问题,那么整个系统就无法正常休眠或唤醒。
【使用介绍】
1.系统休眠
休眠操作就一条命令:
echo mem > /sys/power/state;
系统就会进入休眠。
现象:控制台打印“PM: Entering mem sleep”,然后控制台关闭。如下图:2.系统唤醒
通过触发中断的方式,唤醒系统。常用唤醒源有:
- 电源按键唤醒
- 其他按键唤醒
- Wifi唤醒
- 蓝牙唤醒
- Usb唤醒
- Sd卡唤醒
- 定时唤醒
- 自配置GPIO唤醒
目前Tina系统普遍支持的有按键、wifi、自配置GPIO。
现象:控制台打开,打印“PM: Finishing wakeup.”。 -
-
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号