Linux电源管理(一)电源管理系统架构

2019-07-13 23:05发布

概述

Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。
对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图大体可以归纳为如下几类:
1. CPU 在运行时根据系统负载进行动态电压和频率变换的CPUFreq
2. CPU 在系统空闲时根据空闲的情况进行低功耗模式的CPUIdle
3. 多核系统下CPU 的热插拔支持
4. 系统和设备对于延迟的特别需求而提出申请的PMQoS,它会作用于CPUIdle 的具体策略
5. 设备驱动针对系统Suspend to RAM/Disk 的一系列入口函数
6. SoC 进入suspend 状态、SDRAM 自刷新的入口
7. 设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备
8. 底层的时钟、稳压器、频率/电压表(OPP 模块完成)支撑,各驱动子系统都可能用到 这里写图片描述

系统架构

这里写图片描述

主要技术

Linux电源管理主要使用的技术包括:
- CPUFreq : 也叫DVFS(Dynamic voltage and frequency scaling),即动态电压频率调整。在系统运行时根据系统负载动态调节。
- DEVFreq:CPUFreq只针对CPU做动态电压频率调节。devfreq可以对设备,如DRAM,GPU等做动态电压频率调节。
- CPUIdle:CPU在系统空闲时根据空闲的情况进行低功耗模式。
- CPUHotplug:多核系统下CPU的热插拔支持。
- PM QOS:系统和设备对于延迟的特别需求而提出申请的PM QoS,它会作用于CPUIdle的具体策略.
- SUSPEND:设备驱动针对系统Suspend to RAM/Disk的一系列入口函数。
- RUNTIME PM:设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备。
- Regulator:用于调节CPU等模块的电压和电流值。
- OPP:可以使SOCs或者Devices正常工作的电压和频率组合。内核提供这一个Layer,是为了在众多的电压和频率组合中,筛选出一些相对固定的组合,从而使事情变得更为简单一些。
- Thermal:温控管理。

相关源码

电源管理相关源码主要分布于:
kernel/power/ *
drivers/power/
drivers/base/power/*
drivers/cpuidle/*
drivers/cpufreq/*
drivers/devfreq/*
include/linux/power_supply.h
include/linux/cpuidle.h
include/linux/cpufreq.h
include/linux/cpu_pm.h
include/linux/device.h
include/linux/pm.h
include/linux/pm domain.h
include/linux/pm runtime.h
include/linux/pm wakeup.h
include/linux/suspend.h
Documentation/power/*.txt

参考资料

<1>. http://www.wowotech.net/pm_subsystem/pm_architecture.html
<2>Linux 电源管理系统架构和驱动 宋宝华