电源管理之android内核suspend to disk的实现(三)

android内核的电源管理(PM) Android定义了几种低功耗的状态:earlysuspend(挂起早期),suspend(挂起),hibernation(休眠)。之所以增加了节能的复杂性,主要考虑到android设备在有程序运行时同样需要进行节能这种特殊需求,以及考虑了外设(比如wifi、led等)单独节能的需求。 其中earlysuspend是一种低功耗的状态,某些设备可以选择进入某种功耗较低的状态,比如LCD可以降低亮度 阅读详情

二、Android 休眠(suspend)介绍

    1、android系统休眠的简单介绍

    android系统用的也是linux内核,但是他也是有不同的,由于它的特殊性,故代码在linux内核休眠基础上进行了整改。

    下面是对android内核已经实现的suspend做一个讲解,suspend to disk将会在调试的文件中涉及。

    在一个打过android补丁的内核中,state_store()函数会走另外一条路,会进入到request_suspend_state()中,这个文件在earlysuspend.c中.这些功能都是android系统加的,后面会对earlysuspend和lateresume进行介绍。

    涉及到的文件:

    android4.1/kernel/power/main.c

    android4.1/kernel/power/earlysuspend.c

    android4.1/kernel/power/wakelock.c

    2、android系统休眠涉及的几个特点

    下面介绍几个android系统涉及的比较独特的特性

    1)EarlySuspend

    Early suspend是android引进的一种机制,这个机制作用在关闭显示的时候,一些和显示有关的设备,比如LCD背光,重力感应器,触摸屏,这些设备都会关掉,但是系统可能还是在运行状态(这时候还有wakelock)进行任务的处理,例如在扫描SD卡上的文件等.在嵌入式设备中,背光是一个很大的电源消耗,所以android会加入这样一种机制。

    2)LateResume

    Late Resume是和suspend配套的一种机制,是在内核唤醒完毕开始执行的,主要就是唤醒在EarlySuspend的时候休眠的设备.当所有的唤醒已经结束以后,用户进程都已经开始运行了,唤醒通常会是以下的几种原因:

    来电

    如果是来电,那么Modem会通过发送命令给rild来让rild通知WindowManager有来电响应,这样就会远程调用PowerManagerService来写"on"到/sys/power/state来执行lateresume的设备,比如点亮屏幕等.

    用户按键用户按键事件会送到WindowManager中,WindowManager会处理这些按键事件,按键分为几种情况,如果案件不是唤醒键(能够唤醒系统的按键)那么WindowManager会主动放弃wakeLock来使系统进入再次休眠,如果按键是唤醒键,那么WindowManger就会调用PowerManagerService中的接口来执行Late Resume.

Late Resume会依次唤醒前面调用了EarlySuspend的设备.

    3)WakeLock

    Wake Lock在Android的电源管理系统中扮演一个核心的角色.WakeLock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。

    4)AndroidSuspend

当用户写入mem或者standby到/sys/power/state中的时候,state_store()会被调用,然后Android会在这里调用request_suspend_state()而标准的Linux会在这里进入enter_state()这个函数.如果请求的是休眠,那么early_suspend这个workqueue就会被调用,并且进入early_suspend状态。调用request_suspend_state()后在suspend_work_queue工作线程上面注册一个early_suspend_work工作者,

    然后又通过staticDECLARE_WORK(early_suspend_work,early_suspend);注册一个工作任务early_suspend。所以系统最终会调用early_suspend函数。

    5)注册加入suspend和resume流程

platform_device_register()-->platform_device_add()-->device_add()-->device_pm_add()-->,最终加入到了dpm_list的链表中,在其中的dpm_suspend和dpm_suspend中通过遍历这个链表来进行查看哪个device中包含suspend和resume项。

个人观点,有问题请斧正!!

    转载请注明出处:http://blog.youkuaiyun.com/wang_zheng_kai


RK3399平台开发系列讲解(电源管理篇)11.10、linux suspend resume 流程 linux suspend resume 流程 阅读详情

