前言 之前说过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。
autosleep一种强大的电源管理方法,只要在系统没有什么事情可做的时候,整个系统就睡眠下去。此机制在android手机上非常有效,同时也能阻止不良应用程序一直保持系统唤醒,浪费电池。
如何能做到手机待机时间长久,而且用户还能玩的尽兴,这时候就必须对设备进行省电管理。那用什么省电方式呢? 比如在手机听音乐的时候关闭屏幕,在看电影的时候调节屏幕亮度等都可以用来省电。...这些方法在linux操作系统中已经做了统一的实现: suspend/resume机制。本节就简单认识下linux下的电源管理。...电源状态 On (on) S0-Working Standby (standby) S1- CPU and...如果你用的是linux,就可以直接通过命令行操作,以我的系统Ubuntu为例子: 1.
Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。...改变设备的电源状态需要整个平台的支持。 b. 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。 c..../power/control接口在运行时对该设备进行电源管理。 .no_callbacks: 表明该设备不是有Runtime PM callbacks。...Runtime PM举例 写了一个简单的测试runtime测试例子,如下: #include #include #include #include #include #include #include <
前言 根据上一节linux电源管理-概述可知,linux电源管理存在的几种方式,如何查看这几种方式,以及最后的如何睡眠唤醒等。...因此内核使用platform_suspend_ops来定义各个平台的pm实现,然后通过suspend_set_ops函数设置具体平台pm到suspend_ops中。...内核也提供了只支持mem睡眠的函数 int suspend_valid_only_mem(suspend_state_t state) { return state == PM_SUSPEND_MEM...调用suspend_prepare做进一步suspend前期准备工作,准备控制台,冻结内核线程等。 6....调用suspend_freeze_processes冻结userhelper进程,已经内核线程。如果冻结出现失败,记录失败的引用计数。 5. 接着会通过通知链恢复suspend,已经恢复控制台。
Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对系统待机的支持和每个设备的运行时(Runtime)电源管理,可以说它和系统中的每个设备驱动都息息相关。...对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图呈现了 Linux 内核电源管理的整体架构。...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux运行时PM最早是在Linux2.6.32内核中被合并的。...另外,在实际工程中,尤其是在消费电子的领域,可能有超过半数的bug都属于电源管理。这个时候,电源管理的很多工作就是在搞定鲁棒性和健壮性,可以说,在很多时候,这就是个体力活,需要工程师有足够的耐性。
那Linux内核到底是如何记录这两个变量呢? linux中使用一个原子变量,高16位记录系统所有的wakeup event总数,低16位记录是否有wakeup events在处理中。...那接着再用linux中的实现方法回答上述的问题: wakeup event framework是如何保存当前系统中所有的wakeup event?
一般电源管理芯片(Power Management IC)中会包含一个甚至多个regulator。 2. regulator有什么作用? 通常的作用是给电子设备供电。...如果一个regulator控制多个设备,而每个设备的电压或电流需求方式不同,linux regulator framework会怎么管理这些设备? 3....有些设备只需要enable/disable电源即可,而有些设备在运行的过程中需要动态的改变voltage或者current,Linux regulator Framework会如何处理这些问题?...Linux Regulator Framework 1. Linux Regulator Framework设计出主要是提供一个标准的内核接口来控制电压和电流调节器。....uV_offset: consumer看到的电源和实际电源之间的偏移值,用于电源补偿。 .min_uA/max_uA: 最小/最大的输出电流。
目录: 一、电源管理框架 1.1 电源状态管理 1.2 省电管理 1.3 电源管理质量 二、睡眠与休眠 2.1 冻结进程 2.2 睡眠流程...但是当硬件运行起来之后,软件就可以对硬件的电源状态进行管理了。电源管理的内容包括电源状态管理和省电管理。电源状态管理是对整个系统的供电状态进行管理,内容包括睡眠、休眠、关机、重启等操作。...所以内核里开发PM QoS模块,专门用来处理电源管理的服务质量问题。...6.2 设备级约束 暂略 linux-src/drivers/base/power/qos.c 七、总结回顾 通过本文我们对计算机的电源管理有了一个基本的了解,下面我们再看图回忆一下: 电源管理分为电源状态管理和省电管理两个重要组成部分...电源状态管理是对计算机的电源状态进行管理,包括睡眠、休眠、关机、重启等。省电管理是内核中的一些省电机制,可以很好的帮我们节省电力。
1、Linux 电源管理的组成 电源管理(Power Management)在 Linux Kernel 中,是一个比较庞大的子系统,涉及到供电(Power Supply)、充电(Charger)、时钟...注3:Runtime PM 是 Linux Kernel 亲生的运行时电源管理机制,Wakelock 是由 Android 提出的机制。这两种机制的目的是一样的,因此只需要支持一种即可。...通过 QOS 参数,可以分析、改善系统的性能 2、电源管理源码目录 kernel/power/ drivers/power/ drivers/base/power/ drivers/cpuidle/ drivers.../xxx.txt 电源管理的东西很多,大家没必要每个都学一遍,用到的时候去研究即可。...研究了一下 Linux 电源管理子系统,发现 Qos 有接口可以使用:在某一段时间内拉 Qos,可以让 CPU 在这段时间不进入 idle,使用完毕再去掉 Qos,让 CPU 可以进入 idle,这样满足了性能需求
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。...下面,我们可以看看linux是如何处理电源管理驱动的。...framework is designed to provide a generic interface to voltage and current regulators within the Linux
Linux系统中的电源管理一般是冷睡眠,而Android系统却将linux系统中的睡眠作为通常待机使用,显然Linux中的电源管理不符合Android系统。...Android说既然不符合,我就给你改到符合,早期Android就提出了"wakelocks"机制,这种机制将Linux原生的睡眠唤醒流程改变,增加Android自己的处理函数,在一段时间这种机制可以解决...所以Linux在2.6.36中引入了wakeup events framework机制,用来解决suspend和wakeup events之间的同步问题。....entry: 用来将唤醒源挂到链表上,用于管理。 .lock: 同步机制,用于访问链表时使用。 .timer: 定时器,用于设置该唤醒源的超时时间。...在内核中搜索该函数的使用。这时候你会发现有好多处都调用此函数,则就可以顺着此思路探索下去。
同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store...向内核其它driver也提供了wakelock的创建和注销接口,允许driver创建wakelock以阻止睡眠、注销wakelock以允许睡眠。 3....以阻止睡眠、注销wakelock以允许睡眠:已经由“Linux电源管理(7)_Wakeup events framework”所描述的wakeup source取代。...3.2 Kernel wakelocks在电源管理中的位置 相比Android wakelocks,Kernel wakelocks的实现非常简单(简单的才是最好的),就是在PM core中增加一个wakelock...注1:上面有关wakeup source的操作接口,可参考“Linux电源管理(7)_Wakeup events framework”。
作者简介:Loopers,码龄11年,喜欢研究内核基本原理 前言 什么是Runtime PM? Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。...主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。也就是"各人自扫门前雪"。 为什么需要Runtime PM?...改变设备的电源状态需要整个平台的支持。 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。.../power/control接口在运行时对该设备进行电源管理。 unsigned int no_callbacks:1; //表明该设备不是有Runtime PM callbacks。 ... #include #include #include #include
示例分析 在内核kernel/drivers/regulator/dummy.c文件中构造了一个虚拟的regulator,参考此文件编写一个虚拟的regulator driver。...#include #include #include #include ...#include #include #include <linux/regulator/machine.h...regulator的作用就是管理consumer设备,给consumer设备提供voltage, current。...所以必须实现一个consumer设备,代码如下: #include #include #include #
文章目录 简介 执行线程 两种虚拟机制 进程描述符与任务队列 PID 进程状态转化图 进程级联 进程创建过程 写时拷贝 fork() 线程在Linux中的实现 clone参数标志 内核线程 进程终结 删除进程描述符...为了与老版本的Unix和Linux兼容、PID的最大值默认设置为32767 (short int短整型的最大值)。内核把每个进程的PID存放在它们各自的进程描述符中。...如果确实需要的话,可以不考虑与老式系统的兼容,由系统管理员通过修改/proc/sys/kerne/pid max来提高上限。 在内核中,访问任务通常需要获得指向其task struct指针。...线程在Linux中的实现 Linux实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux把所有的线程都当作进程来实现。...它们只在内核空间运行,从来不切换到用户空间。内核进程和普通进程一样,可以被调度,也可以被抢占。 Linux确实会把一些任务交给内核线程去做,像pdflush和ksofirqd这 些任务就是明显的例子。
译者:奎亮内核月谈 Original: Documentation/process/management-style.rst Translator: Alex Shi alex.shi@linux.alibaba.com...Linux内核管理风格 这是一个简短的文档,描述了Linux内核的首选(或编造的,取决于您问谁)管理风格。...走投无路的老鼠可能很危险——走投无路的管理者真可怜。 事实证明,由于没有人会愚蠢到让内核管理者承担巨大的财政责任,所以通常很容易 回溯。...但是,为了做好作为内核管理者的准备,最好记住不要烧掉任何桥梁,不要轰炸任何 无辜的村民,也不要疏远太多的内核开发人员。事实证明,疏远人是相当容易的,而 亲近一个疏远的人是很难的。...附注, 关于我们: 阿里巴巴操作系统研发团队负责阿里经济体的服务器操作系统,虚拟化技术以及Linux内核的研发与产品化。
Operating Performance Points Library OPP library提供了一系列辅助函数去管理和查询设备的OPP信息。...OPP library的源代码路径在drivers/base/power/opp.c,头文件路径在include/linux/pm_opp.h中。...数据结构 Linux系统使用struct dev_pm_opp结构表示一个opp描述结构 struct dev_pm_opp { struct list_head node; bool available...; unsigned long u_volt; struct device_opp *dev_opp; struct rcu_head head; }; node: 用于链表管理此设备下的...Linux系统使用struct device_opp结构表示opp设备。
前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。...但事实上,该同步问题牵涉到了另外一个比较有争议的话题:日常的电源管理机制。是否要基于suspend实现?系统何时进入低功耗状态,应该由谁决定?kernel还是用户空间程序?...而在运行时的电源管理过程中,系统何时进入低功耗状态,也不是用户空间程序能决定的(auto sleep中枪了)。...这从侧面反映了内核开发者的严谨程度,值得我们学习。...这表现在suspend过程中频繁调用pm_wakeup_pending接口上(可参考“Linux电源管理(6)_Generic PM之Suspend功能”)。
领取专属 10元无门槛券
手把手带您无忧上云