属性同步失败问题分析
更新时间: 2026/06/01
在Gitcode上查看源码问题背景
- 单板类型:自研板;
- 软件版本:openUBMC 25.09;
- 涉及功能:传感器,上下电;
- 触发条件:将传感器的状态与OS上电状态关联起来,查看传感器状态变更;
- 业务表现:预期当Entity_GPUCard的PowerState=0时,传感器状态是3;实际当Entity_GPUCard的PowerState=0时,传感器状态依旧是0。
问题复现步骤
将传感器的状态与OS上电状态通过表达式关联起来,出包升级后观察传感器状态信息,关联代码修改如下图:
关键日志信息
os上下电状态及传感器状态如下:
定位过程
- 关联到Entity_GPUCard.PowerState的同步属性同步不过来,尝试换成Component_PCIeCard.PowerState后,出包升级,发现同步变更传感器状态依然失败;
- 用mdbctl getprop 查一下可以看到同步源 从查询结果上看,$1实际是1,但是这里却说是0,所以结果才算错;
- 从上述截图可看出来同步的PowerState属性没有配置emits-change,属性变更不会发信号,表达式那边就同步不到变更后的属性值,导致获取同步值失败;
问题原因
传感器表达式中的PowerState属性没有配置emits-change,没有配置emits-change属性变更后不会发信号,表达式侧就无法拿到变更后的值,导致表达式同步值失败。
解决方案
表达式的电源状态变更为Payload对象下的PowerState即可;修改完成后出包升级,查看传感器状态是否随着OS侧上下电状态变更即可。