linux内核电源管理-PSCI
·
一、内核电源管理
PSCI(Power State Coordination Interface)实现系统挂起(System Suspend)功能 的,主要用于 ARM 架构的电源管理。
PSCI 是一个标准化的接口,用于协调和管理 ARM 多核处理器中的电源状态转换,包括 CPU 休眠、系统挂起、CPU 热插拔等。
二、内核PSCI电源管理如何工作的
1、操作的PSCI相关文件
>>>linux/kernel/power/

- main.c :电源管理的主入口,初始化和协调各个电源管理子模块。
- power.h:头文件,定义了电源管理相关的数据结构和函数接口。
挂起与休眠
- suspend.c:实现系统挂起(suspend)功能,比如待机。
- hibernate.c:实现系统休眠(hibernate)功能,把内存内容保存到磁盘。
电源关闭与唤醒
- poweroff.c:处理系统关机(power off)逻辑。
- wakelock.c:用于防止系统进入休眠状态的“唤醒锁”机制,常见于 Android。
电源状态快照
- snapshot.c:用于保存和恢复系统状态,配合休眠功能使用。
其他支持模块
- autosleep.c:自动进入睡眠状态的逻辑。
- process.c :处理与进程相关的电源管理操作。
- console.c :与控制台设备的电源管理有关。
- qos.c :QoS(服务质量)相关的电源管理策略。
- energy_model.c:能耗模型,用于估算和优化功耗。
- swap.c:与交换空间(swap)相关的电源管理。
>>>linux/drivers/firmware/psci/
![]()
实现了 Linux 内核对 ARM PSCI 接口的支持,主要用于:
- CPU 开关控制(比如启动或关闭某个 CPU 核心)
- 系统休眠/唤醒
- 系统重启/关机
- 与固件(如 ARM Trusted Firmware)通信
文件介绍:
- psci.c:核心实现文件,定义了 PSCI 接口的初始化、调用方法、以及与固件交互的逻辑。
- psci_checker.c:用于检查系统是否支持 PSCI,或者用于调试和验证 PSCI 功能。
- psci.o:
psci.c编译后的目标文件。 - Kconfig / Makefile / modules.order / built-in.a:构建系统相关文件,用于配置和编译该模块。
三、linux内核管理和ATF如何配合呢?
一、ATF 中电源管理的核心目标
- 多核控制:协调多个 CPU 核心的启动、挂起、唤醒等操作。
- 低功耗支持:支持 SoC 的各种低功耗状态(如 CPU suspend、system suspend)。
- 安全性保障:确保电源状态切换过程中系统安全性不被破坏。
- 与操作系统协同:通过 PSCI 接口与 Linux 等操作系统协同工作。
二、关键组件与机制
1. PSCI(Power State Coordination Interface)
- 是 Arm 定义的标准接口,ATF 实现了它。
- 操作系统通过 SMC(Secure Monitor Call)调用 PSCI 接口,实现:
- CPU on/off
- CPU suspend/resume
- System suspend/resume
- System reset/shutdown
2. 电源状态管理(Power State Management)
- ATF 根据 PSCI 请求,调用平台相关的电源控制代码(通常在
plat/目录下)。 - 这些代码会操作 SoC 的 PMIC、电源域控制器、时钟控制器等硬件资源。
3. 多级电源域支持
- 支持 CPU、Cluster、System 等不同层级的电源域。
- 每个电源域可以有多个状态(如 ON、RETENTION、OFF)。
三、典型流程示例
多核SOC的Standby操作:
1. CPU Suspend 流程
- Linux 通过 PSCI 调用
cpu_suspend。 - ATF 保存当前 CPU 上下文。
- 调用平台代码关闭 CPU 电源。
- 唤醒时,ATF 恢复上下文,返回 Linux。
2. System Suspend 流程
- Linux 发起
system_suspend。 - ATF 协调所有 CPU 进入低功耗状态。
- 调用平台代码关闭系统大部分电源。
- 唤醒后重新初始化系统状态。
更多推荐
所有评论(0)