Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对系统待机的支持和每个设备的运行时(Runtime)电源管理,可以说它和系统中的每个设备驱动都息息相关。...对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图呈现了 Linux 内核电源管理的整体架构。...5)设备驱动针对系统挂起到 RAM/硬盘 的一系列入口函数。 6)SoC 进入挂起状态、SDRAM 自刷新的入口。 7)设备的运行时动态电源管理,根据使用情况动态开关设备。...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...少数嵌入式Linux系统会实现挂起到硬盘(简称STD),它与挂起到RAM的不同是s2ram并不关机,STD则把系统的状态保持于磁盘,然后关闭整个系统。
1、充电 charging 知识点包括: 开关电源基本原理 线性充电和开关电源硬件电路图分析 Battery_Charging_v1.2 spec typec spec typec-PD spec Uevent...CPU 的热拔插 CPU DVFS GPU DVFS Power monitor 的使用方法 电流图中底电和毛刺 ftrace 的使用 DoU (Days of Usage) 由于多个模块都会用电,电源域也有很多
autosleep一种强大的电源管理方法,只要在系统没有什么事情可做的时候,整个系统就睡眠下去。此机制在android手机上非常有效,同时也能阻止不良应用程序一直保持系统唤醒,浪费电池。...但是重要的是: 如何判断当前系统没有事情可做,也就是如何判断系统在空闲状态?...这时候wakeup event framework的出现就可以解决此问题,当系统中没有wakeup event事件的时候,就尝试系统suspend。...在系统产生wakeup event之后,唤醒系统之后再次读取wakeup count的数量。 5. 如果读取数量和suspend保存的一样,说明有不明原因唤醒系统。...C: 这时候系统就会在没事做的时候尝试suspend。 D: 如果有唤醒事件,系统就会从睡眠中唤醒。
前言 之前说过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。...如果当前系统wakelock小于系统上限(WL_GC_COUNT_MAX=100),则不用回收。 b.
这些方法在linux操作系统中已经做了统一的实现: suspend/resume机制。本节就简单认识下linux下的电源管理。...电源状态 On (on) S0-Working Standby (standby) S1- CPU and...S3状态简称SRD或者Hibernate,代表冬眠,意识是比较长久,一般在window系统中常见到。...如果你用的是linux,就可以直接通过命令行操作,以我的系统Ubuntu为例子: 1....查看系统支持的睡眠方式 root@test:~$ cat /sys/power/state mem disk 可以看到ubuntu系统支持的睡眠方式有,suspend to ram和suspend
前言 现如今,Linux处理器电源管理重点聚焦在处理器处于运行状态时对其进行电源管理,主要的技术是Cpufreq: 根据cpu的负载,实时的改变cpu的频率或这电压,同时管理处理器的性能水平和电源功耗等...面对在火热移动处理器市场的前提下,众多处理器都亟待加入到空闲状态下进行功耗管理,这时候linux系统就需要一套通用的架构来管理这些cpu,这就是本文的标题: Linux Cpuidle Framework...linux使用cpuidle_state结构用来表示各个idle状态。...linux系统使用cpuidle_device结构抽象每个cpu core,可以简单认为cpuidle_device对应到每个cpu core上。....rating: governor的级别,张常情况下,系统会选择系统中raing值最大的governor作为当前的governor。
centos7.x 网卡信息丢失处理(此文章适用于没有使用动态地址,使用的是静态地址) 操作系统centos 7.x 网卡信息中内网ip配置缺失 子机网络不通 network.service丢失 image.png
如果一个系统只有一个regulator,而且只对一个设备控制的话,完全没必要使用linux regulator framework机制。...但是如果一个系统几个甚至十几个regulator,每个regulator之间还存在级连关系,这时候就需要Linux regulator framework。 2....有些设备只需要enable/disable电源即可,而有些设备在运行的过程中需要动态的改变voltage或者current,Linux regulator Framework会如何处理这些问题?....uV_offset: consumer看到的电源和实际电源之间的偏移值,用于电源补偿。 .min_uA/max_uA: 最小/最大的输出电流。....ramp_delay: 改变电压到电源稳定后时间。因为硬件原因,改变电源后不能立刻就成功,其中需要有一定的延迟。 .enable_time: regulator的使能时间。
前言 根据上一节linux电源管理-概述可知,linux电源管理存在的几种方式,如何查看这几种方式,以及最后的如何睡眠唤醒等。...调用suspend_enter使整个系统进入suspend状态。...而在suspend_enter主要是使系统进入到suspend中。...如果执行成功的话,这时候系统还会调用pm_wakeup_pending检查下,是否有唤醒事件发生,如果发生停止suspend,恢复系统。 11....这时候系统已经睡眠,如果这时候有唤醒事件发生,比如按下手机的power按键,系统又会接着suspend的地方,再次往下执行。也就是suspend的一些列反操作。
Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。...当设备不忙的时候就进入自己的低功耗模式,这样一来每个device(包括CPU) 都做好自己的事,整个系统就达到最大节省能源。这时候突然想起了一句话"只要人人都献出一片爱,世界将变成美好的人间"。...改变设备的电源状态需要整个平台的支持。 b. 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。 c....Runtime PM举例 写了一个简单的测试runtime测试例子,如下: #include #include #include #include #include #include #include <
从源码安装升级glibc对于版本老的系统的非常危险的。我使用编译源码的方式将glibc由2.3升级到2.9, 解决了系统ls等各种指令不好使的问题后以为万事大吉。...结果重启系统发现系统无法进入了,森马都做不了了。网上的办法试了很多,没有完全能解决问题的。最后,综合网上各种办法,终于解决了问题。...将这些安装包和静态库放入一个U盘中,U盘插入无法进入系统的服务器。 准备一张和原系统一致或者接近版本(我原系统是rhel4.5,光盘是rhel4.6)的系统盘,放入光驱。 开机快速按F2,进入 ?...执行chroot /mnt/sysimage ,这个指令使你由当前光盘系统切换到原系统,执行pwd和ls可以看到,你所处的目录就是原系统的根目录,你得身份也变成了原系统的管理员。 ?...在上图光标处在输入exit回车 ,系统会重新启动。修改BIOS设置系统从硬盘启动,原系统应该可以正常开机进入了。
在进行suspend之前,需要先获取系统中总的wakeup event数量。 2. 将获得的值保存到全局变量saved_count中。 3. 此后可能系统已经进入了suspend的流程中。...如果不同,则终止系统suspend。否则继续执行suspend流程。 那wakeup event framework是如何保存当前系统中所有的wakeup event?...通常思路: 用一个变量记录当前系统发生的所有wakeup event,用另一个变量记录当前是否有wake events在处理。 那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 #...在/sys/kernel/debug/regulator/regulator_summary文件中记录系统regulator和consumer之间的关系。...调用device_register函数将regulator注册到系统中。这样就会在devices/platform和class/regulator下存在相应的设备。 5.
计算机消耗的是电能,其来源是电池或者外电源。计算机内部有一个部件叫做电源管理芯片(PMIC),它接收外部的电能,然后转化为不同电压的电流,向系统的各个硬件供电。...但是当硬件运行起来之后,软件就可以对硬件的电源状态进行管理了。电源管理的内容包括电源状态管理和省电管理。电源状态管理是对整个系统的供电状态进行管理,内容包括睡眠、休眠、关机、重启等操作。...系统无论睡眠还是休眠,都可以被唤醒。对于睡眠来说很多外设都可以唤醒整个系统,比如键盘。对于休眠来说,就只有电源按钮能唤醒系统了。...下面我们画个图总结一下电源管理: 二、睡眠与休眠 睡眠和休眠的整体过程是相似的,都是暂停系统的运行、保存系统信息、关闭全部或大部分硬件的供电,当被唤醒时的过程正好相反,先恢复供电,然后恢复系统的运行...对于休眠来说整个系统是要断电的,所以要把很多系统关键信息都保存到swap中。然后系统就可以断电进入睡眠或者休眠状态了。对于睡眠来说有很多外设都可以唤醒系统,对于休眠来说只有电源键能唤醒系统。
Linux系统中的电源管理一般是冷睡眠,而Android系统却将linux系统中的睡眠作为通常待机使用,显然Linux中的电源管理不符合Android系统。...产生,而此时系统无法从suspend过程中唤醒。...所以Linux在2.6.36中引入了wakeup events framework机制,用来解决suspend和wakeup events之间的同步问题。...在linux系统中,只有具有唤醒系统的设备才叫做“wakeup source”。 既然只有设备才能唤醒系统,那设备结构体struce device中就应该有某种标志代表此设备是否具有唤醒的能力。...Sys接口 为了方便查看系统的wakeup sources,linux系统在/sys/kernel/debug下创建了一个"wakeup_sources"文件,此文件记录了系统的唤醒源的详细信息。
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。...下面,我们可以看看linux是如何处理电源管理驱动的。...framework is designed to provide a generic interface to voltage and current regulators within the Linux
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...研究了一下 Linux 电源管理子系统,发现 Qos 有接口可以使用:在某一段时间内拉 Qos,可以让 CPU 在这段时间不进入 idle,使用完毕再去掉 Qos,让 CPU 可以进入 idle,这样满足了性能需求...2、i2c 传输慢,其中一种情况是 i2c 传输完毕返回时,CPU0 进入 idle,导致 i2c 中断打不进来,详情参考我的文章(背景:设置 i2c 中断无法唤醒系统): 手把手教你使用 ftrace
前言 wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle...同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store...当系统中所有的wakelock都注销后,系统可以自动进入低功耗状态。...以阻止睡眠、注销wakelock以允许睡眠:已经由“Linux电源管理(7)_Wakeup events framework”所描述的wakeup source取代。...注1:上面有关wakeup source的操作接口,可参考“Linux电源管理(7)_Wakeup events framework”。
Runtime PM (Runtime Power Management)翻译过来就是运行时电源管理。主要的作用是: 每个设备处理好自己的电源管理,在不需要工作时进入低功耗状态。...当设备不忙的时候就进入自己的低功耗模式,这样一来每个device(包括CPU) 都做好自己的事,整个系统就达到最大节省能源。这时候突然想起了一句话"只要人人都献出一片爱,世界将变成美好的人间"。...改变设备的电源状态需要整个平台的支持。 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。... #include #include #include #include... #include static int runtime_pm_probe(struct platform_device *
领取专属 10元无门槛券
手把手带您无忧上云