rk3399【休眠唤醒】调试笔记(一)

本文记录了一位工程师在基于RK3399平台、4.4内核及麒麟v4系统上的平板电脑遇到的挂机功能无法正常唤醒的问题。通过分析内核休眠机制,发现休眠被gpio-charger唤醒,进一步调试发现是电源键以外的按键设置不当导致。修改设备树去除唤醒键后,虽然能成功休眠唤醒,但长时间休眠后系统功能出现异常。文章预告将对这一问题进行深入分析。
摘要由CSDN通过智能技术生成

背景 :基于rk3399 平台 4.4 内核,平板上系统为麒麟v4, 点击系统的挂机功能,平板不能唤醒。
各个平台基本上都实现了自己额休眠唤醒功能,接下来记录一下自己的调试过程

分析之前,肯定先要了解一下内核 的suspend 机制 发现绝大部分都是参考: Linux电源管理(6)_Generic PM之Suspend功能.
了解了一些背景知识之后,开始继续向下分析。

现象1 : 接适配器,不差电池,点击挂机功能后,过几秒自动唤醒。该如何分析呢?

1.查看内核支持的休眠方式

在这里插入图片描述
2.尝试休眠

echo mem > state
[ 46.060194] cpu cpu4: failed to read out thermal zone (-11)
[ 46.066413] cpu cpu4: failed to find power_model node
发现休眠不了,立刻被唤醒了。

此时发现 /sys/power/下 有pm_wakeup_irq节点(提示唤醒源对于的终端号)
cat 出来 121 中断号,然后 对照 cat /proc/interrupts
发现对于的唤醒中断是gpio-charger,接着分析 gpio-charger 为啥会唤醒。

3.gpio-charger
查看对应驱动源码: drivers/power/gpio-charger.c

发现驱动probe 函数中设置:device_init_wakeup(&pdev->dev, 1);

修改为 device_init_wakeup(&pdev->dev, 0);

编译后重新验证,按照2的方法继续调试发现
中断唤醒源变为58,对应GPIO KEY LEFT

4.调试按键为啥会唤醒
查看设备树发现除了电源按键设置了gpio-key,wakeup = <0x1>之外,其他的按键还
设置了,gpio-key,wakeup = <0x00>;
在分析一下源码:
在这里插入图片描述
在这里插入图片描述

也就是说只要设备树里有wakeup,就会被设置成唤醒源。
修改设备树去除了唤醒键power键其他按键的wakeup。

接下来再次烧录验证,发现能休眠唤醒了,然后笔者做了长时间休眠后,唤醒的测试

问题来了。长时间休眠后,唤醒之后系统功能异常,操作不响应:

在这里插入图片描述
那么接着适配器,长时间唤醒系统功能异常,操作不响应又该如何分析呢?
请继续关注,下篇文章接着分析

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值