autosleep一种强大的电源管理方法,只要在系统没有什么事情可做的时候,整个系统就睡眠下去。此机制在android手机上非常有效,同时也能阻止不良应用程序一直保持系统唤醒,浪费电池。
前言 之前说过Google为了在user space阻止系统suspend,为Android设计出一套新的电源管理: wakelocks, early_suspend等。...此机制修改了Linux原生的susupend流程,定义子自己的休眠接口。起初Android为了合入此patch和Linux内核开发者有一段时间的讨论。...比如此地址:http://lwn.net/Articles/318611/ 但是在Linux合入wakeup event framework,提出了wakeup source概念,同时解决suspend...Android也随之抛弃了自己的wakelocks机制,重新利用Linux中wakeup source,设计了全新的wakelock。
这些方法在linux操作系统中已经做了统一的实现: suspend/resume机制。本节就简单认识下linux下的电源管理。...电源状态 On (on) S0-Working Standby (standby) S1- CPU and...如果你用的是linux,就可以直接通过命令行操作,以我的系统Ubuntu为例子: 1.
前言 现如今,Linux处理器电源管理重点聚焦在处理器处于运行状态时对其进行电源管理,主要的技术是Cpufreq: 根据cpu的负载,实时的改变cpu的频率或这电压,同时管理处理器的性能水平和电源功耗等...面对在火热移动处理器市场的前提下,众多处理器都亟待加入到空闲状态下进行功耗管理,这时候linux系统就需要一套通用的架构来管理这些cpu,这就是本文的标题: Linux Cpuidle Framework...linux使用cpuidle_state结构用来表示各个idle状态。...linux使用cpuidle_driver结构来表示cpuidle的驱动。...linux系统使用cpuidle_device结构抽象每个cpu core,可以简单认为cpuidle_device对应到每个cpu core上。
Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对系统待机的支持和每个设备的运行时(Runtime)电源管理,可以说它和系统中的每个设备驱动都息息相关。...对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图呈现了 Linux 内核电源管理的整体架构。...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...这通常是由于与这个按键对应的输入设备驱动汇报了一个和电源相关的input_event,用户空间的电源管理daemon进程收到这个事件后,再触发s2ram的。...Linux运行时PM最早是在Linux2.6.32内核中被合并的。
前言 根据上一节linux电源管理-概述可知,linux电源管理存在的几种方式,如何查看这几种方式,以及最后的如何睡眠唤醒等。
有些设备只需要enable/disable电源即可,而有些设备在运行的过程中需要动态的改变voltage或者current,Linux regulator Framework会如何处理这些问题?....uV_offset: consumer看到的电源和实际电源之间的偏移值,用于电源补偿。 .min_uA/max_uA: 最小/最大的输出电流。....ramp_delay: 改变电压到电源稳定后时间。因为硬件原因,改变电源后不能立刻就成功,其中需要有一定的延迟。 .enable_time: regulator的使能时间。...第二个参数代表regulator的动态配置信息。...struct regulator_config代表regulator的动态配置信息。
Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。...改变设备的电源状态需要整个平台的支持。 b. 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。 c....Runtime PM数据段 在每个device结构中都存在dev_pm_info的结构,此结构中通过CONFIG_PM_RUNTIME配置字段代码了Runtime PM的信息。...Runtime PM举例 写了一个简单的测试runtime测试例子,如下: #include #include #include #include #include #include #include <
那Linux内核到底是如何记录这两个变量呢? linux中使用一个原子变量,高16位记录系统所有的wakeup event总数,低16位记录是否有wakeup events在处理中。...那接着再用linux中的实现方法回答上述的问题: wakeup event framework是如何保存当前系统中所有的wakeup event?
#include #include #include #include ...#include #include #include <linux/regulator/machine.h...所以必须实现一个consumer设备,代码如下: #include #include #include #...include #include #include static...分配regulator_dev结构rdev,解析machine信息,也就是regulator的板级信息,如果解析不到,就使用config中的init_data。 3.
系统睡眠的时候会把系统的状态信息保存到内存,然后内存要保持供电,其它设备都可以断电。系统休眠的时候会把系统的状态信息保存到磁盘,此时整个系统都可以断电,就和关机一样。...对于休眠来说,就只有电源按钮能唤醒系统了。休眠一方面和睡眠比较像,都保存了系统的状态信息,一方面又和关机比较像,整个系统都断电了。 重启和关机的关系比较密切,重启相当于是关机再开机。...下面我们画个图总结一下电源管理: 二、睡眠与休眠 睡眠和休眠的整体过程是相似的,都是暂停系统的运行、保存系统信息、关闭全部或大部分硬件的供电,当被唤醒时的过程正好相反,先恢复供电,然后恢复系统的运行...,再恢复之前保存的信息,然后就可以正常使用了。...6.2 设备级约束 暂略 linux-src/drivers/base/power/qos.c 七、总结回顾 通过本文我们对计算机的电源管理有了一个基本的了解,下面我们再看图回忆一下: 电源管理分为电源状态管理和省电管理两个重要组成部分
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。...下面,我们可以看看linux是如何处理电源管理驱动的。...framework is designed to provide a generic interface to voltage and current regulators within the Linux
Linux系统中的电源管理一般是冷睡眠,而Android系统却将linux系统中的睡眠作为通常待机使用,显然Linux中的电源管理不符合Android系统。...所以Linux在2.6.36中引入了wakeup events framework机制,用来解决suspend和wakeup events之间的同步问题。...struct dev_pm_info power; struct dev_pm_domain *pm_domain; ... } 其中dev_pm_info代表该设备pm相关的详细信息。...Sys接口 为了方便查看系统的wakeup sources,linux系统在/sys/kernel/debug下创建了一个"wakeup_sources"文件,此文件记录了系统的唤醒源的详细信息。...wakeup_sources", S_IRUGO, NULL, NULL, &wakeup_sources_stats_fops); return 0; } 以下是手机上的wakeup sources信息
1、Linux 电源管理的组成 电源管理(Power Management)在 Linux Kernel 中,是一个比较庞大的子系统,涉及到供电(Power Supply)、充电(Charger)、时钟...注3:Runtime PM 是 Linux Kernel 亲生的运行时电源管理机制,Wakelock 是由 Android 提出的机制。这两种机制的目的是一样的,因此只需要支持一种即可。...include/linux/cpu_pm.h include/linux/device.h include/linux/pm.h include/linux/pm_domain.h include/linux.../xxx.txt 电源管理的东西很多,大家没必要每个都学一遍,用到的时候去研究即可。...研究了一下 Linux 电源管理子系统,发现 Qos 有接口可以使用:在某一段时间内拉 Qos,可以让 CPU 在这段时间不进入 idle,使用完毕再去掉 Qos,让 CPU 可以进入 idle,这样满足了性能需求
同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store...以阻止睡眠、注销wakelock以允许睡眠:已经由“Linux电源管理(7)_Wakeup events framework”所描述的wakeup source取代。...wake_lock,获取系统中所有的处于active状态的wakelock列表(也即wakeup source列表) 读wake_unlock,返回系统中所有的处于非active状态的wakelock信息...注1:上面有关wakeup source的操作接口,可参考“Linux电源管理(7)_Wakeup events framework”。...因此,最好不销毁,保留系统所有的wakelocks(同时可以完整的保留wakelock信息),但如果wakelocks太多(特别是不活动的),将会占用很多内存,也不合理。
Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。...改变设备的电源状态需要整个平台的支持。 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。...Runtime PM数据段 在每个device结构中都存在dev_pm_info的结构,此结构中通过CONFIG_PM_RUNTIME配置字段代码了Runtime PM的信息。... #include #include #include #include... #include static int runtime_pm_probe(struct platform_device *
前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。...而在运行时的电源管理过程中,系统何时进入低功耗状态,也不是用户空间程序能决定的(auto sleep中枪了)。...只有具备唤醒能力的设备,才会在sysfs中有一个power目录,用于提供所有的wakeup信息,这些信息是以struct wakeup_source的形式组织起来的。也就是上面wakeup指针。...具体有哪些信息呢?让我们看看struct wakeup_source的定义。...这表现在suspend过程中频繁调用pm_wakeup_pending接口上(可参考“Linux电源管理(6)_Generic PM之Suspend功能”)。
OPP library的源代码路径在drivers/base/power/opp.c,头文件路径在include/linux/pm_opp.h中。...用户为设备(比如CPU)配置/注册一些默认的opp信息。 b. Soc会根据具体的运行情况,通过opp层去改变/查询设备的opp信息。...Linux系统使用struct device_opp结构表示opp设备。....opp_list: opp设备具有的opp数据信息。...可以看到所有的opp设备使用dev_opp_list组织,在每个opp设备(struct dev_opp)中存在着不同的opp数据信息,这些opp信息使用struce dev_pm_opp表示。
//用来定义按键产生事件时,要上传什么按键值 .desc = "power key", //描述信息.../module.h> #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
领取专属 10元无门槛券
手把手带您无忧上云