android 内核power电源管理

本文探讨了基于Linux内核的Android系统在电源管理方面的改进。重点在于suspend_prepare和suspend_devices_and_enter两个阶段的详细解释,以及如何注册设备的suspend和resume函数。在Android的电源管理中,通过设备文件控制休眠状态,并使用queue_work实现不同模块的管理。在SMDKC11平台上,为了解决内核休眠时关闭console导致调试困难的问题,建议修改samsung.c中的代码,取消serial设备的suspend和resume操作,以保持console在休眠期间的打印能力。
摘要由CSDN通过智能技术生成

linux内核有一套电源管理的机制,休眠/唤醒在嵌入式Linux中是非常重要的部分,而android是基于linux内核的,它在此机制基本上作了改进。

本文只是针对参考代码总结的具体性的知识,其它有关系统知识网上一大堆,可自己搜索学习。

 

关于这部分我曾经写了份PPT作为内部技术交流稿,可下载参考下:http://download.csdn.net/detail/yunjinwang/4698512

 

一,设备文件的生成:/sys/power/state
内核中的相关文件:
Kernel/power/main.c
Kernel/power/suspend.c
 
注册pm的流程:
static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,   const char *buf, size_t n);
static struct attribute * g[] = {&state_attr.attr, ……
static struct attribute_group attr_group = {.attrs = g,};
static int __init pm_init(void);
core_initcall(pm_init);
 
注册后生成/sys /power/state 文件,用户可以通过读写sys文件/sys /power/state 是实现控制系统休眠\唤酲
echo on/mem > /sys/power/state
 
enter_state 是负责处理进入何种状态的函数。在linux里,电源管理基本都经过如下几步:
1. suspend_prepare():分配console终端、广播notify、冻结所有进程、保存当前状态
2. suspend_enter():休眠所有外设、关闭irq、休眠系统设备和总线、cpu省电状态
3. suspend_finish():恢复所有的进程
 
休眠的三个主要步骤:
a,冻结用户态进程和内核态任务
b,调用注册设备的suspend回调函数
c,停止内核态所有进程,保存上下文,使CPU进入休眠。
 
 
唤醒条件:中断或事件唤醒系统
唤醒顺序:
系统设备与总线最先唤醒
恢复内核态进程
重启各个设备
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值