0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK平台休眠唤醒问题定位实操指南|从问题排查到工具使用全解析

jf_44130326 来源:Linux1024 作者:Linux1024 2026-03-27 07:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发中,休眠唤醒是实现设备低功耗的核心功能,而RK系列平台(如RK3399)的休眠唤醒调试,是开发过程中高频且关键的工作。从休眠失败排查到唤醒耗时优化,从工具使用到关键节点调试,每一步都有明确的实操方法和技巧。本文结合RK平台实际开发文档,从问题定位、流程时间优化、Pm-test工具使用、核心调试节点四个维度,手把手教你搞定RK平台休眠唤醒所有问题!

一、RK平台休眠核心问题定位

休眠失败是RK平台开发中最常见的问题,核心诱因主要集中在锁资源、中断触发、定时器机制三类,结合实操实验可快速定位根因,以下是具体排查方法:

1. wake_lock导致无法休眠

这是休眠失败的最主要原因,系统存在未释放的唤醒锁时,会直接阻止休眠流程。RK平台提供两个核心节点用于排查锁资源,二者互补,需配合使用:

仅查Android层锁:cat /sys/power/wake_lock,该节点只能识别Android系统中设置的唤醒锁,无法检测kernel层锁;

查全量锁(推荐):cat /sys/kernel/debug/wake_source,可识别所有唤醒锁,包括kernel层驱动设置的锁、通过命令行手动添加的锁,同时能查看锁的当前激活状态。

2.休眠过程中产生中断/驱动休眠函数含wake_lock

休眠流程执行中,若有未屏蔽的硬件中断触发,或驱动的suspend(休眠)函数中主动添加了wake_lock,会直接中断休眠。这类问题需通过内核log判断,重点查看休眠阶段的中断打印和驱动休眠函数的执行日志,定位触发中断的设备或违规添加锁的驱动。

3. 2S内有闹钟中断产生,系统拒绝休眠

RK平台内核中存在闹钟中断检测机制:若检测到2S内有RTC闹钟中断即将触发,系统会直接拒绝进入休眠,核心逻辑在alarmtimer_suspend函数中。

函数会遍历定时器队列,计算最近一次闹钟中断的触发时间差delta,若delta.tv64 < 2S,则直接返回0阻止休眠,避免系统刚休眠就被闹钟唤醒,造成功耗浪费。

4.实操实验:驱动加锁验证休眠失败场景

以RK808电源管理驱动为例,在其suspend函数中手动添加wake_lock,可复现休眠失败场景,从log中能清晰看到核心现象:

// RK808休眠函数中添加唤醒锁staticintrk808_suspend(structdevice *dev){  printk("rk808_suspendn");  wake_lock(&rk808_wake_lock);// 手动添加锁 // 原有休眠逻辑 return0;}

关键log现象:系统执行RK808的休眠函数后,检测到激活的唤醒锁,直接终止休眠,且会执行对应驱动的resume(唤醒)函数,核心log如下:

27.180129 PM:wakeup pending,abortingsuspendactive wakeupsource: rk808 wake locktestPM: Some devices failed tosuspend, or early wake event detected27.180581 rk808_resume // 休眠失败后执行唤醒函数

二、休眠唤醒流程时间优化

以RK3399为例,正常情况下从按下Power键到背光PWM有波形输出的唤醒耗时约972ms,若实际开发中耗时远超该值,需通过以下两种方法定位耗时瓶颈:

1.命令行形式:打印单个设备休眠耗时

通过两个命令配合,让内核打印每个设备的休眠/唤醒耗时,快速定位耗时过长的设备驱动:

# 休眠时让console不进入休眠,保证log完整输出echoN > /sys/module/printk/parameters/console_suspend# 开启设备休眠耗时打印功能echo1 > /sys/power/pm_print_times

执行后触发休眠,内核会打印每个设备的suspend函数执行时间,重点关注耗时远超平均水平的设备,排查其驱动休眠逻辑。

2.打开DPM_WATCHDOG_TIMEROUT:设置休眠超时阈值

通过开启内核的设备电源管理看门狗,设置休眠超时时间(精确到秒),若某个设备休眠耗时超过阈值,内核会触发超时提醒,快速定位卡死在休眠阶段的设备。

