电源管理(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个阶段。

  1. 冻结用户态进程
  2. 设备挂起
  3. 针对soc相应的节电操作和为唤醒做准备
  4. smp中非启动cpu的挂起
  5. cpu core的挂起