1 简介

还是以树莓派为例子来看吧。。。

用户空间(vcgencmd、sysfs、thermal、cpufreq)

↑

Linux标准电源管理框架 (cpufreq / cpuidle / runtime‑PM / suspend‑resume / thermal)

↑

DA9091 PMIC I2C底层驱动、regulator电源轨驱动

↑

设备树dts电源节点、I2C硬件总线

↑

DA9091 硬件寄存器

之前写过,树莓派5用的是定制的DA9091。属于 MFD(Multi‑Function Device)多功能芯片驱动架构。包含:

drivers/mfd/da9091.c //MFD多功能复合芯片主驱动

drivers/regulator/da9091‑regulator.c //8路电源调压驱动

drivers/hwmon/da9091‑hwmon.c //ADC电压电流温度传感器

drivers/rtc/da9091‑rtc.c //板载RTC驱动

drivers/watchdog/da9091‑wdt.c //硬件看门狗

drivers/input/da9091‑powerkey.c //电源按键中断驱动

这里的核心是Regulator电源轨驱动。

2 LinuxPM

包含Suspend、cpufreq、cpuidle、Runtime‑PM、Regulator。

1 系统休眠 / 唤醒(System‑wide PM) 整机挂起:Suspend‑to‑RAM、待机、休眠、关机;所有设备统一挂起,CPU 停机。

对应接口:/sys/power/state

2 Runtime‑PM 设备运行时电源管理 系统正常运行、用户空间还在跑;单个外设闲置就单独断电,不需要整机休眠。 NVMe、USB、HDMI、PCIe‑RP1 全部靠它控制电源轨。

3 CPU 调频 cpufreq 调整 CPU 主频、核心电压(对接 DA9091 regulator)

4 CPU 空闲管理 cpuidle CPU 无事进入 WFI、深度空闲时钟关闭

5 Thermal 温控子系统 温度过高降频、开启风扇、电源节流

第 1 阶段:Linux Suspend/Resume
        ↓
第 2 阶段:Runtime PM
        ↓
第 3 阶段:GPIO/IRQ Wakeup
        ↓
第 4 阶段:I2C/SPI/UART 外设 suspend/resume
        ↓
第 5 阶段:regulator / clock / pinctrl
        ↓
第 6 阶段:功耗测量 + trace/ftrace
        ↓
        Qualcomm RB5
        ↓
PMIC / RPMh / genpd / 电源域

“Raspberry Pi Linux PM Lab:自己写一个 platform driver,实现 Runtime PM + System Suspend/Resume + GPIO Wakeup,然后用 ftrace 把完整 PM 时序抓出来。”

I2C/SPI 做“休眠后无法通信”

              System Suspend
                    │
                    ↓
             device suspend
                    │
                    ↓
             Runtime PM
                    │
                    ↓
                 genpd
                    │
             ┌──────┴──────┐
             ↓             ↓
          clock          regulator
             │             │
             └──────┬──────┘
                    ↓
                power off

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