在现代Linux内核中,电源管理不仅是系统稳定性的保障,也是实现高效能与低功耗运行的核心机制。
系统中涉及电源管理的关键子系统包括:
它们之间层次清晰,职责分明,共同支撑了完整的电源控制体系。
[Power-domain子系统]
↓ 调用 regulator 接口
[Regulator子系统]
↓ 调用 PMIC驱动注册的 regulator_ops
[PMIC驱动]
↓ 调用 regmap + i2c API
[I2C子系统]
↓
[I2C适配器硬件驱动]
↓
[PMIC芯片(如 PCA9450)]
同时所有 device/driver 挂接由 Device Model 统一管理。
I2C(Inter-Integrated Circuit)是一种简单而高效的串行总线协议,用于连接微控制器与外设(如PMIC、传感器等)。
结构体 | 作用 |
---|---|
struct i2c_adapter | 表示I2C总线控制器(硬件控制器) |
struct i2c_client | 表示I2C总线上一个从设备(如PMIC) |
struct i2c_driver | 设备驱动程序,负责与i2c_client匹配 |
regmap_write(regmap, reg, val)
↓
i2c_transfer(adapter, msgs, num)
↓
adapter->master_xfer()
↓
发送I2C信号到总线
✅ 小结:I2C子系统专注于数据可靠传输,不关心具体设备逻辑。
Regulator子系统统一管理系统中所有可以动态控制的电源输出,提供标准接口给上层(如power-domain、驱动程序)。
结构体 | 作用 |
---|---|
struct regulator_desc | 定义regulator属性(电压范围、步进等) |
struct regulator_ops | 定义控制方法(enable/disable/set_voltage) |
struct regulator_dev | 注册后的regulator实例对象 |
regulator_enable(dev)
↓
找到regulator_dev
↓
调用 regulator_ops->enable()
↓
PMIC驱动操作寄存器
static const struct regulator_ops pca9450_buck_regulator_ops = {
.enable = regulator_enable_regmap,
.disable = regulator_disable_regmap,
.set_voltage_sel = regulator_set_voltage_sel_regmap,
.get_voltage_sel = regulator_get_voltage_sel_regmap,
};
✅ 小结:Regulator子系统是电源控制的标准抽象,所有开关/调压动作通过它完成。
PMIC(Power Management IC)集成多个电源模块(Buck/LDO等),PMIC驱动负责初始化芯片并注册各个电源通道到regulator子系统。
devm_regulator_register()
注册regulatorregmap
框架,通过i2c操作寄存器rdev = devm_regulator_register(dev, &pca9450a_regulators[i].desc, &config);
✅ 小结:PMIC驱动是连接硬件与Regulator框架的桥梁。
Power-domain(电源域)是指一个可独立控制上电/断电的功能块,比如GPU、ISP、VPU等模块。
Power-domain子系统(GENPD)统一调度各域的电源状态。
gpu: gpu@0 {
power-domains = <&gpu_pd>;
};
power-domain@1 {
compatible = "fsl,imx8mq-gpu-pd";
#power-domain-cells = <0>;
};
✅ 小结:Power-domain更关注逻辑域整体电源状态,而非单个电源输出。
设备树 (dts)
↓
平台设备注册 (of_platform_populate)
↓
绑定power-domains属性 (of_genpd_bind)
↓
Runtime PM 调用 pm_runtime_suspend/resume
↓
调用genpd power_off/power_on
↓
调用 regulator_disable/enable
↓
PMIC驱动执行寄存器操作 (regmap+i2c_transfer)
↓
PMIC芯片控制 Buck/LDO 模块
层次 | 内容 |
---|---|
策略层 | power-domain子系统 |
抽象层 | regulator子系统 |
设备层 | PMIC驱动(如PCA9450) |
通信层 | I2C子系统 |
基础层 | Device Model(统一管理device/driver) |
✅ 当你掌握了这套体系,就能真正驾驭嵌入式Linux电源管理架构,具备解决复杂功耗优化与系统稳定性问题的能力!
视频教程请关注 B 站:“嵌入式Jerry”