一、内核电源管理

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 中电源管理的核心目标

    1. 多核控制:协调多个 CPU 核心的启动、挂起、唤醒等操作。
    2. 低功耗支持:支持 SoC 的各种低功耗状态(如 CPU suspend、system suspend)。
    3. 安全性保障:确保电源状态切换过程中系统安全性不被破坏。
    4. 与操作系统协同:通过 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 流程

    1. Linux 通过 PSCI 调用 cpu_suspend。
    2. ATF 保存当前 CPU 上下文。
    3. 调用平台代码关闭 CPU 电源。
    4. 唤醒时,ATF 恢复上下文,返回 Linux。

    2. System Suspend 流程

    1. Linux 发起 system_suspend。
    2. ATF 协调所有 CPU 进入低功耗状态。
    3. 调用平台代码关闭系统大部分电源。
    4. 唤醒后重新初始化系统状态。

    更多推荐