【Android休眠】引申之关于系统PM的思考

本文深入探讨Android系统的电源管理(PM),关注休眠过程涉及的用户空间、CPU内核层面及外设的交互。用户空间通过消息通知内核是否允许休眠,内核负责CPU的休眠模式控制及驱动程序的休眠逻辑。外设分为自带CPU和被动型,休眠策略各异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/u013686019/article/details/54668873

一、开篇

对于一个完整的系统,我们在做PM(Power Manager)相关的事情时,应该(至少)其休眠涉及三个部分:

  • 用户(User Space)
  • CPU(Kernel)
  • 外设

关系图示:


二、用户(User Space)

作为完成具体业务的角色,它产生是否允许系统进行休眠的消息。Kernel对消息做出休眠/继续工作的反应。
比如:
Android设备后台在播放音乐,那么播放器就会采取一定方式(比如休眠锁的方式)告知系统不能休眠;Kernel得到禁止休眠的消息就一直处于工作状态。


三、CPU(Kernel)

这里,CPU针对硬件,Kernel针对运行在CPU中的软件(Linux)。CPU硬件支持某几种休眠模式,由Kernel实现对这几种休眠模式的控制。
Kernel除了控制CPU外,还提供了访问各种外设的驱动程序;驱动程序中,有一部分代码就是做休眠之类的工作,比如常见的:

#ifdef CONFIG_PM
static int xxx_suspend(struct platform_device *dev, pm_message_t state)
{
}

static int xxx_resume(struct platform_device *dev)
{
}

#else
#define xxx_suspend NULL
#define xxx_resume  NULL
#endif

static struct platform_driver xxx_driver = {
    .suspend= xxx_suspend,
    .resume = xxx_resume,
};


Kernel进入休眠时,调用驱动注册的xxx_suspend()函数,唤醒时调用xxx_resume()函数。

四、外设

这里把外设分作两类:
自带CPU类型的外设:即外设有自己的控制中心,比如4G模组。这种情况下,在休眠/唤醒动作发生时,通过通信链路告知外设执行休眠/唤醒。
被动外设:外设的行为完全由Kernel控制,典型的就是LED。这种情况下的休眠/唤醒比较简单,按照外设支持的方式操作即可
最简单的方式就是断电/上电。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值