Skip to main content
Qualcomm® Linux 提供了多个电源管理子系统:CPUIdle、运行时电源管理(runtime PM)、热限频、系统挂起、稳压器和时钟,这些子系统必须协同配置,才能在 ARM64 平台上实现最优功耗。本页介绍每个子系统及其关键配置和运行时控制。

CPUIdle 状态与调节器

当 CPU 没有可运行任务时,CPUIdle 负责管理空闲状态的选择。在 Qualcomm 平台上,空闲状态在设备树中定义,并通过 PSCI(Power State Coordination Interface)固件传递给 Linux。

空闲状态层次结构

Qualcomm ARM64 SoC 通常为每个 CPU 提供三种基于 PSCI 的空闲状态: 表:典型的 Qualcomm PSCI 空闲状态 具体的 PSCI 状态标识符和驻留时间值在 SoC DTSI 中各 CPU 节点下定义。查看方式:

在运行时查看空闲状态

CPUIdle 调节器

表:CPUIdle 调节器

PM QoS 延迟约束

驱动程序和用户空间可以通过注册延迟约束,阻止 CPU 进入深度空闲状态。通过 sysfs 设置每 CPU 约束:
所需 Kconfig:

外设的运行时电源管理

运行时电源管理(Runtime PM)允许各个外设设备在系统运行时进入低功耗状态。在 Qualcomm SoC 上,电源域由 RPMh 硬件资源管理器通过 qcom-rpmhpd 驱动进行管理。

在驱动中启用运行时电源管理

设置自动挂起延迟以防止频繁的电源开关:

监控运行时电源管理状态

替换以下内容:
  • 将 <device> 替换为 /sys/bus/platform/devices/ 中的平台设备名称。

Qualcomm 电源域

RPMh 电源域由 qcom-rpmhpd 驱动注册。查看已注册的电源域:
所需 Kconfig:

热限频

Linux 热管理框架监控温度传感器,并在越过触发点(trip point)时执行降温操作。Qualcomm SoC 通过 TSENS(温度传感器)硬件暴露热区(thermal zone),冷却设备则通过 CPU 频率上限和 CPU 热插拔来实现。

查看热区

热管理调节器

表:热管理调节器
所需 Kconfig:

系统挂起(S2RAM)

系统挂起会关闭大部分 SoC 子系统的电源,同时让 DRAM 保持自刷新。在 Qualcomm 平台上,挂起路径在 EL3 中发出 PSCI SYSTEM_SUSPEND 调用,RPMh 硬件时序器按依赖顺序关闭各电压轨。

触发并验证挂起

识别挂起阻碍源

处于活动状态的唤醒源会阻止系统挂起。识别它们:

调试挂起失败

启用逐设备的挂起与恢复跟踪:
所需 Kconfig:

稳压器与时钟管理

减少不必要的常开(always-on)稳压器和未使用的时钟消费者,可以显著降低静态功耗。

稳压器状态

查看所有稳压器及其使能状态:
从可选外设(例如并非所有开发板都装配的 MIPI-CSI 传感器)的 DT 绑定中移除 regulator-always-on,以允许运行时电源门控。仅对关键电压轨保留该属性:

时钟树

Qualcomm 时钟控制器(GCC、CAMCC、DISPCC 等)由 clk-qcom 驱动系列管理。查看已启用的时钟:
在驱动中使用 devm_clk_get_enabled()(自内核 v5.20 起可用)来获取、启用时钟,并在设备解绑或运行时挂起时自动释放:

功耗分析工具

powertop

powertop 可识别功耗大户、报告空闲状态驻留情况,并显示各进程的唤醒事件速率:
需要关注的关键指标:
  • C 状态驻留率:系统空闲时,深度空闲状态(C2/C3)的驻留率应超过 80%。
  • 每秒唤醒数:任何单一来源每秒唤醒超过 50 次都值得调查。

pm_debug debugfs

使用 ftrace 进行 cpuidle 跟踪