web显示的psu fru信息与i2c读取的不符

问题描述

web显示的psu fru信息

i2c读取到的psu fru 信息

fru配置

环境信息

  • 软件版本:OpenUBMC2512

  • 硬件配置:920L模组

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

结论

Web 显示的 PSU FRU 信息与 I2C 实际读取值不符的根本原因是:

frudata 组件未能正确同步来自电源模块(PMBus)或 EEPROM 的真实 FRU 数据,导致 Web 界面展示的是默认值或陈旧缓存数据。

推荐处理步骤:

  1. 确认 FruSource 设置合理;
  2. 通过命令强制刷新 FRU 数据;
  3. 验证 I2C、IPMI、D-Bus 三层数据一致性;
  4. 修复 frudataOnePower 的同步机制;
  5. 重启 power_mgmt 服务测试效果。

附加建议:参考文档 #8 提到的 “【问题单】修复电源FRU中制造时间异常”,此类问题已在历史 issue 中出现,建议查阅对应修复方案并进行回归验证。

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

Web 显示的 PSU FRU 信息与 I2C 读取信息不符问题分析

问题概述

用户反馈在 Web 界面显示的 PSU(电源供应单元)FRU(现场可更换单元)信息与通过 I2C 总线直接读取的 FRU 数据存在不一致情况。具体表现为:

  • Web 界面显示

    • 厂商为 “Huawei”
    • FRU 文件 ID 为 25.12.00.01
    • 制造时间为 1996/01/01
  • I2C 实际读取(地址 0x50):

    • 制造商字符串为 GREATLLLLLLLLLLLLLLLLLLLLLLL(ASCII 解码)
    • FRU 数据表明信息来源于 EEPROM 中的实际硬件设备

此现象表明系统中存在FRU 信息来源不一致的问题。


根本原因分析

根据提供的知识库内容,可以定位到导致该问题的核心机制和可能原因如下:

1. FRU 信息存在多个数据源

