1. 如何分析系统无法休眠
1.1. 如何确认系统无法休眠
a): 可以焊接串口线,如果log不停打印,说明系统还在工作
b): 可以搜索mtk log里面的kernel log, 看看有没有关键字*[WDT] suspend*
1.2. 如果系统无法休眠,基本上是被wakelock锁住。
一般需要看 kernel wakelock 和 framework 的 wakelock
1.2.1 kernel wacklock 查看,现在kernel wakelock如果有卡主系统休眠,都会打印一下log, 关键字 *active wakeup source*
需要注意的是 *active wakeup source* 打印的种类比较多,并且比较频繁,因此需要把 *active wakeup source* 的打印源都看一下,如果某一个 *active wakeup source* 一直存在,说明就是它导致的。 比如 *active wakeup source: leds_wakelock*
1.2.2 Framework wakelock 的查看
一般来说framework在进入休眠的一瞬间会打印当前的 PARTIAL WAKELOCK, 但是O版本改动后,没有相关信息打印,需要添加debug代码。
2. 如何确认休眠唤醒源
2.1 查看波形图,在波形图对应的时间看log, 关键字 *[WDT] suspend*
2.2 常见唤醒源:【因为平台不同,可能对应的唤醒源稍有不同】
2.2.1 EINT 唤醒源
6767/6762 平台 EINT 一般对应PMIC, PMIC有2个原因可能触发EINT从而唤醒系统: 1. RTC alarm 2.Powerkey
关键字 *PMIC_INT:*
除PMIC通过EINT唤醒外,GPIO的EINT也能唤醒系统。
2.2.2 确认PMIC EINT的真正handler
确认 *[SPM] suspend wakeup by R12_EINT_EVENT_B* 唤醒系统后,往下搜索关键字 *pmic_thread*,从而确认是RTC唤醒
[pmic_thread][name:mtk_rtc_common&]mtk_rtc_common:rtc_tasklet_handler start
如果是powerkey唤醒,那么log可能是
[pmic_thread][name:kpd&]kpd: Power Key generate, pressed=1
2.2.3 CLDMA 唤醒源
根据以上方法,寻找 *[WDT] suspend* 关键字之后的 *wake up by* ,如果找到 *wake up by R12_CCIF0_EVENT_B* 这样的文字说明是 Modem唤醒。
同样 Modem 唤醒有很多原因,一般能排查的是: 1. 开启 Modem log导致; 2、开启数据连接,有数据传输导致。
在 *wake up by R12_EINT_EVENT_B* 之后,搜索关键字: *CLDMA_MD wakeup source* 或 *CCIF_MD wakeup source*
常见唤醒举例:
A: low power 测试开mdlog导致唤醒 : CCIF_MD wakeup source: (CCB)
active wakeup source: ccci_ccb_meta
active wakeup source: ccci_ccb_md_monitor
active wakeup source: ccci_ccb_dhl
B: 93MD 数据导致的唤醒: CLDMA_MD wakeup source: (0/0/0)
3. 如何根据RTC唤醒寻找对应的alarm和apk
3.1 寻找Android log的alarm活动源。
搜索main log 或 sys log关键字 *type 0* 或者 *type 2*
注意alarm活动的相关log需要以下如下cmd才会dump出来 dumpsys alarm log on
4. 不插卡待机电流分析
4.1 确保flymode待机电流正常
4.2 不插卡与flymode待机的区别
4.2.1 flymode待机modem是否关电,涉及到一个宏定义:
MTK_FLIGHT_MODE_POWEROFF_MD=yes flymode关闭modem
MTK_FLIGHT_MODE_POWEROFF_MD=no flymode保持打开modem
用户禁止将此配置改为yes
4.2.2 不插卡手机会与基站通讯,并且会有paging这时候需要留意的是paging的周期和脉冲高度。 大概为2.56s
5. HomeIdle 电流分析
5.1 准备userdebug版本吓到手机
5.2 切到飞行模式,设置手机背光时间30分钟。
5.3 确保手机不带GMS,
5.4 确认手机屏幕是CMD屏幕还是Video屏幕。
系统端对LCD Video屏与OLED Command屏的处理不同。即使在拆掉屏幕的情况下,系统端对LCD Video屏也是有处理的,但是对OLED Command屏是没有处理的。
5.5 拔屏,看板端电流是否符合MTK标准。
拔屏电流确认请遵循以下步骤:
①. Home screen 没有动态背景,在homescreen界面下待电流稳定。
②. 录制波形,并时刻观察波形,等待稳定的时候,准备拔屏。
③. 突然拔屏: 拔屏的瞬间下降的 1s 内的电流便是home idle板端耗电,1s后的电量不准确了,因为拔屏之后,平台这边已经工作异常。
具体的场景分析如:MP3、MP4、电话通话、VOLTE通话、以及相关调试脚本的抓取见文档《PowerDebug小手册Vx.pdf》