android-电源管

上传人:ji****en 文档编号:107700558 上传时间:2019-10-20 格式:PDF 页数:23 大小:280.33KB
返回 下载 相关 举报
android-电源管_第1页
第1页 / 共23页
android-电源管_第2页
第2页 / 共23页
android-电源管_第3页
第3页 / 共23页
android-电源管_第4页
第4页 / 共23页
android-电源管_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《android-电源管》由会员分享,可在线阅读,更多相关《android-电源管(23页珍藏版)》请在金锄头文库上搜索。

1、 Android 的电源管理 韩 超 Android 技术 第一部分 Android 电源管理介绍 第二部分 Android 内核的电源管理 第三部分 Android 用户空间的电源管理 第四部分 各部件电源管理的策略 Android 的电源管理 第一部分 Android 电源管理介绍 Android 的电源管理是结合了 Linux 内核和 用户空间控制。 一个核心的假设是:如果没有人使 用, CPU 和显示是不消耗能源的。 wake_lock 是 Android 电源管理机制的核心。 在用户空间使用 wake_lock 可以阻止系统进入 睡眠模式。在没有活动的 wake_lock 的时候,

2、Android 才可以关闭显示和 CPU 。 第一部分 Android 电源管理介绍 第一部分 Android 电源管理介绍 Android 的电源管理是结合了 Linux 内核和 用户空间控制。 一个核心的假设是:如果没有人使 用, CPU 和显示是不消耗能源的。 wake_lock 是 Android 电源管理机制的核心。 在用户空间使用 wake_lock 可以阻止系统进入 睡眠模式。在没有活动的 wake_lock 的时候, Android 才可以关闭显示和 CPU 。 第一部分 Android 电源管理介绍 Wakelock 的类型: ACQUIRE_CAUSES_WAKEUP A

3、wake lock wont actually wake the device with the exception of this one. This wake lock will return Android to an active (on) screen for something like important popup notifications or an alarm. FULL_WAKE_LOCK This makes sure the screen and keyboard remain on. ON_AFTER_RELEASE This is the same as FUL

4、L_WAKE_LOCK, plus it makes sure the screen stays on as though some activity just happened on release of the lock (resets screen blanking timer). 第二部分 wake_lock 机制 PARTIAL_WAKE_LOCK Makes sure the CPU doesnt sleep, but the screen can be blanked. Used for playing audio, for example. SCREEN_BRIGHT_WAKE

5、_LOCK Screen must remain on at full brightness, but the keyboard back-light can be turned off. Used for something like video playback. SCREEN_DIM_WAKE_LOCK Same as SCREEN_BRIGHT_WAKE_LOCK except the screen can be dimmed but must stay on. 第二部分 Android 内核的电源管理 suspend Suspend Status early_suspend resu

6、me late_resume Normal Runing IDLE Status wake_lock wake_lock Android PM INT 第二部分 Android 内核的电源管理 wakelock 是 Android 提供的一种特 殊的机制,用于请求 CPU 资源。当持有 wakelock 之后,可以阻止系统进入暂停或其 它低功耗状态。 wakelock 是 wakelock 的核心实现。 userwakelock 是在用户空间使用 wakelock 的接口实现。 earlysuspend 是 earlysuspend 机制的核心实 现。 consoleearlysuspend

7、和 fbearlysuspend 是 console 和 framebuffer 在处理 earlysuspend 时的 具体实现。 第二部分 Android 内核的电源管理 wakelock 和 earlysuspend 的头文件: include/linux/wakelock.h include/linux/earlysuspend.h wakelock 和 earlysuspend 的实现文件: kernel/power/wakelock.c kernel/power/userwakelock.c kernel/power/earlysuspend.c kernel/power/cons

8、oleearlysuspend.c kernel/power/fbearlysuspend.c 第二部分 Android 内核的电源管理 wakelock.c 是 wakelock 的核心实现。 userwakelock.c 是在用户空间使用 wakelock 的接口实现。 earlysuspend.c 是 earlysuspend 机制的核心实 现。 consoleearlysuspend.c 和 fbearlysuspend.c 是 console 和 framebuffer 在处理 earlysuspend 时的 具体实现。 第二部分 Android 内核的电源管理 wakelock 的