相关推荐

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

电源管理之android内核suspend to disk的实现(一)

最近刚刚做了一份关于电源管理中android系统suspend to disk的实现研究学习报告,最近比较清闲就简单做了整理。 我是基于北京君正jz4780grus开发板做的探究,我将要在这几天按照下面做一个学习报告,其内容如下所示: 一、Linux休眠/唤醒简介 1、介绍Linux系统的Suspend的四种状态 2、Linux系统的休眠的步骤 3、用户空间接口 4、Linux S

中华田园犬 6847

ADS1256单端vs差分接法详解:在STM32上实现8通道电压采集与4通道差分测量的实战对比

本文深入解析ADS1256在STM32平台上的单端8通道与差分4通道电压采集方案,详细对比两种接法的硬件设计、软件配置及性能差异。通过CubeMX配置SPI接口和优化数据读取时序,实现高精度测量,适用于工业监测等高要求场景。

weixin_29165465的博客 245

【Android】 android suspend/resume总结(1)

芯片(SoC)上系统的电源状态有:on、idle和suspend。On表示SoC正在运行。Idle是一种中等功率模式,在这种模式下,SoC是通电的,但不执行任何任务。Suspend是一种低功耗模式,其中SoC没有供电。在此模式下,设备的功耗通常比“On” 模式低100倍。

weixin_41028159的博客 7560

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 515

Backblaze 2025全年硬盘故障率报告解读

作为长期追踪存储行业动态的科技博主,每年/季度Backblaze的Drive Stats报告都是我重点关注的核心内容——不同于厂商发布的实验室数据,Backblaze以近13年、数十万片企业级硬盘的真实运行数据为基础,其年化故障率(AFR)、寿命趋势等结论,直接反映了硬盘在严苛数据中心环境下的真实表现,无论是企业存储选型还是个人高端存储参考,都具备极高的实用价值。2025年末,Backblaze发布了第13年的年度收官报告,涵盖2025年Q4、全年及终身硬盘可靠性数据。

存储随笔 4020

电源管理之android内核suspend to disk的实现(七)--方案的选择与问题解决

一、实现android系统hibernation的方案分析: 实现方案分析:       方案一: linux标准内核实现       android标准内核的代码是由linux内核演变而来,只要解决android系统独特的wakelock问题,并提供交换分区的支持,就能实现android系统的hibernation。       方案二: tuxonice内核补丁实现     t

中华田园犬 4369

29、网络支持技术:CDN、覆盖网络与无标度网络解析

本文详细解析了CDN路由方式与性能指标,探讨了覆盖网络与无标度网络的特性及其在云计算和现代网络中的应用。文章分析了CDN的关键技术与挑战,介绍了覆盖网络与小世界网络的基本原理,并深入讨论了无标度网络的构建算法、性能优化策略以及在多个领域的应用案例。最后,文章展望了未来网络技术发展趋势与无标度网络的结合潜力。

night的博客 91

电源管理之android内核suspend to disk的实现(四)

3、Android的suspend执行流程     函数的流程如下所示:     应用程序通过对/sys/power/state的写入操作可以使系统进行休眠的状态,会调用/kernel/power/main.c中的state_store函数。pm_states包括:PM_SUSPEND_ON,PM_SUSPEND_STANDBY,PM_SUSPEND_MEM满足的状态。     1)当状态位

中华田园犬 3714

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2952

【libnice】meson + vs2022,生成win32工程

libnice

突围 947

电源管理之android内核suspend to disk的实现(八)--suspend to disk调试数据统计与总结

suspend to disk数据统计 该测试基于jz4780grus开发板。 时间统计:   1)开机(只有地图运行)内核启动的时间统计       准备时间    搬移镜像    恢复现场    搬移速度    镜像大小    总计   第一次  4.43s   25.28s  3.90s   15.32M/s    387348K   33.70s   第

中华田园犬 4252

Opencv项目实战:20 单手识别数字0到5

