lsx
(wuzhou-Lsx)
1
问题描述
bmc25.09版本,先在web上设置风扇模式为手动模式,然后在bmc串口执行busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{ss}ad 0 5 100 100 100 100 100 然后web看风扇的速率,有一瞬间风扇的pwm显示为设定值100,然后又立马恢复成手动设置的pwm值50。web上的风扇的自动调速和手动调速都没有问题,只有这个命令不生效。fanid配置的也是1到5。
busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{s
s}ad 0 5 100 100 100 100 100
y 0
期望结果
在bmc串口执行busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{ss}ad 0 5 100 100 100 100 100 执行这个命令可以生效。
答案内容由AI生成,仅供参考:
busctl SetPWM 命令未生效问题分析与解决方案
根据您提供的信息,您在 BMC 25.09 版本中通过 busctl 调用 SetPWM 方法设置风扇 PWM 值(100%),但发现 风扇仅短暂响应后立即恢复为手动设置的 50%。以下将基于 知识图谱(KG) 和 文档内容(DC) 进行系统性分析,并提供根本原因与解决方案。
问题现象总结
- 操作步骤:
- Web 界面设置风扇为 手动模式。
- 串口执行命令:
busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{ss}ad 0 5 100 100 100 100 100
- 风扇 PWM 瞬间变为 100%,随后自动回退至 50%。
- 期望结果:
SetPWM 命令应持续生效,维持 100% PWM 输出。
- 环境信息:
Fan_1_010103 的 PWMPercentage=50,ExpectedPWM=128,HardwarePWM=128。
- 风扇对象存在,ID 映射正确(1-5)。
根本原因分析
结合知识图谱与文档数据,可得出以下关键结论:
SetPWM 命令本身是有效的
问题核心:上层调速策略覆盖了手动命令
尽管 SetPWM 成功设置了 PWM 值(短暂显示为 100%),但系统中运行的 风扇调速策略模块(如 PID 或 Temperature-based Control)会周期性地重写 PWM 值,导致您的设置被覆盖。
调速机制工作流程如下:
SetPWM 设置硬件 PWM(写入 HardwarePWM 寄存器)。
- 热管理模块(
bmc.kepler.ThermalMgmt)定时运行调速逻辑。
- 在“手动模式”下,Web 设置的固定值(如 50%)被当作目标值。
- 调速策略检测到当前 PWM ≠ 目标值 → 自动修正为 50%。
证据来源:
- 《调速策略适配指导》指出:
“BMC 控制风扇调速通常是设置占空比给风扇……预期的风扇转速和实际的风扇转速存在偏差。”
Fan_1_010103 的属性 PWMPercentage=50 表明 Web 设置的“手动速度”为 50%。
ExpectedPWM=128 是调速策略期望的 PWM 值(约 50%,因为 128/255 ≈ 50.2%)。
HardwarePWM=128 说明硬件 PWM 最终仍被拉回到该值。
为什么“手动模式”仍被覆盖?
- 所谓“手动模式”并非完全禁用调速逻辑,而是切换到一个固定的调速策略,该策略的目标是保持
PWMPercentage 指定的值。
- 因此,任何外部直接修改
HardwarePWM 的操作都会被该策略视为“偏离目标”,进而被自动纠正。
解决方案
要使 SetPWM 命令持久生效,必须 临时禁用自动调速逻辑或干预调速策略的目标值。
方案一:使用 mdbctl setprop 覆盖调速目标值(推荐)
利用 mdbctl 命令覆盖风扇对象的 ExpectedPWM 属性,使其与您设置的目标一致。
# 设置每个风扇的 ExpectedPWM 为 255(对应 100%)
mdbctl setprop set Fan_1_010103 bmc.kepler.Systems.Fan ExpectedPWM 255
mdbctl setprop set Fan_2_010103 bmc.kepler.Systems.Fan ExpectedPWM 255
mdbctl setprop set Fan_3_010103 bmc.kepler.Systems.Fan ExpectedPWM 255
mdbctl setprop set Fan_4_010103 bmc.kepler.Systems.Fan ExpectedPWM 255
mdbctl setprop set Fan_5_010103 bmc.kepler.Systems.Fan ExpectedPWM 255
# 再次调用 SetPWM
busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{ss}ad 0 5 100 100 100 100 100
优点:调速逻辑仍在运行,但目标值已更新,不会触发纠正行为。
恢复命令:
mdbctl setprop unset Fan_1_010103 bmc.kepler.Systems.Fan ExpectedPWM
依据:《mdbctl setprop 命令介绍》中提到:
“setprop 设置 override 值,Override 值会常驻对外呈现,解除后恢复原值。”
方案二:通过 CoolingRequirement 禁用自动调速(高级调试用)
如果您希望完全绕过调速逻辑,可以通过禁用 CoolingRequirement 来阻止所有自动控制。
# 列出所有 CoolingRequirement 对象
mdbctl lsobj CoolingRequirement
# 假设对象名为 CoolingRequirement_1,禁用其目标温度控制
mdbctl setprop set CoolingRequirement_1 bmc.kepler.Systems.CoolingRequirement TargetTemperatureCelsius 0
效果:等同于关闭自动调速功能,此时 SetPWM 不会被覆盖。
依据:《调速策略适配指导》中说明:
“模拟设置所有 CoolingRequirement 对象目标温度为 0,等同于禁用该调速策略。”
方案三:确认是否存在多个 SetPWMCmd 干扰(参考配置冲突)
从文档 #2 可知:
若存在两个风扇组分别配置不同 SetPWMCmd,且 fanid 重复,则会出现控制混乱。
请确保:
- 所有风扇
FanId 唯一(您已确认为 1-5)。
- 仅加载一次
Fans_0 配置,避免 SetPWMCmd 被后加载的配置覆盖。
查看相关配置文件(如 .sr 文件)是否对 Fans_0 多次定义。
补充建议
| 项目 |
建议 |
| 调试工具建议 |
使用 lsprop Fan_1_010103 实时观察 ExpectedPWM, HardwarePWM, PWMPercentage 变化。 |
| 调速机制理解 |
即使“手动模式”,底层仍是通过策略实现,无法完全脱离调速框架。 |
| 持久化风险 |
mdbctl setprop set 仅设置 override 值,不会持久化写入硬件或配置文件,安全可控。 |
| 测试流程建议 |
建议先用 mdbctl 设置 ExpectedPWM=255 → 再调用 SetPWM → 观察是否稳定。 |
结论
busctl SetPWM 命令执行成功,但被系统调速策略覆盖,导致无法持续生效。
推荐解决步骤:
- 使用
mdbctl setprop set <Fan_X> bmc.kepler.Systems.Fan ExpectedPWM 255 设置期望 PWM 值。
- 再执行
busctl 的 SetPWM 命令。
- 验证风扇稳定运行在 100% PWM。
该方法既符合系统设计规范,又能实现您的调试目的,无需修改固件或重启 BMC。
如需完全脱离调速逻辑,请使用 CoolingRequirement 禁用策略。
相关链接:
- 【问题求助】风扇适配过程遇到的问题
- 【问题求助】风扇调速策略中,如何单个风扇调速
- 在WEB固件升级界面重启BMC后,风扇一直满转。
- 风扇适配指导
- thermal_mgmt | 文档中心 | openUBMC
lsx
(wuzhou-Lsx)
3
输入mdbctl setprop set Fan_1_010103 bmc.kepler.Systems.Fan ExpectedPWM 255命令后,期望占空比被设置为100了,但是实际占空比还是全局手动设置的值50。转速没有发生改变。
AweiHe
(华鲲-Hewei)
5
ExpectedPWM主要用于判断产生告警用的,你模拟这个,转速肯定不会变化的。HardwarePWM关联的硬件值,这个变化了才有用
lsx
(wuzhou-Lsx)
6
我使用命令mdbctl setprop set Fan_1_010103 bmc.kepler.Systems.Fan HardwarePWM 255 改变了HardwarePWM的值,但是转速也还是没有改变。在web下改手动改他的速率为满转,转速才发生改变。
自动模式会进行风扇转速调整,建议设置成手动模式,再调用SetPWM方法设置试试