9、接口定义的常量: enum WAKE_LOCK_SUSPEND, /* 阻止挂起*/ WAKE_LOCK_IDLE, /* 阻止低能耗的 Idel */ WAKE_LOCK_TYPE_COUNT ; WAKE_LOCK_SUSPEND 用于阻止系统进入 suspend 状态( CPU 挂起),一般是深度休 眠, Android 提供了通用实 现。 WAKE_LOCK_IDLE 用于阻止系统进入 idle 状态( CPU 低功耗运转)。 第二部分 Android 内核的电源管理 内核空间中的 wakelock 的接口: void wake_lock_init(struct wake_lock *

10、lock, int type, const char *name); void wake_lock_destroy(struct wake_lock *lock); void wake_lock(struct wake_lock *lock); void wake_lock_timeout(struct wake_lock *lock, long timeout); void wake_unlock(struct wake_lock *lock); wake_lock_init 对应 wake_lock_destroy 。用于创建和销毁一个 wakelock 。 wake_lock 和 wak

11、e_unlock 对应 ,用于持有和释放一个 wakelock 。 wake_unlock 持有一个带超时机制 的 wake_lock ,会在超时后自动 unlock 。 第二部分 Android 内核的电源管理 wakelock 在用户空间的接口使用 Sys 文件系统中的以下 2 个文件: /sys/power/wake_lock /sys/power/wake_unlock 通过对其的写入,读出操作,完成持有, 释放等操作。 第二部分 Android 内核的电源管理 earlysuspend 其实是一个完全挂起前 中间状态。通过在 linux 标准的 suspend 前 , resume

12、后这两个环节分别插入 earlysuspend 。 具有 earlysuspend 之后,原有的挂起 操作并不直接将 kernel 挂起。而是进入 earlysuspend ,直到最后一个 wakelock 被释放,再进入原 kernel 的挂起流 程。 lateresume 来实现原本 resume 之 后的动作。 第二部分 Android 内核的电源管理 内核空间中的 earlysuspend 的接口: struct early_suspend #ifdef CONFIG_HAS_EARLYSUSPEND struct list_head link; int level; void (*s

13、uspend)(struct early_suspend *h); void (*resume)(struct early_suspend *h); #endif ; #ifdef CONFIG_HAS_EARLYSUSPEND void register_early_suspend(struct early_suspend *handler); void unregister_early_suspend(struct early_suspend *handler); #else #define register_early_suspend(handler) do while (0) #def

14、ine unregister_early_suspend(handler) do while (0) #endif 第二部分 Android 内核的电源管理 consoleearlysuspend 和 fbearlysuspend 实现了 console 和 framebuffer 处理 early_suspend 和 late_resume 时的处理函数。并暴露了用户 空间接口,以和 Android 系统框架进行交互 ,判断是否需要继续绘制屏幕。 第三部分 Android 用户空间的电源管理 Android 电源管理的用户空间核心部分 ,提供机制给系统的各个部分(包括本地层和 JAVA 层)

15、。主要提供接口是: 获取和释放 wakelock 设置屏幕的状态 设置活动的超时长度 第二部分 Android 用户空间的电源管理 本地层的头文件和库: hardware_legacy/include/hardware_legacy/ power.h hardware_legacy/power/power.c JNI 部分: framebases/base/core/jni/android_os_Powe r.cpp JAVA 部分: framebases/base/core/java/android/os/Pow er.java 电源管理的本地部分的接口: / 唤醒锁 int acquire

16、_wake_lock(int lock, const char* id); int release_wake_lock(const char* id); / 屏幕状态 int set_screen_state(int on); / 超时设置 int set_last_user_activity_timeout(int64_t delay); 第二部分 Android 用户空间的电源管理 可能需要特定电源管理的部分 用户输入系统( eventhub ): 具有活动的 event 设备,可能阻止系统进 入低功耗模式。 WIFI : 不同的睡眠策略,当系统进入 standby , WIFI 设备继续工作的状态,结合 rfkill 使 用。 蓝牙 由于硬件特性,通常会组织系统进入低功 耗模式,结合 rfkill 使用。 第四部分 各部件电源管理的策略 电话部分 系统进入 Standby 的时候, RIL HAL 需 要处理电话部分的功耗,但必须保留来电和短 信的接收。飞行模式需要特殊处理。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号