系统通过以下两种方式获取 FRU 信息:

  • 从电源模块自身(PMBus 协议):通过 FetchPowerSupplyInfo 方法从电源设备的 PMBus 接口读取动态信息。
  • 从板载 EEPROM(I2C 地址 0x50:通过 Ipmictl Commandipmcget -d fruinfo 命令读取预写入的静态 FRU 数据。

文档中明确指出:FruSource 配置项决定了 FRU 数据是从 EEPROM 还是从 PowerSupply 读取。


2. 信息同步机制缺失

尽管 power_mgmt 组件支持从电源模块读取信息(如制造商、型号、序列号等),但当前 FRUDATA 组件未自动同步来自 OnePower 的最新 PMBus 读取信息

相关证据:

  • 文档 #3《PSU电子标签与FRUDATA组件的电子标签数据同步机制》提到:“执行命令:ipmcget -d fru,结果:电子标签相关字段显示的是预设值,并未同步最新的 PMBus 中 OnePower 中的相关属性。”
  • 表明 frudata 组件目前依赖预设值而非实时同步电源数据。

3. Web 界面数据来源可能为静态配置或错误缓存

Web 显示的信息(厂商为 Huawei,时间 1996/01/01)明显不符合常规,属于典型的 默认值或初始化占位符,说明:

  • Web 页面调用了 FRU 接口(如 bmc.kepler.Systems.FruData.Board.Product)获取数据;
  • 而这些接口的数据仍来自旧的、未更新的 FRU 缓存,或者使用了错误的 FruSource 设置。

反观 I2C 直接读取的结果显示制造商为 GREATLLLLLLLLLLLLLLLLLLLLLLL,说明实际硬件 EEPROM 中的数据是有效的。


4. 配置项 FruSource 决定数据源

  • FruSource = 1 时,系统优先从 EEPROM 获取 FRU 数据;
  • FruSource = 0 时,系统应从 电源模块本身(PSU) 获取数据(通常通过 PMBus);
  • 当前系统可能配置为从 EEPROM 读取,但 Web 显示的值并未与 EEPROM 内容一致,说明存在中间层处理异常或数据映射错误。

涉及的关键组件与流程

组件/接口 角色
PsuSlot 抽象电源槽位,管理 I2C 地址、存在状态、FRU 数据源
FruSource 控制 FRU 数据来源(EEPROM vs PSU)
FruI2cAddr 指定读取 FRU 的 I2C 地址(如 0x50
FetchPowerSupplyInfo 刷新 PSU 的动态 FRU 数据
GetFruidInfo, GetFruidFromUid IPMI 方法用于获取 FRU ID 和详情
bmc.kepler.Systems.FruData.* D-Bus 接口,向 Web/Redfish 提供 FRU 信息
power_mgmt 主控电源管理模块,负责协调 PSU 数据采集与更新

可能的原因总结

  1. :white_check_mark: FruSource 配置错误:系统配置为从硬件读取 FRU,但实际行为混乱;
  2. :white_check_mark: FRUDATA 未与 OnePower 同步:即便 PMBus 读取成功,frudata 未更新其内部数据;
  3. :white_check_mark: Web 接口数据未刷新:D-Bus 接口 bmc.kepler.Systems.FruData 返回的是初始化时的默认值;
  4. :white_check_mark: EEPROM 数据解析异常:I2C 读取数据未被正确解码为 FRU 结构体;
  5. :white_check_mark: 缓存机制未清除:系统启动后未触发 update_fru_datafetch_property 更新操作。

解决建议

一、验证当前 FRU 数据源配置

# 查看当前 FruSource 配置(伪命令示意)
busctl get-property bmc.kepler.hwproxy.PsuSlot SlotNumber
busctl get-property bmc.kepler.hwproxy.PsuSlot FruSource

确保其与预期一致。


二、手动刷新 FRU 数据

尝试执行刷新命令,强制更新 FRU 缓存:

# 使用 ipmictl 刷新(若支持)
ipmictl fru re-read

# 或调用 fetch 操作
busctl call bmc.kepler.power_mgmt /bmc/kepler/power_mgmt/OnePower_0 \
    bmc.kepler.PowerSupply fetch_fru_data

三、检查 FRU 解码一致性

对比以下三种数据是否一致:

来源 命令 目的
I2C EEPROM i2ctransfer -y <bus> w2@0x50 0 0 r255 确认原始二进制数据
IPMI 工具 ipmcget -d fruinfo 检查 BMC 层解析结果
D-Bus 接口 busctl get-property bmc.kepler.Systems.FruData.Board ManufacturerName 查看 Web 数据源

若三者不一致,则说明 解析层或数据映射出错


四、启用动态同步机制

在设备树或 CSR 配置中,确保调用 update_fru_data() 并设置重试机制(最多3次)以确保同步成功。

示例逻辑:

function update_fru_data()
    local fru = read_fru_from_psu() -- via PMBus
    if fru then
        write_to_frudata(fru) -- 更新 frudata
        return true
    end
    return false
end

五、排查 Web 显示逻辑

确认 Web 前端调用的是正确的 D-Bus 接口:

  • 应访问:bmc.kepler.Systems.FruData.ProductBoard
  • 检查 ManufacturerName, BoardFRUFileID, MfgDate 等字段是否更新

结论

Web 显示的 PSU FRU 信息与 I2C 实际读取值不符的根本原因是:

frudata 组件未能正确同步来自电源模块(PMBus)或 EEPROM 的真实 FRU 数据,导致 Web 界面展示的是默认值或陈旧缓存数据。

推荐处理步骤:

  1. 确认 FruSource 设置合理;
  2. 通过命令强制刷新 FRU 数据;
  3. 验证 I2C、IPMI、D-Bus 三层数据一致性;
  4. 修复 frudataOnePower 的同步机制;
  5. 重启 power_mgmt 服务测试效果。

附加建议:参考文档 #8 提到的 “【问题单】修复电源FRU中制造时间异常”,此类问题已在历史 issue 中出现,建议查阅对应修复方案并进行回归验证。

具体是哪个信息不符,读取的和显示的是什么

psu fru里配的是长城的厂商和型号,web显示的都是华为的信息

你这款电源是有单独的可直接访问的eep吗?我记得电源的fru信息是从电源imu用特定的命令字拿出来的

是的这个电源有单独的fru eeprom