读取fru显示Device not present问题分析
更新时间: 2026/05/26
在Gitcode上查看源码

问题背景

  • 单板类型:自研板;
  • 软件版本:openUBMC 25.06;
  • 涉及功能:cli,fru,SMC;
  • 预置条件:环境上配置了EXU板的CSR文件且可正常加载;
  • 触发条件:使用cli命令读取EXU板的fru信息;
  • 业务表现:预期下发cli命令后正常显示EXU板的FRU信息;实际下发命令后显示Device not present。

问题复现步骤

环境安装EXU板,且升级包的CSR文件也配置对应的EXU板;Eeprom地址为0xAE。ipmcget命令查询fru信息,命令如下:

text
  ipmcget -d fru

关键日志信息

命令返回如下图:

app.log日志截图如下:

定位过程

  1. 排查硬件链路是否有问题。修改配置文件,将StorageType配置的"TianChi"修改为"Eepromv2",则不会报错Device not present (Destination unavailable),证明硬件链路是通的;
text
  "FruData_Expander": {
          "FruId": 1,
          "FruDev": "#/Eeprom_EXU",
          "EepromWp": "#/Accessor_EXUWP.Value",
          "BoardSerialNumber": "",
          "StorageType": "Eepromv2"
      },

查询结果如下:

  1. 查看app.log日志,存在如下报错"bad argument #3 to 's_pack' (unsigned overflow)",溢出异常抛出,确认为软件侧代码问题;
  2. 查看FruData_Expander配置EepromWp数据来源为Accessor_EXUWP的Value,而Value具体的数值是通过扩展板SMC命令字读取,查看代码确认BMC侧和CPLD侧的SMC命令字是否一致;结果发现CPLD和BMC侧的SMC命令字一致,没有问题;
  3. 确认SMC对象"Smc_ExpBoardSMC"定义是否正确,结果发现对象"Smc_ExpBoardSMC"对象CSR文件中未定义;

问题原因

配置文件中未配置SMC命令字的对象"Smc_ExpBoardSMC",导致调取该命令字读取FRU信息时失败。

解决方案

Accessor_EXUWP对象所在的CSR文件中,增加Smc_ExpBoardSMC配置,重新出包升级后用cli命令读取EXU板的FRU信息,具体配置如下:

text
      "Smc_ExpBoardSMC": {
          "Address": 96,
          "AddrWidth": 1,
          "OffsetWidth": 1,
          "WriteTmout": 0,
          "ReadTmout": 0
      }