专栏首页linux驱动个人学习Android 功耗(4)---MTK平台待机功耗分析流程

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是否关闭

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 宋宝华:Docker 最初的2小时(Docker从入门到入门)【转】

    最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料。本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,...

    233333
  • Linux CFS调度器之队列操作--Linux进程的管理与调度(二十七)

    完全公平调度器CFS中有两个函数可用来增删队列的成员:enqueue_task_fair和dequeue_task_fair分别用来向CFS就绪队列中添加或者删...

    233333
  • Linux:页表中PGD、PUD、PMD等概念介绍

    Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从...

    233333
  • 每个程序员都应该收藏的算法复杂度速查表

    算法复杂度这件事 这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和...

    用户1667431
  • 生产环境日志清理脚本

    生产上有40多个微服务部署的应用,每个应用都会产生日志,随着时间的增长,日志量不断增大,现需要清理。有两个重要的应用日志需保留90天,其它应用保留20天。

    loong576
  • Python_列表解析【i for循环 if i】

    瑞新
  • 每个程序员都应该收藏的算法复杂度速查表

    这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以...

    哲洛不闹
  • shell脚本快速入门之-----函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,shell也支持函数。shell函数必须先定义后使用

    不吃小白菜
  • 简单的交叉熵损失函数,你真的懂了吗?

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    红色石头

扫码关注云+社区

领取腾讯云代金券