Android suspend底层流程解析

本文介绍了Android系统在长按电源键选择快速启动后,如何通过kernel suspend流程实现hibernate to disk。流程包括:Power manager调用kernel命令启动流程,进入disk hibernation或early suspend,进一步调用各驱动的suspend和resume方法,最后执行Linux标准的suspend流程,包括冻结进程、停用CPU、调用设备方法等。下篇将深入讨论hibernation的详细过程。
摘要由CSDN通过智能技术生成

刚做的一个项目,在Android上实现快速启动,先将原理叙述如下,当用户长按电源键,选择“下次开机快速启动”后,系统启动hibernate to disk的流程:

1. Power manager使用命令"echo disk > /sys/power/state"启动kernel suspend流程。其实Android进入省电模式(按键背景灯、屏幕关闭等)也是通过这种方式启动的,命令是"echo mem > /sys/power/state"

2. 上面命令会调用Power driver kernel/main.c中的sysfs state属性的state_store函数,在该函数中分别针对不同类型的suspend进行不同的处理。

3. 如果是suspend to disk会调用hibernate;

4. 如果是early suspend会调用request_suspend_state进行android的early suspend,它是android引入的新的省电机制,大致的动作就是通过suspend_work_queue调用early_suspend,该函数会调用early_suspend_handlers链表上每个节点的suspend方法,这些节点是各驱动在初始化时注册进来的,节点也有从省电状态进入正常状态的resume方法,不同设备驱动实现各自的两个函数,另外在每个节点也有对应level,该值决定了suspend、resume时的各节点被调用的顺序。搜索整个driver,发现synaptics的touch screen,iMX的framebuffer,mddi,console等几个驱动实现了early suspend机制。early_suspend函数最后会调用sys_sync,并释放main_wake_lock。当w

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值