电源管理结构
kernel/power/:该目录下实现了系统的电源管理框架
Drivers/power/:该目录实现的是设备电源管理的基础框架,为驱动提供了电源管理接口,所有的其他设备驱动都依赖于这个框架
android定义了几种低功耗状态:
earlysuspend让某些设备选择进入某中功耗低的状态
suspend是除了电源管理意外的其他外围模块和CPU均不工作
hibernation所有内存镜像都被写入磁盘,然后系统关机,重启后系统能恢复到关机之前的状态
android电源管理机制
android的电源管理机制主要是通过锁和定时器来切换系统的状态,框架层:java中通过JNI访问C++函数->HAL->sysfs文件系统->调用内核提供函数实现
main.c(pm_init)初始化函数完成,sys/power/* 设备节点生成
分析Framework层
frameworks/base/core/java/android/os/PowerManager.java
frameworks/base/service/java/com/android/server/power/PowerManagerService.java
1.文件PowerManager
提供给应用层调用,核心实现在文件PowerManagerService中
goToSleep强制设备进入sleep状态,wakeUp强制设备进入wakeUp状态
发生user activity事件,电源设备会切断到Full on的状态,并同时Reset screen off time
2.PowerManagerService服务是Android系统的上层的电源管理服务,主要负责系统待机,屏幕背光,按键背光以及用户事件的处理
JNI层架构分析
文件frameworks/base/core/jni/android_os_Power实现
与linux kernel的交互是通过文件hardware/libhardware/power/power.c实现,Android和kernel的交互主要通过sys文件的方式实现
kernel层架构分析
drivers/android/power.c,drivers/base/main.c,drivers/base/power/suspend.c,drivers/base/power/resume.c
kernel/power/main.c,kernel/power/wakelock.c,kernel/power/unwakelock.c,kernel/power/earlysuspend.c