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 )---待机流程相关推荐

  1. 详解关于MTK驱动开发学习教程

    MTK驱动开发学习教程是本文要介绍的内容,主要是来了解MTK的驱动开发的过程,文章中很详细的讲解了这个问题,具体内容来看本文详解. 一.Charge Parameters. 1.相关文件chr_par ...

  2. MTK 驱动开发(33)---Vibrator

    Vibrator 驱动开发相对比较简单 1.配置功能及参数 vibrator0:vibrator@0 {compatible = "mediatek,vibrator";vib_t ...

  3. MTK 驱动开发(35)---待机功耗分析流程

    1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法.  测试功耗数据之前,请先确认以下配置:  1.关闭 WIFI/BT/GPS,关闭数据 ...

  4. MTK 驱动开发(34)---待机功耗调试

    1.概要 待机平均电流非常容易出问题,也很难分析理清楚,应为涉及APK/Modem/Wifi这些不确定的因素,这类问题一定要遵循一个处理原则,到底在出现啥样的环境下复现,做几个实验,给出清晰的问题描述 ...

  5. MTK 驱动开发(39)--低功耗分析工具

    1.功耗问题抓日志 功耗问题抓log请遵循几条原则: ------------------------------------------------------------------------- ...

  6. MTK 驱动开发(42)---GAT 工具使用

    GAT 工具介绍: 1.关于GAT GAT是MTK在DDMS基础上进行二次开发封装的一个集多种debug功能为一体的工具,除了包含原有DDMS的功能以外还支持kernel抓取,获取native进程列表 ...

  7. MTK 驱动开发(17)---LCD MIPI

    1.LCD MIPI DSI协议 MIPI-DSI是一种应用于显示技术的串行接口,兼容DPI(显示像素接口,Display Pixel Interface).DBI(显示总线接口,Display Bu ...

  8. MTK 驱动开发(16)---LCM 移植

    对于LCM驱动移植,一般分为三部曲: 1.硬件IO口配置: 2.确保LCM背光能够正常点亮: 3.LCM驱动移植: 硬件电路: 1.GPIO配置 打开 mediatek\dct\DrvGen.exe ...

  9. MTK 驱动开发(5)---bootloader

    1.框架 MTK 平台的启动过程经过四个模块,分别是BootRom,Preloader,LK,Kernel. 2 .bootloader到kernel启动总逻辑流程图 3.Boot ROM Boot ...

最新文章

  1. 腾讯首个AI开源项目完成3.0版本迭代,从顶级开源基金会毕业
  2. MOSS2007 webcast系列(一)
  3. java学习视频网站_学习Java的视频网站
  4. ReentrantReadWriteLock源码解析
  5. 【渝粤题库】陕西师范大学201701 高等数学(二)作业 (高起本、专升本)
  6. 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
  7. Git得基本使用方法add、commit、push、checkout以及Pull
  8. Spring 依赖注入的实现
  9. java里有位移吗_Java 中位移运算符 ,,
  10. 【数据结构】栈、队列、堆的python实现
  11. $(...).modal is not a function
  12. 监管科技崛起:从FinTech到RegTech
  13. JavaSE基础学习
  14. [转]高品质开源工具Chloe.ORM:支持存储过程与Oracle
  15. “马赛克”真能去除了?老司机狂喜!这一神器一键去除!
  16. 硬盘驱动安装完成,但是没有显示?
  17. MySQL——————表的查询
  18. 苹果二代TWS无线耳机AirPods调研
  19. 关于工作与生活zz —— 转载
  20. 一天一篇latex刘海洋代码解析:1.2.3填写正文

热门文章

  1. 【c语言】关键字存储类型讲解(auto,extern,static,register,const)
  2. java suppresslint_Java 注解用法详解——@SuppressWarnings
  3. 计算机配置型号及主要技术指标,显卡性能看什么参数(新手必备的显卡性能知识全解)...
  4. mysql改utf8mb4后速度慢_更改MySQL数据库的编码为utf8mb4
  5. c/c++通用头文件
  6. linux下配置squid 服务器,最简单使用方式
  7. Xamarin.Android 隐藏软键盘
  8. 群赛 ZOJ3741(dp) ZOJ3911(线段树)
  9. final、finally、finalize差异
  10. Python: 如何继承str/string?