Android最全飞行模式待机电流分析详解(1),2024年最新大厂的面试

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


通过在 kernel log 中 搜索关键字: [WDT] suspend,确认系统是否已经进入休眠状态,如果kernel log中有以上关键字,就表示已经进入休眠状态。

如下 log中可以看到

<7>[199145.576777] -(0)[2029:system_server][name:mtk_wdt&][WDT] suspend

部分log如下:


<7>[199145.576777] -(0)[2029:system_server][name:mtk_wdt&][WDT] suspend

<4>[199145.576777] -(0)[2029:system_server][SPM] md_settle = 99, settle = 99

<4>[199145.576777] -(0)[2029:system_server][SPM] sec = 900, wakesrc = 0xe00c5e4 (1)(1)

<4>[199145.576777] -(0)[2029:system_server][SPM] wake up byEINT, timer_out = 2046093, r13 = 0x40000, debug_flag = 0x9f

<4>[199145.576777] -(0)[2029:system_server][SPM] r12 = 0x20, raw_sta = 0x20, idle_sta = 0x9fa, event_reg = 0x90100000, isr = 0x0

<4>[199145.576777] -(0)[2029:system_server][SPM] suspend dormant state = 0, md32_flag = 0x0, md32_flag2 = 0

<4>[199145.576777] -(0)[2029:system_server][SPM] log_wakesta_index = 8301



3. 观察电流波形是否是一条平线


如果休眠,需要观察电流波形是否是一条平线,如果是,则表示正常,如果不是,则需要分析异常跳起的唤醒源。

飞行模式正常待机电流波形图如下:

飞行模式正常待机电流波形

4. 如果中间有异常毛刺,需要确认唤醒源


如果中间有异常毛刺,需要根据log确认唤醒源,关于如何确认休眠唤醒源,请往下看看第三步。

飞行模式异常待机电流波形图如下:

飞行模式`异常`待机电流波形图

5. 硬件拆分,电流分解


如果以上软件排查不能定位问题,可能需要HW硬件同事移除器件(比如拔掉LCD屏幕等)定位问题。

如果移除器件不能定位问题,需要做电流分解来辅助定位问题。

三、如何确认休眠唤醒源

===========

1. 查看波形图是否有异常唤醒


通过电流波形图,查看波形图的异常唤醒位置以及时间。

2.根据波形图确认的时间点,推断log中的大致时间点


连上手机,打开 Powermonitor ,手机开机,在Home Screen 界面,点击 Powermonitor 的 Run , 然后马上按powerkey 休眠,这样就能积累系统按powerkey 的时间。

尽量保证点击Run 和按Powerkey 时间间隔足够短,这样波形从0处 就是log中 powerkey 的时间。

注意

kernel log使用的是 UTC 硬件时间,Android 时间一般为UTC 时间+ 时区(比如中国时区需要+8小时)

3. 查看异常时间点的log打印情况


  • 有log打印

如果确认异常的时间点附近有打印log,可以查看对应唤醒原因,可以看下面步骤 4查找唤醒源log。

  • 无log 打印

如果这个时间点附近没有log打印,那说明 AP 侧没有唤醒,可能是其他模块的唤醒行为,比如:Modem 、WCN。这个需要接串口线打印log确认。

4. 查找唤醒源 log


查找唤醒log 分为以下两个步骤:

  • 1.搜索关键字: [WDT] suspend

  • 这个是判断系统是否进入睡眠的标志,如果有,请继续看第二步。

  • 2.然后继续搜索关键字: wake up by

  • 通过搜索 wake up by 就知道唤醒源,比如以下的唤醒源EINT。




//1. 搜索关键字:  [WDT] suspend

<7>[199145.576777] -(0)[2029:system_server][name:mtk_wdt&][WDT] suspend

<4>[199145.576777] -(0)[2029:system_server][SPM] md_settle = 99, settle = 99

<4>[199145.576777] -(0)[2029:system_server][SPM] sec = 900, wakesrc = 0xe00c5e4 (1)(1)



//2. 搜索关键字:wake up by

<4>[199145.576777] -(0)[2029:system_server][SPM] wake up byEINT, timer_out = 2046093, r13 = 0x40000, debug_flag = 0x9f

<4>[199145.576777] -(0)[2029:system_server][SPM] r12 = 0x20, raw_sta = 0x20, idle_sta = 0x9fa, event_reg = 0x90100000, isr = 0x0

<4>[199145.576777] -(0)[2029:system_server][SPM] suspend dormant state = 0, md32_flag = 0x0, md32_flag2 = 0

<4>[199145.576777] -(0)[2029:system_server][SPM] log_wakesta_index = 8301

<5>[199145.576777] -(0)[2029:system_server]EINT_STA:

<5>[199145.576777] -(0)[2029:system_server]EINT Module - index:192,EINT_STA = 0x4000



5. 确认唤醒源是否是波形图上对应的异常大电流


通过步骤二推测出波形图上的大致时间,然后跟log中的打印的唤醒源时间对比看看是否一致。

6.常见的唤醒源


MT6765/MT6762平台的EINT 一般对应的是PMIC。PMIC 有两个原因可能触发EINT 唤醒系统。

  • 1.PMIC 有两个原因可能触发EINT 唤醒系统

PMIC 有两个原因可能触发EINT 唤醒系统如下:

  1. RTC alarm

  2. Powerkey

  • 2.确认 PMIC 的种类 关键字: PMIC_INT

可以通过搜索关键字: PMIC_INT


  C:\Users\Administrator\mobilelog\APLog_2020_0202_104403__1\kernel_log_6__2020_0202_111218 (19 hits)

    Line 1049: <3>[199093.023388]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c8]=0x40

    Line 1908: <3>[199104.153376]  (2)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x1

    Line 1918: <3>[199104.413338]  (2)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x4

    Line 2717: <3>[199145.583307]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 2867: <3>[199145.943239]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 3040: <3>[199146.753179]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 3443: <3>[199155.073249]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x1

    Line 3452: <3>[199155.263268]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x4

    Line 3625: <3>[199156.593122]  (1)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 3818: <3>[199157.253059]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 3960: <3>[199157.593005]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4110: <3>[199157.942942]  (2)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4262: <3>[199158.292882]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4420: <3>[199158.642820]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4571: <3>[199158.992750]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4714: <3>[199159.332717]  (0)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 4880: <3>[199159.692647]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 5085: <3>[199160.062558]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x1

    Line 5116: <3>[199160.236813]  (1)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x4



  • 3. 确认PMIC EINT 的真正handler 关键字: pmic_thread

通过搜索关键字: pmic_thread 确认是RTC Alarm 还是 powerkey 。

1. RTC 唤醒 log 如下


    Line 2867: <3>[199145.943239]  (3)[53:pmic_thread][PMIC] [PMIC_INT] addr[0x2c4]=0x200

    Line 2868: <5>[199145.943263]  (3)[53:pmic_thread]mtk_rtc_common: rtc_tasklet_handler start

    Line 2869: <5>[199145.943378]  (3)[53:pmic_thread]mtk_rtc_hal: pdn1 = 0x   0

    Line 2870: <5>[199145.943406]  (3)[53:pmic_thread]mtk_rtc_common: alarm time is up

    Line 2871: <4>[199145.943443]  (3)[53:pmic_thread][PWRAP] clear EINT flag mt_pmic_wrap_eint_status=0x0



备注:

最后

愿你有一天,真爱自己,善待自己。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

3443] (3)[53:pmic_thread][PWRAP] clear EINT flag mt_pmic_wrap_eint_status=0x0




备注:  



### 最后

愿你有一天,真爱自己,善待自己。



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值