一、简介:电源管理≠省电,更是实时性护城河
飞腾芯片场景
能源互联网采集终端、矿山井下控制器、轨道交通门控单元——全部电池/超级电容供电,需 7×24 在线,掉电瞬间仍需完成“关断→数据保存→告警”序列。痛点
默认 ACPI 策略把 CPU 频率降到 400 MHz,实时任务唤醒抖动>8 ms;工业传感器批量掉线,不满足 EN 50155 列车标准<5 ms恢复要求。价值
掌握“飞腾 + PREEMPT_RT”电源调优 = 同容量电池续航延长20-30%,同时保持<1 ms中断响应,可直接写进投标书“国产化自主可控”加分项。
二、核心概念:5 个关键词先搞懂
| 关键词 | 一句话 | 飞腾对应接口 |
|---|---|---|
| CPUFreq | 动态调频,兼顾性能/功耗 | scaling_governor |
| CPUIdle | 空闲状态分级(C1/C2/C3) | cpu_idle驱动 |
| Suspend-to-RAM | 内存自刷新,外设断电 | echo mem > /sys/power/state |
| Wakeup Source | 可唤醒设备列表(GPIO/RTC/UART) | /sys/power/wake_lock |
| 实时约束 | 休眠唤醒全程<5 ms且零丢包 | cyclictest 验证 |
三、环境准备:10 分钟搭好“飞腾 RT 实验台”
1. 硬件
FT-2000/4 工业板卡(4 核 Cortex-A72 @1.5 GHz)
DC 12 V/2 A 电源 + 电流钳表(测量功耗)
UART-USB 调试线 ×1(115200)
2. 软件
| 组件 | 版本 | 获取 |
|---|---|---|
| Ubuntu Server | 22.04 aarch64 | 飞腾官方 ISO |
| 实时内核 | linux-5.15-rt55 | 见下脚本 |
| 电源工具 | cpufrequtils, rt-tests, pm-utils | apt |
3. 一键安装 RT 内核(可复制)
#!/bin/bash # install_ft_rt.sh set -e wget https://www.phytium.com.cn/dl/linux-5.15-rt55-ft2004.patch tar -xf linux-5.15.tar.gz && cd linux-5.15 patch -p1 < ../linux-5.15-rt55-ft2004.patch make ft2000_defconfig ./scripts/config -e CONFIG_PREEMPT_RT make -j$(nproc) deb-pkg sudo dpkg -i ../linux-*.deb sudo reboot重启后确认:
uname -r # 5.15.55-rt-ft2004四、应用场景(300 字)
轨道交通车门控制器
列车每节车厢 8 扇门,电池供电 110 V→24 V DC,要求门开关<300 ms,休眠时电流<50 mA。飞腾 FT-2000/4 作为本地 ECU,运行 PREEMPT_RT Linux:
无乘客时 1 s 内进入 C2 空闲,功耗从 8 W 降到 2 W;
门把手被拉动 → GPIO 中断 → 唤醒源激活 → CPU 0 在600 μs内恢复 1.5 GHz;
实时任务
door_control抢占运行,200 ms 完成开门,同时 CAN 上传状态。
通过本文电源策略,单车厢续航从 48 h 提升到65 h,通过 EN 50155 型式试验,可直接写进投标技术协议。
五、实际案例与步骤:从“满速跑”到“秒睡秒醒”
5.1 测量基线:先看“不改”长啥样
# 1. 关闭所有省电,满频跑 sudo cpupower frequency-set -g performance sudo stress -c 4 & # 2. 记录功耗 ./power_meter.py # 自建脚本,每秒读取电流钳表 # 结果:平均 8.2 W5.2 动态调频: conservative → ondemand → schedutil
# 查看可用策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors # 推荐:schedutil (RT 友好) sudo cpupower frequency-set -g schedutil # 再测:6.4 W (-22%)5.3 空闲状态:打开 C1/C2,禁用 C3(过深反而慢)
# 飞腾 BSP 提供接口 echo 0 > /sys/devices/system/cpu/cpu0/cpuidle/state3/disable # 验证 cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name # 应显示:C1 C2 (C3 -)5.4 实时约束:确保唤醒延迟 <1 ms
# 运行 cyclictest 同时切换 governor sudo cyclictest -p95 -m -Sp90 -i200 -d60s -g # 结果:max latency = 0.8 ms (OK)5.5 休眠到 RAM:一键 suspend + GPIO 唤醒
# 注册唤醒源(GPIO5_7 门把手) echo 5 > /sys/class/gpio/export echo 7 > /sys/class/gpio/gpio5_7/wake_lock # 进入休眠 sudo systemctl suspend # 电流降至 0.18 A (2.1 W) # 拉低 GPIO5_7 → 600 μs 唤醒,系统恢复5.6 自动策略脚本(可复制)
#!/bin/bash # pm_policy.sh GOV=schedutil C3_DISABLE=1 WAKE_GPIO="5_7" set_freq() { cpupower frequency-set -g $GOV } disable_c3() { for cpu in /sys/devices/system/cpu/cpu[0-3]*; do echo $C3_DISABLE > $cpu/cpuidle/state3/disable done } wake_src() { echo ${WAKE_GPIO%_*} > /sys/class/gpio/export 2>/dev/null echo ${WAKE_GPIO#*_} > /sys/class/gpio/gpio${WAKE_GPIO%_*}/direction echo ${WAKE_GPIO#*_} > /sys/class/gpio/gpio${WAKE_GPIO%_*}/wake_lock } set_freq disable_c3 wake_src echo "飞腾电源策略已启用"开机自启:
sudo chmod +x pm_policy.sh sudo tee /etc/systemd/system/pm-policy.service <<EOF [Unit] Description=FeiTeng PM Policy After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/pm_policy.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF sudo systemctl enable pm-policy.service六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| suspend 后无法唤醒 | 串口无输出 | 检查 GPIO 是否已注册 wake_lock,确认 BSP 支持 |
| cyclictest max > 2 ms | 深度 C3 未关 | echo 0 > state3/disable再测 |
| schedutil 无效 | 频率不变 | 内核需 CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y |
| 电流下降不明显 | 仍 6 W | 关闭 HDMI/USB Hub:echo 0 > /sys/class/leds/*/brightness |
| 唤醒后丢 CAN 包 | 外设未快速恢复 | 在设备树增加“can-stby-gpios”并注册为 wake源 |
七、实践建议与最佳实践
先测延迟,再降功耗
永远用 cyclictest guard 住实时性,再谈省电。分级休眠策略
空闲 1 s → C2;10 s 无负载 → 降频;1 min → suspend;GPIO/RTC 随时唤醒。外设电源岛
将非关键 USB Hub、HDMI 供电交给高边开关,休眠前软件关闭,省 0.8 W。日志不丢
suspend 前把关键日志写入 RTC SRAM 或 EMMC 断电保护区,方便醒后上传。版本锁定
BSP DTB 修改后生成哈希值,写入《电源配置清单》,变更需再走评审。车规/矿规合规
增加“休眠时电流≤50 mA”型式试验项,与安规、EMC 一起出具报告,一次通过。
八、总结:一张脑图带走全部要点
飞腾实时电源优化 ├─ 策略:schedutil + C2 + 禁 C3 ├─ 指标:cyclictest <1 ms,电流↓30% ├─ 唤醒:GPIO/RTC 注册 wake_lock ├─ 脚本:pm_policy.sh 一键启用 └─ 合规:≤50 mA 型式试验报告飞腾芯 + PREEMPT_RT + 精细电源管理 = 国产化自主可控的“长续航+硬实时”双优解。
把本文脚本 push 到你的 GitLab CI,下次硬件打样,休眠电流合格报告自动生成,让“国产芯”真正在能源、矿山、轨道交通等关键领域既省电又安心!