runtime suspend
http://leave001.blog.163.com/blog/static/16269129320117301213564/
所谓runtime suspend,就是说设备在空闲时进入suspend状态,不依赖android的wake lock机制,也就是不需要整个系统进入suspend状态。
kernnel使用pm线程来处理runtime suspend。
pm线程的创建(kernel/power/main.c):
pm_init() // 放在core_initcall中
pm_start_workqueue()
pm_wq = create_freezeable_workqueue("pm"); //创建了pm线程
runtime suspend流程:
目前我只看到usb core和某些网络驱动使用了该机制。以r8169.c为例,rtl8169_pm_ops挂载了runtime_suspend/runtime_resume/runtime_idle三个回调。这三个回调会由pm线程调用。
在rtl8169_check_link_status中,若检测到连接断开,则调用runtime提供的api来尝试进入suspend状态:
pm_schedule_suspend(&tp->pci_dev->dev, 100);
pm_schedule_suspend()中,若delay为0,则立刻往pm_wq线程中添加pm_runtime_work,否则修改struct device的power.suspend_timer,在timer超时后再执行以上动作。
pm_runtime_work delay work被执行,最终会执行dev->bus->pm->runtime_suspend(dev),即driver中注册的dev_pm_ops回调函数。
注释,在笔者目前的系统中,CONFIG_PM_RUNTIME是merge android-base.cfg and android-recommended.cfg之后才有的。可考虑去掉。
(在android-recommended.cfg中有CONFIG_PM_RUNTIME=y)
参考
http://www.360doc.com/content/11/1226/10/8157643_175034156.shtml
runtime suspend相关推荐
- linux runtime pm机制的深入理解
一:runtime机制说明 何为runtime机制?也就是系统在非睡眠状态,设备在空闲时可以进入runtime suspend状态同时不依赖系统wake_lock机制,非空闲时执行runtime re ...
- Linux电源管理之Runtime PM
作者简介:Loopers,码龄11年,喜欢研究内核基本原理 前言 什么是Runtime PM? Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理.主 ...
- linux内核3.4基于wakeup_source的autosleep机制分析
点击打开链接 一:wakeup_source简介: linux 3.4内核PM使用了wakeup_source来保持唤醒状态,也就是keep awake.之前android一直是基于Linux加入了w ...
- Linux驱动——mmc数据结构(二)
Linux驱动--mmc数据结构(二) 备注: 1. Kernel版本:5.4 2. 使用工具:Source Insight 4.0 3. 参考博客: 2. [mmc subsystem] ...
- 待机时反复按Power键概率性重启-定位问题
现象: 待机时反复按power键休眠会有概率性重启,概率 >= 50%,但连接USB线情况下不会出现,所有怀疑是系统进入休眠才发生了异常,取出mtklog看到有db产生,确实发生了KE(kern ...
- Linux _PM_OPS
1. 前言 Linux电源管理中,相当多的部分是在处理Hibernate.Suspend.Runtime PM等功能.而这些功能都基于一套相似的逻辑,即"Power management i ...
- linux编译运行uart,Kindle4: 编译并运行upstream linux kernel – v4.4
Kindle4官方提供的Linux kernel版本为2.6.31, 已经算是很旧版本的kernel了.当前最新版本的linux kernel为4.5,而brillo-m10-dev arm emu ...
- Android电源管理介绍
一.电源管理基础知识 1.1电源管理的几种状态 Android kernel源码中,定义了三种电源状态,在kernel/power/suspend.c中: 对应的宏定义/include/linux/s ...
- linux SPI驱动开发
一,linux内核设备驱动分三类 1,字符设备驱动:按字节来访问设备,字符驱动负责驱动字符设备,这样的驱动通常实现open,close,read,write系统调用. 特点:操作的硬件,按照字节流形式 ...
最新文章
- Simulink触发子系统使用方法
- SAP CRM里使用BAdI阻止产品主数据保存的一种办法
- 看似简单的dual,其实深藏玄机
- 20191011:冒泡排序的改良版--Shaker排序
- 利用opencv中的级联分类器进行人脸检測-opencv学习(1)
- 关于android:layout_weight
- [HDU 1430] 魔板
- 智慧职教云答案在哪里找_智慧职教经济数学答案,智慧职教云答案在哪里找,智慧职教云答案去哪找...
- 北辰创业笔记:百度霸屏之长尾关键词是什么
- 世界首富马斯克的编程水平怎么样?
- 计算机英语性考任务答案,国开电大理工英语1单元自测7形考任务答案
- 前端如何创建好看的简洁的蒙版弹窗
- C语言:va_list
- 五·C语言之·操作符这么有趣的嘛?
- 免费使用chatgpt的网站集合:
- Apple Watch 的传感器
- Numpy中使用astype函数将字符串格式数据转换为数值数据类型
- 统计英文字符串里重复次数最多的单词JAVA
- 推荐一款图片放大不失真的软件-PhotoZoom
- 七、Linux入门之磁盘存储和文件系统