Android 功耗(4)---MTK平台待机功耗分析流程
MTK平台待机功耗分析流程
1.目的
2.MTK平台各个场景功耗数据测试方法
很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法。
测试功耗数据之前,请先确认以下配置:
1、关闭 WIFI/BT/GPS,关闭数据连接,设置飞行模式。 (根据具体测试场景设置)
2、关闭 mobile log/modem log/net log,打开LOG会增加电流。注意:确认 /sdcard/mtklog (/data/mtklog) 中是否有 LOG 生成,确定关闭成功。
3、确认各个模块是否已经正常工作,各个模块都会影响功耗,需要在模块工作 OK 之后再测试功耗问题。
4、测试将所有第三方 APK 删除,排除第三方 APK 问题。
各场景测试手法:
测试场景 测试方法 备注
飞行模式待机
1、设置飞行模式,关闭WIFI/BT/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、按power 键灭屏,灭屏5分钟后,开始测试电流,测试时间5 ~ 10分钟 电流异常需要提供mobile log
4、关闭mobile log、modem log、net log
5、按power 键灭屏,灭屏5分钟后,开始测试电流,测试时间5 ~ 10分钟 实网待机需要先确认网络问题及SIM卡问题:
6、用其他对比机是否有同样问题
7、同一手机在其他地点是否有问题
8、其他SIM卡是否有同样问题
电流异常需要提供mobile log
双SIM卡实网待机
单SIM卡实网待机 + 数据连接
1、关闭WIFI/BT/GPS
2、关闭mobile log、modem log、net log
3、按power 键灭屏,灭屏5分钟后,开始测试电流,测试时间5 ~ 10分钟
单SIM卡待机 + WIFI/BT/GPS
1、关闭数据连接
2、关闭mobile log、modem log、net log
3、按power 键灭屏,灭屏5分钟后,开始测试电流,测试时间5 ~ 10分钟
通话电流
1、关闭WIFI/BT/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、通话后灭屏,等待2分钟开始测试电流,测试时间5分钟 电流异常需要提供mobile log
home界面idle电流
1、关闭WIFI/BT/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、拔掉SIM卡、SD卡
4、保持在home界面,不开任何应用,设置自动灭屏时间为30分钟
5、保持默认背光
6、等待5分钟后开始测试电流,测试时间5~10分钟 home界面电流和背光、TP、LCM有关,需要先确认去掉背光、TP、LCM电流,请看下一场景
home界面idle + 去掉背光和TP
1、关闭WIFI/BT/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、拔掉SIM卡、SD卡
4、保持在home界面,不开任何应用,设置自动灭屏时间为30分钟
5、拔掉LCM和TP
6、等待5分钟后开始测试电流,测试时间5~10分钟 home界面电流异常需要抓CPU信息,请参考FAQ04008,需要同时提供mobile log
FM电流 (耳机模式)
1、关闭WIFI/BT/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、打开FM后灭屏,等待2分钟后开始测试电流,测试时间5分钟 1、FM SPEAKER模式 以及 I2S 通道电流都会偏大,是正常的。
4、FM电流异常需要抓deepidle数据,请参考 FAQ04519,需要同时提供mobile log
BT传输数据
1、关闭WIFI/GPS,关闭数据连接
2、关闭mobile log、modem log、net log
3、传输5M大小文件,灭屏,测试电流
4、BT传输电流异常需要抓CPU信息,请参考FAQ04008,需要同时提供mobile log
Audio - MP3 Play back (headset)
1、设置飞行模式
2、关闭mobile log、modem log、net log
3、播放mp3,灭屏,灭屏后等待2分钟,开始测试电流,测试时间2分钟
4、播放MP3和SD卡及音频文件有关,需要换SD卡及音频文件测试
5、MP3电流异常需要抓deepidle数据,请参考 FAQ04519,需要同时提供mobile log
Video - MP4 (720P) HW mode
1、设置飞行模式
2、关闭mobile log、modem log、net log
3、播放video,播放后等待2分钟,开始测试电流,测试时间2分钟
4、播放video电流和背光、TP、LCM有关,需要先确认去掉背光、TP、LCM电流 5、播放video和播放器和视频文件有关,需要使用默认播放器及MTK提供的视频文件
6、播放video电流异常需要抓CPU信息,请参考FAQ04008,需要同时提供mobile log
Video - MP4 (1080P) HW mode
Video - H.264 (720P) HW mode
Video - H.264 (1080P) HW mode
Camera - Video Record H264 (720 P)
Camera - Preview (720 P)
1、设置飞行模式
2、关闭mobile log、modem log、net log
3、打开preview,等待2分钟,开始测试电流,测试时间2分钟
4、camera电流和拍摄场景及camera相关设置有关,对比测试时请尽量保持相同拍摄场景以及相同配置。
5、preview电流异常需要抓CPU信息,请参考FAQ04008,需要同时提供mobile log
3.功耗问题分析流程
目前我们分析的功耗问题主要是待机低电流或者待机平均电流问题。
造成待机底电流偏大原因基本可以分为3类: 各个外设模块休眠漏电或未休眠,GPIO/subsys/pll/clock口漏电,wakelock导致无法休眠,modem无法休眠
关闭飞行模式测试待机底电流,排除是否modem未休眠,首先确定是AP 还是modem。
modem暂无系统的分析方法。
下面是AP的分析流程
3.1 外设模块分析方法
外设模块分析主要还是靠硬件上一一移除,然后查看移除哪个模块后底电流有降下来,然后确定到时哪个模块漏电 .如休眠时将TP camera LCD 逐一移除来确定排查。
找到模块后再取分析代码来解决。
3.2 GPIO/SUBSYS/PLL/CLOCK分析方法
AP suspend状态下,会因为GPIO配置不当,subsys/pll/clock没关,或者其他的原因造成26M没关,而导致底电流升高;
这种情况,可以从kernel log中找到一些端倪,以确定进一步分析的方向
【3.2.1】查找没有关闭的SUBSYS/CLOCK/PLL
[6589/6582/6592/6595/6795] 查找关键字“PWR_STATUS”,[7:0]对应每个bit对应一个subsys 如果bit为1,代表这个子系统没关
echo 1 > /sys/module/mt_sleep/parameters/slp_ck26m_on
echo 1 > /sys/module/mt_sleep/parameters/slp_dump_regs
每个bit的定义可以看mt_spm_mtcmos.c
比如:#define MD1_PWR_STA_MASK (0x1 << 0)
[6732/6752/6735/6753] 查找关键字“slp_check_pm_mtcmos_pll” 如果有子系统没关,下一行可以看到类似下面的信息: [Power/clkmgr] SYS_AUD: on
然后再往下看,就是各子系统的dump信息,以aud子系统为例,找到SYS_AUD对应的部分,详细解释如下: cnt不等于0表示这个clock没关 后面每一个括号内(可能有多个)是这个clock的其中一个user的信息 “audio”是使用clock的user的名字,代码里传入的参数 “15”表示open clock的次数, “14”表示close clock的次数,两者不一样的话说明“audio”这个user使用这个clock有问题
[06][CG_AUDIO]*
[02]state=1, cnt=1 (AUDIO,15,14)
[08]state=0, cnt=0 (AUDIO,8,8)
[09]state=0, cnt=0 (AUDIO,8,8)
[18]state=0, cnt=0 (AUDIO,8,8)
[19]state=0, cnt=0 (AUDIO,8,8)
【3.2.2】查看GPIO的状态
默认是关闭的,需要用下面的命令打开
echo 1 > /sys/module/mt_sleep/parameters/slp_dump_gpio
然后在kernel log里就可以看到类似下面的信息: PIN: [MODE] [PULL_SEL] [DIN] [DOUT] [PULL EN] [DIR] [IES]
对一下正常更异常的情况就会有帮助
重点关注[mode][DIR][PULL_SEL],其他栏位的状态即使改变很多情况下也是正常的
有些平台本身这块代码是注释掉的,需要更改代码才可以,搜索slp_dump_gpio可以找到相关代码
【3.2.3】查看26M CLOCK是否关闭
- 周末阅读:程序员的《权利法案》
- 对利用Adobe 0day – CVE-2014-0502进行攻击的行为分析
- Android系统更改状态栏字体颜色
- Android实现竖着的滑动刻度尺效果,选择身高(竖向的)
- DedeCMS全版本通杀SQL注入漏洞利用代码及工具
- Android实现滑动刻度尺效果,选择身高体重和生日
- 浅谈开源web程序后台的安全性
- Web漏洞演练平台 – ZVulDrill
- Android内存泄漏终极解决篇(上)
- 走近科学:我是如何入侵Instagram查看你的私人片片的
- 在线手写识别的多卷积神经网络方法
- 苹果发布OS X 10.9.2更新,修复SSL漏洞
- Android内存泄漏终极解决篇(下)
- 利用Volatility查找系统中的恶意DLL
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- Python 技术篇-获取秒级时间戳、毫秒级时间戳
- Python 技术篇-基于随机数的uuid码的生成
- BAT 脚本技术-利用bat批处理脚本静态指定ip地址、自动获取ip地址设置
- Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
- Spring Security 中如何细化权限粒度?
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
- 小书MybatisPlus第3篇-自定义SQL
- Nginx + Spring Boot 实现负载均衡
- 小书MybatisPlus第2篇-条件构造器的应用及总结
- 一个案例演示 Spring Security 中粒度超细的权限控制!
- 信息收集之主机发现:nmap
- 文本文件逐行处理–用java8 Stream流的方式
- 使用java8API遍历过滤文件目录及子目录及隐藏文件
- 使用位运算、值交换等方式反转java字符串-共四种方法