SmcDfxInfo的无法生效

问题描述

SmcDfxInfo不生效,SmcVersion似乎定义的有问题,错误日志
1970-01-01 10:00:36.144948 hwproxy ERROR: aggregate.lua(376): aggregate: SmcDfxInfo_ExuSensor_0101 stop reading, check smc version failed, expect version: 115, version by expr: nil,version by opcode: 4, version by dfx: 1400

环境信息

  • 软件版本:OpenUBMC2506

答案内容由AI生成,仅供参考:

:warning: 总结:该问题是由于 SmcDfxInfo_ExuSensor_0101 的版本校验机制检测到期望版本(115)与实际硬件返回版本(1400)严重不匹配,且表达式解析失败(返回 nil)所导致的功能失效。核心解决方向是更新配置以匹配实际硬件版本升级软件以兼容新版 SMC 固件

点击此处查看详细分析解答

SmcDfxInfo 无法生效问题分析

问题描述

SmcDfxInfo_ExuSensor_0101 无法正常工作,系统报错提示版本检查失败。具体错误日志如下:

1970-01-01 10:00:36.144948 hwproxy ERROR: aggregate.lua(376): aggregate: SmcDfxInfo_ExuSensor_0101 stop reading, check smc version failed, expect version: 115, version by expr: nil, version by opcode: 4, version by dfx: 1400

该问题表现为 SmcDfxInfo 配置未能生效,导致相关传感器数据无法正确读取。

根本原因分析

根据错误日志,系统在尝试读取 SmcDfxInfo_ExuSensor_0101 时执行了 SMC 版本检查,但多源版本信息不一致或不符合预期,导致读取操作被中止。

版本校验失败详情:

  • 期望版本(expect version):115
  • 通过表达式获取的版本(version by expr)nil(无效)
  • 通过操作码获取的版本(version by opcode):4
  • 通过 DFX 获取的版本(version by dfx):1400

系统检测到这些版本值之间存在严重不一致,尤其是期望值为 115,而实际获取的值分别为 nil、4 和 1400,均不匹配,因此判定版本检查失败。

可能原因

  1. 配置错误:SmcVersion 不匹配

    • SmcDfxInfo_ExuSensor_0101 配置中定义的 SmcVersion 与当前 SMC 实际固件版本不一致。
    • 现实中 SMC 返回版本为 1400(dfx 方式读取),远高于期望值 115,表明配置文件未适配当前硬件固件版本。
  2. 表达式计算失败

    • version by expr: nil 表示用于动态计算 SMC 版本的表达式未能正确执行,可能由于变量未定义或语法错误。
  3. 软件版本兼容性问题

    • 当前环境使用 OpenUBMC 2506 版本,可能存在对 SmcDfxInfo_ExuSensor_0101 的解析逻辑与硬件 SMC 固件不兼容的情况。
    • 软件期望一个较低的版本号(115),但硬件已升级至更高版本(1400),说明配置未随硬件演进同步更新。
  4. SMC 接口返回多版本信息不一致

    • 不同读取方式(opcode、dfx、expr)返回不同版本号,表明 SMC 内部版本标识机制混乱或驱动解析存在缺陷。

解决方案建议

:white_check_mark: 1. 核实并更新 SmcVersion 配置

检查 SmcDfxInfo_ExuSensor_0101SmcVersion 配置项,确保其与实际 SMC 固件版本兼容。若硬件版本已升级至 1400,则应调整配置以接受该范围内的版本号,或修正期望值。

:white_check_mark: 2. 检查版本表达式逻辑

确认 expr() 表达式是否正确定义,引用的变量(如 $test_for_dxf$cpld_ver 等)是否存在且可解析。避免因表达式错误导致返回 nil

:white_check_mark: 3. 升级或适配 openUBMC 软件版本

当前使用 openUBMCVersion: 25.12(推断自相关数据),而环境为 OpenUBMC2506,建议确认是否需升级软件以支持当前 SMC 版本(1400),或应用补丁修复版本校验逻辑。

:white_check_mark: 4. 临时规避方案(调试用)

如需临时启用 SmcDfxInfo_ExuSensor_0101 功能进行诊断,可在安全环境下禁用版本检查逻辑,观察后续功能是否恢复正常。但此操作仅限测试,不应用于生产环境。

:white_check_mark: 5. 日志与调试建议

  • 检查 smc_interface.luaunit.lua 是否有更多关于 get dfx info 失败的日志。
  • 使用 busctl 命令手动查询 /bmc/kepler/chip/Smc/Smc_ExpBoardSMC_0101 的原始数据,验证通信是否正常。
  • 确认 SMC 是否支持所需的操作码(opcode),错误码 1 可能表示“不支持的操作”。

相关实体参考

  • SmcDfxInfo_ExuSensor_0101:出问题的配置对象,用于读取 SMC 板信息。
  • SmcVersion:关键属性,用于版本校验。
  • openUBMCVersion:当前系统版本标识,影响兼容性。
  • smc_interface.lua:负责与 SMC 通信的脚本,可能记录更详细失败原因。

:warning: 总结:该问题是由于 SmcDfxInfo_ExuSensor_0101 的版本校验机制检测到期望版本(115)与实际硬件返回版本(1400)严重不匹配,且表达式解析失败(返回 nil)所导致的功能失效。核心解决方向是更新配置以匹配实际硬件版本升级软件以兼容新版 SMC 固件

实际硬件返回版本(1400)是CPLD决定的还是BMC组件决定的?另一个25.06环境的SmcDfxInfo可以生效,日志中使用的opcode是407
1970-01-01 00:00:32.323369 hwproxy NOTICE: aggregate.lua(377): aggregate: SmcDfxInfo_ExuSensor_0101, version check success, expect version: 115, version by expr: nil, version by opcode: 407, version by dfx: 0

version by opcode是cpld返回的版本号,expect version是CSR中配置的期望版本号,当期望版本号大于实际版本号时,就无法使用SmcDfxInfo获取数据

使用SMC从CPLD获取的吗,用的什么命令字呢?

0x900

好的,非常感谢