功耗耗电主要模块:
CPUGPU
LCD
LCD背光
按键灯
设备节点调试
sys/devices/system/cpu/cpu1/online
sys/devices/system/cpu/cpu1/cpufreq/stats/time_in_state
/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
CPU频率切换表
/sys/devices/system/cpu/cpu0/cpufreq/stats/trans_table
案例1:
marvell平台,内存运行频率对功耗影响比较大。视频播放器播放时功耗比较大。需要在播放时对内存进行降频处理,暂停或关闭后恢复内存频率。(JAVA层可直接读写设备节点)
案例2:音乐播放器灭屏功耗高
CPU的频率有几个档位,在音乐播放过程中统计下CPU运行频率百分比情况,查看下CPU是否总是或绝大多数都在CPU的最高频率运行。可以和功耗低的其它APK做对比测试,对比CPU频率的占用情况。
可以查看电流情况是否出现周期性变化,背后有可能就是某个程序周期性的占用CPU资源。
最后定位是:灭屏播放时widget界面的播放器挂件也在刷新进度条导致。
例如:灭屏播放时应该停止歌词滚动、进度条刷新、图标闪烁等操作。
案例3:划屏操作时平均电流过大
正常情况是划屏操作时电流会马上跃起后立刻回落。出现电流过大的原因是:电流马上跃起后电流不会立刻回落,会有一段时间的迟滞。
案例4:传感器待机功耗高问题
在手机待机时候通过kernel日志查看:各个sensor模块是否都调用了early_suspend,进入sensor低功耗模式。
需要检查sensor的硬件原理图。虽然芯片进入到低功耗模式,但是所连的总线或中断管脚并没有释放,
申请和释放GPIO管脚的函数:gpio_request()和gpio_free()。
案例5:TW待机功耗大
当TW待机和唤醒流程都正确的情况下。需要查看TW在待机和唤醒的时候中断脚和复位脚的状态。
管脚状态可以和vendor联系确认
案例6:灭屏通话功耗
通过串口查看AP侧是否待机,通话过程中AP侧不参与必须待机以减少功耗。
那影响功耗的模块主要就是modem侧。
总结1:应用程序在灭屏的时候可以停止一些不必要的操作,减小CPU利用率,降低功耗。
总结2:通过观察电流测试曲线来看有没有一些周期性的电流变化。
总结3:芯片耗电除了芯片内部本身耗电外,还有就是芯片管脚漏电情况。所以当chip配置成低功耗模式后,还需要把其所连的管脚
配置正确状态,因为管脚配置不正确会导致漏电。
总结4:当I2C数据线和时钟线产生压差时候,则总线上会产生功耗。
总结5:一般功耗分析方法是:先从kernel日志分析,关键字Suspending console(s) (use no_console_suspend to debug)
是linux标准待机标志,两次待机之间的时间就是CPU唤醒运行的时间。通过kernel时间点再去定位system日志的时间点,然后确定是哪一个进程
导致CPU不能进入休眠,也就是不能进入标准的linux待机流程。(通常需要查看的是客户端进程)