电源管理(1)-基本概念
1. linux的电源状态
- on >>> S0 - working
- standby >>> S1 - cpu and ram are powered but not executed
- suspend to ram >>> S3 - ram is powerd and the running content is saved to ram
- suspend to disk >>> S4 - all content is saved to disk and power down
S3 挂起到内存,就是常说的待机。计算机将目前的运行状态等数据存放在内存,关闭硬盘、外设等设备,进入等待状态。此时内存仍然需要电力维持其数据,但整机耗电很少。恢复时计算机从内存读出数据,回到挂起前的状态,恢复速度较快。对DDR的耗电情况进行优化是S3性能的关键,大多数手持设备都是用S3待机。
S4 挂起到硬盘,就是常说的休眠。把运行状态等数据存放在硬盘上某个文件或者某个特定的区域,关闭硬盘、外设等设备,进入关机状态。此时计算机完全关闭,不耗电。恢复时计算机从休眠文件/分区中读出数据,回到休眠前的状态,恢复速度较慢。电子书项目中,见过一款索尼的电子书,没有定义关机状态,只定义了S4,从而提高开机速度。
2. 电源管理接口
linux把电源接口框架都纳入了设备模型中,通过power_kobj对象的属性文件提供操作电源策略的接口。
3. 电源状态的切换
linux的世界里,一切皆文件。通过state文件写入不同的值来让系统进入不同的电源状态,接收状态值的函数是state_store.
autosleep是Android内核为了跟主线内核兼容引入的,切换电源状态的入口函数是pm_suspend。针对嵌入式系统,s3是一种常见的节电状态,俗称待机。待机可以粗略分为5个阶段。
- 冻结用户态进程
- 设备挂起
- 针对soc相应的节电操作和为唤醒做准备
- smp中非启动cpu的挂起
- cpu core的挂起