•配置方式:内核编译时开启Device suspend/resume watchdog,并设置超时时间(如60s);

•实操示例:在RK808驱动中添加mdelay(8000)模拟耗时,看门狗会检测到该设备休眠超时并打印日志。

三、Pm-test工具全使用说明:休眠唤醒稳定性测试

RK平台内核集成了Pm-test工具,用于休眠唤醒的功能验证和稳定性拷机,分为/sys/power/pm_test节点配置和Suspend_test内核模块测试,适用于开发不同阶段的调试需求。

1. /sys/power/pm_test:灵活设置休眠唤醒测试级别

该节点用于手动触发不同级别的休眠唤醒测试,可设置唤醒间隔,默认唤醒间隔为5s,核心操作命令如下:

# 查看支持的测试级别cat/sys/power/pm_test# 输出:[none] core processors platform devices freezer# 设置唤醒间隔为30secho30 > /sys/module/suspend/parameters/pm_test_delay# 选择core级别测试echocore > /sys/power/pm_test# 触发休眠,系统会在30s后自动唤醒echomem > /sys/power/state

核心测试级别说明

•none:无测试,正常休眠;

•core:内核核心层休眠测试;

•platform:平台层休眠测试;

•devices:设备层休眠测试(重点);

•freezer:进程冻结测试(注意:与PM_SUSPEND_FREEZE机制不同,不可混淆)。

2. Suspend_test:内核层休眠唤醒稳定性拷机

适用于平台开发前期(系统未进入Android)的休眠唤醒稳定性测试,利用RTC定时器实现自动循环休眠唤醒,内核4.4版本自带该功能,需两步配置:

步骤1:内核编译配置

在menuconfig中开启对应选项,路径如下:

->Power management options->Device power management core functionality (PM [=y])->Power Management Debug Support (PM_DEBUG [=y])[*] Test suspend/resume and wakealarm during bootup

步骤2:添加启动参数,设置拷机次数

在内核启动参数中添加test_suspend=mem,N,其中N为拷机次数(可设100/1000次),示例:

test_suspend=mem,1000# 系统启动后自动执行1000次休眠唤醒循环

注意:使用前需确保RTC驱动已正常加载,否则定时器无法触发自动唤醒。

四、RK平台休眠唤醒核心调试节点汇总

RK平台在sysfs和debugfs中提供了6个核心调试节点,覆盖锁资源、休眠状态、唤醒中断、耗时统计等所有调试场景,是排查问题的“万能钥匙”,建议开发时熟记!

节点路径 核心功能 实操命令/使用场景
/sys/kernel/debug/suspend_stats 统计休眠唤醒成功/失败次数,标注失败步骤(基于dev_pm_ops) cat /sys/kernel/debug/suspend_stats排查休眠失败的具体阶段
/sys/power/state 查看平台支持的休眠方式,强制触发休眠 cat /sys/power/state(RK3399支持freeze/mem);echo mem > /sys/power/state(强制休眠)
/sys/power/pm_wakeup_irq 获取最近一次唤醒系统的中断号 cat /sys/power/pm_wakeup_irq定位异常唤醒的硬件中断
/sys/power/pm_print_times 打印每个设备休眠/唤醒耗时 echo 1 > /sys/power/pm_print_times配合console_suspend使用
/sys/kernel/debug/wake_source 查看全量唤醒锁及状态(Android+kernel) cat /sys/kernel/debug/wake_source排查未释放的唤醒锁
/sys/module/printk/parameters/console_suspend 控制休眠时console是否休眠,保证log输出 echo N > 该节点休眠时打印完整内核log

五、RK平台休眠唤醒调试核心脑图

为了方便大家快速梳理调试思路,将本文核心内容整理为脑图,涵盖问题定位、时间优化、工具使用、关键节点四大核心板块,收藏备用!

wKgZO2nFvyKAfjR3AAL2AGjE6GQ597.png

六、总结

RK平台的休眠唤醒调试,核心是“先定位问题类型,再用对应工具/节点排查”:

1.休眠失败优先查wake_source节点,排除锁资源问题,再通过log排查中断和闹钟定时器;

