当前位置: 首页 > news >正文

Linux 运行时电源管理(PM Runtime)API 使用说民

在内核驱动中,经常看到以下这几个常见的pm_runtime_开头的函数,下面试这详细说明这类函数的用法。

pm_runtime_get_sync(dev);
pm_runtime_put(dev);pm_runtime_set_active(dev);
pm_runtime_enable(dev);
pm_runtime_idle(dev);pm_runtime_disable(dev);
pm_runtime_status_suspended(dev))
pm_runtime_set_suspended(dev);

在 Linux 运行时电源管理(PM Runtime)机制中,上文提到的这些函数是管理设备电源状态的核心接口,用于跟踪设备活跃状态、控制电源管理使能 / 禁用、触发低功耗切换等。以下是每个函数的具体作用及典型使用场景:

一、核心状态跟踪函数:pm_runtime_get_sync 与 pm_runtime_put

这两个函数是 PM Runtime 中 ** 跟踪设备 “使用计数”** 的核心接口,用于判断设备是否处于 “被使用” 状态(影响是否进入低功耗)。
*1. pm_runtime_get_sync(struct device dev)
作用:
增加设备的 “使用计数”(dev->power.usage_count),并确保设备处于活跃状态(active)。
若设备当前处于 suspend 状态,会触发设备dev 的runtime_resume 回调(唤醒设备),直到设备进入 active 状态才返回。
若设备已活跃,仅增加计数,不做额外操作。

调用场景:
当设备即将被访问时(如用户打开设备、驱动需要读写硬件寄存器),需先调用此函数,防止设备在操作过程中进入低功耗。
例:摄像头驱动在 stream_on(开始采集)前调用,确保传感器处于上电状态。

*2. pm_runtime_put(struct device dev)
作用:
减少设备的 “使用计数”(dev->power.usage_count)。当计数减至 0 时,表明设备当前可能空闲,会触发 pm_runtime_idle(dev)(通知框架检查是否可以进入低功耗)。

调用场景:
设备操作结束后(如用户关闭设备、数据传输完成)调用,释放对设备的 “占用”,允许设备在空闲时进入 suspend 状态。
例:摄像头驱动在 stream_off(停止采集)后调用,允许传感器下电。

二、状态初始化与使能函数

*3. pm_runtime_set_active(struct device dev)
作用:
手动将设备状态设置为活跃(active),并重置使用计数(usage_count = 1)。
通常用于设备初始化阶段(如 probe 函数中),告知 PM Runtime 框架 “dev设备初始状态为活跃”。
不会触发硬件操作(如上电),仅更新框架的状态标记。

调用场景:
驱动 probe 时初始化设备状态,避免框架误判设备为 suspend。

*4. pm_runtime_enable(struct device dev)
作用:
启用设备的 PM Runtime 功能。启用后,框架才会根据使用计数、空闲状态等自动触发 runtime_suspend/runtime_resume(即允许设备自动进入低功耗或被唤醒)。
禁用状态下(pm_runtime_disable 之后),PM Runtime 机制失效,设备通常保持 active 状态。

调用场景:
设备初始化完成后,在 probe 函数末尾启用 PM 功能:

三、状态禁用与查询函数

*6. pm_runtime_disable(struct device dev)
作用:
禁用设备的 PM Runtime 功能。禁用后:
自动挂起 / 唤醒机制失效,pm_runtime_get/put 等调用仅更新计数,不触发状态切换。
若设备当前处于 suspend 状态,会强制唤醒设备(调用 runtime_resume),确保设备回到 active 状态。

调用场景:
设备移除(remove 函数)或需要临时关闭 PM 功能时:

*7. pm_runtime_status_suspended(struct device dev)
作用:
查询设备当前是否处于 suspend 状态(返回 true 表示已 suspend,false 表示 active 或其他状态)。

调用场景:
驱动中需要根据设备当前电源状态执行不同操作时(如唤醒前先判断是否已 suspend):

*8. pm_runtime_set_suspended(struct device dev)
作用:
手动将设备状态标记为 suspend,同时重置使用计数(usage_count = 0)。
仅更新框架状态标记,不直接触发硬件下电操作(硬件操作需在 runtime_suspend 回调中实现)。

调用场景:
通常在 runtime_suspend 回调成功完成后调用,告知框架 “设备已进入低功耗”:

总结
这些函数共同构成了 PM Runtime 的状态管理体系:
pm_runtime_get_sync/pm_runtime_put 跟踪设备 “被使用” 状态;
pm_runtime_set_active/pm_runtime_set_suspended 手动设置状态标记;
pm_runtime_enable/pm_runtime_disable 控制 PM 机制的开关;
pm_runtime_idle 触发空闲检查,衔接至自动 suspend;
pm_runtime_status_suspended 用于查询当前状态。
正确组合使用这些函数,可实现设备在活跃时高效运行、空闲时自动进入低功耗的电源管理策略。

http://www.dtcms.com/a/549442.html

相关文章:

  • 激光驱鸟装置:技术原理、应用场景与综合优势全解析
  • 【Rust编程:从小白入坑】Rust结构体(Struct)详解
  • 【开题答辩实录分享】以《足球社区微信小程序》为例进行答辩实录分享
  • 哪个网站能帮助做试卷个人免费注册公司
  • 万国手表网站亚马逊企业网站建设
  • java对图片进行表单,生成本地图片或者流式输出
  • Python 虚拟环境:告别依赖冲突的实用指南
  • LP8773S第二代准谐振PWM控制器12V芯片内部框架图及应用信息介绍
  • Ruby Mysql:深度解析Ruby与MySQL的交互
  • 清空回收站后的文件还能恢复吗?分析原理,讲清方法
  • 怎样做外部网站推广郑州网站建设知识分享
  • 赋能采购革新:星合智联如何为企业开启TI芯片直采数字化新体验?
  • 构建可持续私域运营体系:从黑五营销到长期用户沉淀指南
  • 科技部网站php做网站不兼容ie8
  • 玉田网站制作wordpress百度mlp
  • Vite 大型项目优化方案
  • git处理分支
  • ELK日志系统部署与使用(Elasticsearch、Logstash、Kibana)
  • Gitee:代码管理
  • 购物网站建设论文织梦cms网站迁移
  • CP网站建设搭建需要多少钱大冶市城乡建设局网站
  • FramelessBaseWindow - 通用Qt无边框窗口基类
  • seo查询 站长工具利用织梦搭网站
  • 第238题 除自身以外数组的乘积
  • Vue 状态管理库相关收录
  • CG-5重力仪外壳漏电怎么办?
  • 商务网站规划与建设课设的项目需求seo网站有优化培训吗
  • 从 VLDB‘25 看向量数据库发展方向:行业观察与技术前瞻
  • 生鲜电商企业微信私域代运营:从去中心化运营看微盛AI·企微管家SCRM适配案例
  • 企业微信如何正确营销获客?精准定位与场景触达的实践框架