MTK 驱动开发(39 )---待机流程
MTK kernel待机流程
echomem > /sys/power/state [android层调用节点]
state_store() [kernel/power/main.c]
1|↘pm_suspend() [PM: suspend entry 2016-02-22…年月日UTC] 进入suspend时间
2|↘enter_state()
2.1∣↘suspend_syssync_enqueue() [PM:syncyingfile systems …done]
2.2∣↘suspend_prepare() [alluser serves suspend here]
2.2.1∣↘pm_prepare_console()
2.2.2∣↘pm_notifier_call_chain() [PM_SUSPEND_PREPARE:start]
2.2.3∣↘suspend_freeze_processes()
2.2.3.1∣↘freeze_proceses() [Freezing user spaceprocesses…]
2.2.3.2∣↘freeze_kernel_threads()[Freezing remaining freezable…]
2.3∣↘suspend_devices_and_enter() //allextern devices supend here
2.3.1∣↘platform_suspend_begin()
2.3.2∣↘suspend_console() [Suspendingconsole(s) (use no_console_suspend to debug)]关闭串口
2.3.3∣↘dpm_suspend_start()
2.3.3.1∣↘dpm_suspend() [PM:suspend of devices complete after…]
2.3.4∣↘suspend_enter()
2.3.4.1∣↘platform_suspend_prepare()
2.3.4.2∣↘dpm_suspend_late() [PM:late suspend of…]
2.3.4.3∣↘platform_suspend_prepare_late()
2.3.4.4∣↘dpm_suspend_noirq() [PM:noirq suspend of禁止中断]
2.3.4.5∣platform_suspend_prepare_noirq()
2.3.4.5.1∣↘suspend_ops->prepare_late() //准备待机,进行检查
2.3.4.6∣↘disable_nonboot_cpus() [Disabling non-boot CPUs…]
2.3.4.7∣↘arch_suspend_disable_iqrs()
2.3.4.8∣↘syscore_suspend()
2.3.4.9∣↘suspend_ops->enter() //真正待机
接着是唤醒流程
1 suspend_enter()
1.1∣↘syscore_resume()
1.3∣↘arch_suspend_enable_iqrs() [打开中断]
1.4∣↘enable_nonboot_cpus() [Enabling non-boot CPUs ...]
1.5∣↘platform_resume_noirq()
1.5.1∣↘suspend_ops->wake() //准备唤醒,进行检查
1.5∣↘dpm_resume_noirq() [PM: noirq resume ofdevices… ]
1.6∣↘dpm_resume_early() [PM:early resume of devices…]
1.7∣↘platform_resume_finish()
1.7.1∣↘suspend_ops->finish()
2∣↘suspend_devices_and_enter()
2.1∣↘suspend_ops->again() [all extern devices supend here…]
2.2∣↘dpm_resume_end() [PM:resume of devices complete…]
2.3∣↘resume_console()
3∣↘enter_state()
3.1∣↘suspend_finish() [解冻进程和服务]
4∣↘pm_suspend() [PM: suspend exit…]
大体框架如下:
待机
1|↘pm_suspend()
2|↘enter_state() [冻结用户态进程和内核态任务]
2.3∣↘suspend_devices_and_enter() [调用外设(非系统设备)的suspend的回调函数]
2.3.4∣↘suspend_enter()[按照注册顺序休眠核心设备和使CPU进入休眠态。]
唤醒
1 suspend_enter()
2∣↘suspend_devices_and_enter()
3∣↘enter_state()
4∣↘pm_suspend()
由此可见,睡眠与唤醒的过程是对称的, 睡眠走了多少步,退出睡眠的过程一步不能少的唤醒,类似一种“回滚”过程。
MTK 驱动开发(39 )---待机流程相关推荐
- 详解关于MTK驱动开发学习教程
MTK驱动开发学习教程是本文要介绍的内容,主要是来了解MTK的驱动开发的过程,文章中很详细的讲解了这个问题,具体内容来看本文详解. 一.Charge Parameters. 1.相关文件chr_par ...
- MTK 驱动开发(33)---Vibrator
Vibrator 驱动开发相对比较简单 1.配置功能及参数 vibrator0:vibrator@0 {compatible = "mediatek,vibrator";vib_t ...
- MTK 驱动开发(35)---待机功耗分析流程
1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认以下配置: 1.关闭 WIFI/BT/GPS,关闭数据 ...
- MTK 驱动开发(34)---待机功耗调试
1.概要 待机平均电流非常容易出问题,也很难分析理清楚,应为涉及APK/Modem/Wifi这些不确定的因素,这类问题一定要遵循一个处理原则,到底在出现啥样的环境下复现,做几个实验,给出清晰的问题描述 ...
- MTK 驱动开发(39)--低功耗分析工具
1.功耗问题抓日志 功耗问题抓log请遵循几条原则: ------------------------------------------------------------------------- ...
- MTK 驱动开发(42)---GAT 工具使用
GAT 工具介绍: 1.关于GAT GAT是MTK在DDMS基础上进行二次开发封装的一个集多种debug功能为一体的工具,除了包含原有DDMS的功能以外还支持kernel抓取,获取native进程列表 ...
- MTK 驱动开发(17)---LCD MIPI
1.LCD MIPI DSI协议 MIPI-DSI是一种应用于显示技术的串行接口,兼容DPI(显示像素接口,Display Pixel Interface).DBI(显示总线接口,Display Bu ...
- MTK 驱动开发(16)---LCM 移植
对于LCM驱动移植,一般分为三部曲: 1.硬件IO口配置: 2.确保LCM背光能够正常点亮: 3.LCM驱动移植: 硬件电路: 1.GPIO配置 打开 mediatek\dct\DrvGen.exe ...
- MTK 驱动开发(5)---bootloader
1.框架 MTK 平台的启动过程经过四个模块,分别是BootRom,Preloader,LK,Kernel. 2 .bootloader到kernel启动总逻辑流程图 3.Boot ROM Boot ...
最新文章
- 腾讯首个AI开源项目完成3.0版本迭代,从顶级开源基金会毕业
- MOSS2007 webcast系列(一)
- java学习视频网站_学习Java的视频网站
- ReentrantReadWriteLock源码解析
- 【渝粤题库】陕西师范大学201701 高等数学(二)作业 (高起本、专升本)
- 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
- Git得基本使用方法add、commit、push、checkout以及Pull
- Spring 依赖注入的实现
- java里有位移吗_Java 中位移运算符 ,,
- 【数据结构】栈、队列、堆的python实现
- $(...).modal is not a function
- 监管科技崛起:从FinTech到RegTech
- JavaSE基础学习
- [转]高品质开源工具Chloe.ORM:支持存储过程与Oracle
- “马赛克”真能去除了?老司机狂喜!这一神器一键去除!
- 硬盘驱动安装完成,但是没有显示?
- MySQL——————表的查询
- 苹果二代TWS无线耳机AirPods调研
- 关于工作与生活zz —— 转载
- 一天一篇latex刘海洋代码解析:1.2.3填写正文
热门文章
- 【c语言】关键字存储类型讲解(auto,extern,static,register,const)
- java suppresslint_Java 注解用法详解——@SuppressWarnings
- 计算机配置型号及主要技术指标,显卡性能看什么参数(新手必备的显卡性能知识全解)...
- mysql改utf8mb4后速度慢_更改MySQL数据库的编码为utf8mb4
- c/c++通用头文件
- linux下配置squid 服务器,最简单使用方式
- Xamarin.Android 隐藏软键盘
- 群赛 ZOJ3741(dp) ZOJ3911(线段树)
- final、finally、finalize差异
- Python: 如何继承str/string?