thanks to the author:

http://huaqianlee.github.io/2015/05/30/Android/Android%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86%E6%9E%B6%E6%9E%84/

Android 电源管理架构

  对于移动设备,电源管理是相当重要的一部分,因为现在在公司主要负责电源管理部分,所以借用Google对其研究了一下,再结合自己的工作经验,准备接下来写一系列相关的文章。因为现在还研究得不够,所以最初的文章会不够深入。不过我会慢慢研究,然后写一些比较详细的解读。

高通的引导体系结构

boot
SBL- Second BootLoader

电源管理框图

  这里先借用网上一张老版本的图片,后面再自己绘制一张详细的框图补上来。
power

主要文件及路径

1
2
3
4
5
kernel\kernel\power\*
   arch\arm\match-xxx\pm.c
   driver\power\*
   system\core\charger\charger.c   - 关机充电信息,显示充电log
   上层文件太分散,待后期文件详解再一一列出

Android结构

  Android的电源管理主要通过锁和定时器来切换系统的状态(即三种低功耗状态),使系统功耗降到最低。 电源管理架构分为四大部分: APP,Framework,Hal,Kernel。

应用层(APP)

  应用层主要指应用程序及其他使用电源管理的service。

架构层(Framework)

  Framework层为APP提供API接口及协调电源的管理工作,主要包含:

1
2
3
4
5
PowerManager.java  // 提供给应用层调用
PowerManagerService.java  // 核心文件
com_android_server_PowerManagerService.cpp、
Power.java  // 提供底层的函数接口,与JNI交互
android_os_Power.cpp  //jni交互文件

  这一层的功能相对比较复杂,比如系统状态的切换,背光的调节及开关,Wake Lock的申请和释放等等,但这一层跟硬件平台无关。

Hal层

  Hal层为一个Power.c文件,该文件通过sysfs的方式与kernel进行通信。主要功能有申请wake_lock,释放wake_lock,设置屏幕状态等。所有对电源管理的调用应通过Android的PowerManager API来完成。

Kernel层

  Kernel层的电源管理方案实现主要包含三部分:

1
2
3
Kernel\power\:实现了系统电源管理框架机制
Arch\arm(or mips or powerpc)\mach-XXX\pm.c:实现对特定板的处理器电源管理
drivers\power:是设备电源管理的基础框架,为驱动提供了电源管理接口. 实现了针对所有设备的sysfs操作函数.

  android提供了三种低功耗状态:

1
2
3
earlysuspend //让某些设备选择进入某种功耗较低的状态,如LCD灭掉
suspend // 除电源模块以外的外围模块和CPU均不工作,只有内存保持自刷新的一个工作状态
hibernation// 所有内存镜像都被写入到磁盘中,然后系统关机,重启后系统将恢复到关机之前的状态

 

 

电源管理机制

  Android的电源管理主要通过锁和定时器来切换系统的状态(如上述三种低功耗状态),使系统功耗降到最低. 

实现流程

framework 

状态切换流程

state

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