2.唤醒耗时过长用pm_print_times打印设备耗时,或开启DPM看门狗定位超时设备;

3.稳定性测试用Pm-test工具,开发前期用Suspend_test拷机,后期用pm_test节点灵活测试;

4.所有调试场景都离不开6个核心节点,熟记节点功能能大幅提升调试效率。

休眠唤醒的调试本质是对内核电源管理机制设备驱动逻辑的理解,结合RK平台的实操方法,多做实验、多分析log,就能快速解决各类问题。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 定位
    +关注

    关注

    5

    文章

    1605

    浏览量

    36757
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1167

    浏览量

    50207
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux Kernel 6.1 tools目录解析 | RK平台ARM64交叉编译实战指南

      在瑞芯微( RK ) ARM64 平台嵌入式 Linux 开发、内核调试与硬件外设测试中, Linux 内核源码自带的 tools 目录 是官方标配的工具集合,涵盖性能分析、设备调试、系统管理
    的头像 发表于 04-16 18:42 1711次阅读
    Linux Kernel 6.1 tools目录<b class='flag-5'>全</b><b class='flag-5'>解析</b> | <b class='flag-5'>RK</b><b class='flag-5'>平台</b>ARM64交叉编译实战<b class='flag-5'>指南</b>

    干货分享:TNC插头怎么拆?射频头维修、故障排查与二次利用指南

    对旋法”实现故障排查与二次利用,并揭秘导致驻波比跳变的物理诱因。无论你是资深硬件工程,还是电子发烧友,这篇关于RF接头长效防护与回收的指南,绝对不容错过!
    的头像 发表于 04-14 15:25 37次阅读
    干货分享:TNC插头怎么拆?射频头维修、故障<b class='flag-5'>排查</b>与二次利用<b class='flag-5'>实</b><b class='flag-5'>操</b><b class='flag-5'>指南</b>

    差分探头波形不稳,频繁跳变是什么原因?排查指南

    原因针对性强。结合经验,按排查优先级梳理核心原因及落地解法,新手也能快速解决。 最易忽略:物理连接接触不良(80%基础故障根源) 差分探头波形传输依赖正负表笔、接地夹的稳定连接,任意一端接触不良都会引发波形跳变
    的头像 发表于 03-18 08:58 459次阅读
    差分探头波形不稳,频繁跳变是什么原因?<b class='flag-5'>实</b><b class='flag-5'>操</b><b class='flag-5'>排查</b><b class='flag-5'>指南</b>

    RK3576平台PCA9548 I2C开关设备树配置与生效解析

    中广泛应用。本文结合实际设备树配置, 配置解析 、 生效流程 、 开发关键要点 三个维度,讲透PCA9548在Linux系统中的落地实现,嵌入式开发人员可直接对标
    的头像 发表于 02-28 11:18 1752次阅读
    <b class='flag-5'>RK</b>3576<b class='flag-5'>平台</b>PCA9548 I2C开关设备树配置与生效<b class='flag-5'>全</b><b class='flag-5'>解析</b>

    解决RK806+RK3588休眠异常!硬件特性到软件优化的完整方案

    在嵌入式开发中,电源管理的稳定性直接决定了设备的可靠性。近期,RK3588 平台搭配 RK806 电源管理芯片(PMIC)时,出现了二次休眠异常的问题 —— 第一次
    的头像 发表于 02-09 16:46 920次阅读
    解决<b class='flag-5'>RK806+RK</b>3588<b class='flag-5'>休眠</b>异常!<b class='flag-5'>从</b>硬件特性到软件优化的完整方案

    揭秘TEE深度休眠唤醒“低概率报错”:概念到解决方案的解析

    在嵌入式与物联网设备的底层技术领域,TEE(可信执行环境) 是保障系统安全的关键组件之一。但在 RK3562、RK3588 等芯片的深度休眠唤醒场景中,却出现了一类 “低概率却影响致命
    的头像 发表于 02-09 16:37 301次阅读
    揭秘TEE深度<b class='flag-5'>休眠</b><b class='flag-5'>唤醒</b>“低概率报错”:<b class='flag-5'>从</b>概念到解决方案的<b class='flag-5'>全</b><b class='flag-5'>解析</b>

    RK平台Android设备OTA升级教程:原理到U盘

    ” 和 “差异包” 两种升级形态,适配不同场景(如全新安装、小版本更新)。本文将从 OTA 升级包的类型与编译入手,拆解 RK 平台 OTA 升级的核心逻辑,并以最常用的 “U 盘本地升级” 为例,提供 step-by-step
    的头像 发表于 02-09 16:23 2027次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>Android设备OTA升级教程:<b class='flag-5'>从</b>原理到U盘<b class='flag-5'>实</b><b class='flag-5'>操</b>

    RK平台休眠唤醒与低功耗调试全攻略:原理到WiFi功耗问题实战

    在物联网设备、便携终端等场景中,低功耗是决定产品续航与用户体验的核心指标—— 尤其是瑞芯微(RK平台设备,常需在性能与功耗间找到精准平衡。但实际开发中,休眠唤醒异常、外设(如 WiF
    的头像 发表于 02-05 13:44 2209次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b><b class='flag-5'>休眠</b><b class='flag-5'>唤醒</b>与低功耗调试全攻略:<b class='flag-5'>从</b>原理到WiFi功耗问题实战

    UPS电源常见故障维修解析排查到修复的实战指南

    ,防止事态扩大。一、基础排查现象快速定位问题方向面对一台“生病”的UPS,专业的工程师总会最直观的现象入手,遵循由简到繁的排查逻辑。以
    的头像 发表于 02-05 09:30 500次阅读
    UPS电源常见故障维修<b class='flag-5'>全</b><b class='flag-5'>解析</b>:<b class='flag-5'>从</b><b class='flag-5'>排查到</b>修复的实战<b class='flag-5'>指南</b>

    RK3326平台GC2385摄像头调试实战:报错到功能正常的完整排查指南

    在嵌入式硬件调试场景中,摄像头模块的适配常涉及驱动、配置文件、硬件参数的多环节协同,任一环节偏差都可能引发预览失败、拍照异常等问题。本文以RK3326 主控平台适配GC2385 摄像头的实际案例为核心,梳理报错
    的头像 发表于 02-03 16:04 1382次阅读
    <b class='flag-5'>RK</b>3326<b class='flag-5'>平台</b>GC2385摄像头调试实战:<b class='flag-5'>从</b>报错到功能正常的完整<b class='flag-5'>排查</b><b class='flag-5'>指南</b>

    RK平台固件升级失败?排查流程图+脑图+指南,一步搞定!

    专业知识也能快速定位问题!     一、核心排查流程图(易到难,少走弯路)           二、故障排查脑图(一目了然,快速索引)           三、分场景
    的头像 发表于 01-30 22:34 978次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>固件升级失败?<b class='flag-5'>排查</b>流程图+脑图+<b class='flag-5'>实</b><b class='flag-5'>操</b><b class='flag-5'>指南</b>,一步搞定!

    京东关键词搜索接口获取商品数据的指南

    京东关键词搜索接口获取商品数据 指南指南聚焦 京东开放平台合规接口 (item_search基础版 / item_search_pr
    的头像 发表于 01-07 13:56 398次阅读

    RK 平台 USB 摄像头成像调试指南信号到画质的流程优化

    在 RK(瑞芯微)平台开发中,USB 摄像头成像效果不佳是高频问题,其根源多与 USB 信号质量、PHY 寄存器配置及硬件环境相关。本文结合 Rockchip USB SQ Tool 工具,分享
    的头像 发表于 11-26 07:05 1154次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> USB 摄像头成像调试<b class='flag-5'>指南</b>:<b class='flag-5'>从</b>信号到画质的<b class='flag-5'>全</b>流程优化

    RK3128 Android 7.1 进入深度休眠流程分析

    4. 唤醒流程当以下任一事件发生时,系统深度休眠唤醒: 电源键按下 RTC闹钟触发 其他预设的唤醒源信号 5. 调试与验证可以通过以下方
    发表于 07-22 10:45

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠唤醒流程的分析
    的头像 发表于 07-22 09:49 1033次阅读
    <b class='flag-5'>RK</b>3568 EVB开发板 深度<b class='flag-5'>休眠</b>与快速醒的工作流程