今天要做的是单手识别数字0到5,通过在窗口展示,实时的展示相应的图片以及文字。在这里,我提供一下识别更多数字的方法(0-10)。首先最简便的是双手识别,完全不用更改代码,把图片处理好就行了;其次,就是按照最上面的那张图片,参数figureup是一个长度为5的列表[0,0,0,0,0],你可以参照着手势将其打印出来,然后将其用if条件判断。当然,在我们这边最常见的还是华北手势表示数字,大家按照自己的习惯来就行。

m0_62919535的博客 2878

电源管理之android内核suspend to disk的实现(二)

4、Linux Suspend 的流程     相关的文件下面是文件的路径:android4.0/kernel/kernel/power/     接下来让我们详细的看一下Linux是怎么休眠/唤醒的:     (1)用户对于/sys/power/state的读写会调用到main.c中的state_store(),用户可以写入constchar * const pm_state[] 中定义的

中华田园犬 4655

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

嵌入式系统电源管理

1、电源管理 1.1 概述 目的: 在系统可维持正常所期望工作状态的情况下,尽可能降低功耗。Linux电源管理涉及到系统待机,频率电压变换,系统空闲处理,运行时期电源管理等多个方面。 措施: 《Linux设备驱动开发详解》一书中对电源管理的总结: 1.2 单片机 对于51单片机的电源管理,提供了低速,空闲和掉电三种模式来省电。 通过分频使系统降频工作 空闲...

风雨无阻 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux 电源管理源码分析3,基于Android的Linux内核的电源管理:Early Suspend

3. 工作流程首先,我们从kernel/power/wakelock.c中的初始化函数开始:staticint__initwakelocks_init(void){intret;inti;......for(i=0;iINIT_LIST_HEAD(&active_wake_locks[i]);......wake_lock_init(&main_wake_lock,WA...

weixin_30592887的博客 289

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

基于Android的Linux内核的电源管理:概述

1.  电源管理的状态 Android的Linux内核为系统提供了4种电源状态,内核的源代码为其中的3种定义了名字和对应的宏定义,名字定义在kernel/power/suspend.c中: const char *const pm_states[PM_SUSPEND_MAX] = { #ifdef CONFIG_EARLYSUSPEND [PM_SUSPEND_ON] = "on",

DroidPhone的专栏 1万+

电源管理之android内核suspend to disk的实现(九)--tuxonice实现方案

完成在标准内核基础上的android系统的suspend to disk后,又采取了tuxonice补丁的方式进行比较,发现由于压缩的缘故,速度有所提高10s左右。 该范方案的实现我是根据我的一位离职的同事写学习笔记进行测试,实验证明是可行的,以下部分程序的讲解我也直接进行了引用。 要是大家遇到啥问题,可以一起讨论。。。。。 概要: 1. 目标 2. 概要 3. 操作流程 4.

中华田园犬 7082

Android 内核驱动——电源管理

1.1基本原理 Android 中定义了几种低功耗状态:earlysuspend,suspend,hibernation。  earlysuspend 是一种低功耗的状态,某些设备可以选择进入某种功耗较低的状态,比如 LCD 可以降低亮度或灭掉;  suspend 是指除电源管理以外的其他外围模块以及 cpu 均不工作,只有内存保持自刷新的 状态;  hibernation 是指

wangqiaozhi的专栏 1130

android电源管理-休眠简要分析

Android电源管理-休眠简要分析 工作需要,需要对这一块深入学习。故在此做一点分析记录,存疑解惑。 一、开篇  1.Linux 描述的电源状态  - On(on)                                                 S0 -  Working - Standby (standby)                         

CCJHDOPC的专栏: 1650

电源管理之android内核suspend to disk的实现(五)--STR执行流程图

三、Android 休眠(suspend to RAM)程序自行流程图(自己手工绘制,有错误请指正)

中华田园犬 4510
上一篇: 电源管理之android内核suspend to disk的实现(二)
下一篇: 电源管理之android内核suspend to disk的实现(四)
中華田園犬
博客等级 码龄16年 349粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值