基于linux内核驱动的Android电源管理浅谈.docVIP

基于linux内核驱动的Android电源管理浅谈.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于linux内核驱动的Android电源管理浅谈

如何有效地管理嵌入式系统,尤其是移动终端的电源功耗,通过降低设备电压、频率,可以减少能量的消耗,达到省电的目的,电源管理历来为重要的研究课题之一。动态电源管理DPM(Dynamic Power Management)技术提供一种操作系统级别的电源管理能力,包含CPU工作频率和电压,外部总线时钟频率,外部设备时钟、电源等方面的动态调节、管理功能。通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地、低延迟地调整,从而实现更精细、更智能的电源管理。电源管理实际上是一个系统工程,从应用程序到内核框架,再到设备驱动和硬件设备,都要参与进来,才能达到电源管理的最优化。 硬件层: 硬件设备CMOS电路的总功耗是活动功耗与静态功耗之和。当电路工作或逻辑状态转换时会产生活动功耗——CL*V2dd*f,未发生转换时晶体管漏电流会造成静态功耗——Vdd*Iq。其消耗功率如下: P=r*CL*V2dd*f+Vdd*Iq 其中r为开关活动率(Switching Activity),CL为负载电容, Vdd为电源电压,f为工作频率,Iq为漏电流。在操作系统级的电源管理设计实现中,重点是活动功耗。我们从中可以得出几种管理活动功耗的方法: 1.电压、时钟调节。通过降低电压和时钟来减少活动功耗和静态功耗。2.时钟选通。停止电路时钟,即设f为0,将时钟从不用的电路模块断开,减少活动功耗。许多CPU都有“闲置”或“停止”指令,一些处理器还可通过门控关闭非CPU时钟模块,如高速缓存、DMA外设等。3.电源供应选通。断开电路中不使用的模块电源供应。这种方法需要考虑重新恢复该模块的代价。 断开不使用的模块的时钟和电源供应可以减少电源消耗,但要能够正确预测硬件模块的空闲时期。因为重新使能硬件模块时钟和电源会造成一定延迟,不正确的预测将导致性能下降。 从上分析可以知道降低电压对功耗的贡献是2次方的;降低时钟也可降低功耗,但它同时也降低性能,延长同一任务的执行时间。所以,选择满足性能所需的最低时钟频率,在时钟频率和各种系统部件运行电压要求范围内,设定最低的电源电压,将会大量减少系统功耗。 通过调节电压、频率来减少系统活动功耗的动态电源管理需要硬件支持。SoC系统一般有多个执行单元,如PM(电源管理)模块、OSC(片上晶振)模块、PLL(锁相环)模块、CPU核以及CPU核中的数据缓存和指令缓存,其他模块统称为外围模块(例如LCD控制器、UART、SDRAM控制器等)。CPU高频时钟主要由PLL提供,同时PLL也为外围模块和SoC总线提供其他频率时钟。一般SoC系统都有一些分频器和乘法器可以控制这些时钟。PM模块主要是管理系统的电源供应状态。一般有自己的低频、高准确度晶振,用以维持一个RTC时钟、RTC定时器和中断控制单元。其中中断控制单元使RTC定时器和外部设备能够唤醒挂起的SoC系统,数字相控锁环(DPLL)将外频或晶振输入转化为高频,供给CPU核以及其他片上设备。操作DPLL控制寄存器就可以设置DPLL输出时钟,控制MPU和DSP、MMU单元的运行频率,MPU、DSP外设时钟,以及LCD刷新时钟。 内核层: Linux架构下实现电源管理内核模块需要实现一个应用层和操作系统的接口,一个为多个硬件平台提供通用电源管理逻辑控制框架的硬件无关层,以及一个管理特定硬件电源控制接口的平台相关电源控制层。其代码路径文件在: /kernel/power/main.c? /kernel/power/earlysuspend.c /kernel/power/wakelock.c /kernel/power/ fbearlysuspend.c /kernel/power/ consoleearlysuspend.c request_suspend_state()函数是 android 相对标准 linux内核改动的地方,它实现在earlysuspend.c中。在标准linux内核中, 用户通过 sys写入“mem”和“standby”时, 会直接调用enter_state()进入suspend模式,但在 android中则会调用request_suspend_state()函数进入early suspend状态。该机制作用在关闭显示的时候,一些和显示有关的设备,比如LCD背光,重力感应器,触摸屏,这些设备都应该关掉,?但是系统可能还是在运行状态(这时候还有wake lock)进行任务的处理,例如在扫描SD卡上的文件,后台音乐/FM播放,文件传输/下载等。在嵌入式设备中,?背光是一个很大的电源消耗,所以android加入这样一种机制。 接着分析内核代码具体实现流程,对于需要注册结构early_

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档