本文结合该文档简单的总结了AP端功耗问题分析手段。
首先是官方功耗分析流程图:
![a6d26486b39f174e20dc47025914a5ea.png](https://i-blog.csdnimg.cn/blog_migrate/28e49a3e508ce584e66d7c80d543d919.jpeg)
注意几个关键的名词:
Modem 调制解调器芯片
RPM Resource Power Manager是高通MSM平台另外加的一块芯片,控制整个电源相关的shared resources
APSS 应用处理器子系统,就是平常我们说的AP
功耗问题一般分为低电流过高,或者异常唤醒造成。
本文只站在AP的角度分析功耗问题,也就是Android系统的角度。
低电流过高首先要验证系统是否进入了最低功耗状态。VDD最小状态。
mount -t debugfs none /sys/kernel/debug/cat /sys/kernel/debug/rpm_stats 获取系统是否休眠。验证XO关闭和VDD最小化RPM Mode:xosd count:0time in last mode(msec):0time since last mode(sec):1275actual last sleep(msec):0client votes: 0x03030303 RPM Mode:vmin count:0 //有计数则说明系统进入最低功耗状态time in last mode(msec):0time since last mode(sec):1275actual last sleep(msec):0client votes: 0x00000000
如果系统没有进入VDD最小状态,则要检查那一项阻止了终端进入VDD最小状态。
这一块主要查看RPM的外部日志。分析,略。
下面分析异常唤醒造成的功耗问题
![f5e7a8b932501be2229be445e92ef9e6.png](https://i-blog.csdnimg.cn/blog_migrate/640ff6a59bd6d3193ca2d9e1aa9f6dcf.jpeg)
查看AP端的异常唤醒源,查看modem那块的略过。
echo 1 >/sys/module/msm_show_resume_irq/parameters/debug_maskecho "8 8 8 8">/proc/sys/kernel/printk
![c81e006b3e40d1d6d757e2f7994fe165.png](https://i-blog.csdnimg.cn/blog_migrate/a93c6c2d752e85d471299166a63c0bf8.jpeg)
通过查看唤醒锁的状态主要查看active_since字段可以查看,哪个锁造成系统无法休眠。
![8cb2c1d088ada0804e888c771967bcbb.png](https://i-blog.csdnimg.cn/blog_migrate/ea3fe39a1907abf4a4e7c3fa1ceaf8e1.jpeg)
![95d6b96579a3a740494ff7bfe42f0fb2.png](https://i-blog.csdnimg.cn/blog_migrate/e298cbbd42e8868da256a65daef7283a.jpeg)
总结:对于AP端判断功耗问题,一般从低电流状态判断。
排除方法:移除一些外部驱动程序,如sensor,tp,camera,LCD等。
cat /sys/kernel/debug/rpm_stats 获取系统是否休眠。验证XO关闭和VDD最小化echo 1 >/sys/module/msm_show_resume_irq/parameters/debug_mask
查看log获取异常唤醒源
echo "8 8 8 8">/proc/sys/kernel/printkadb shell cat/sys/kernel/debug/wakeup_sources > j:777.txt 查看唤醒锁,哪个锁造成无法休眠