问题描述
web显示的psu fru信息
i2c读取到的psu fru 信息
fru配置
环境信息
-
软件版本:OpenUBMC2512
-
硬件配置:920L模组
答案内容由AI生成,仅供参考:
Web 显示的 PSU FRU 信息与 I2C 实际读取值不符的根本原因是:
frudata组件未能正确同步来自电源模块(PMBus)或 EEPROM 的真实 FRU 数据,导致 Web 界面展示的是默认值或陈旧缓存数据。
FruSource 设置合理;frudata 与 OnePower 的同步机制;power_mgmt 服务测试效果。附加建议:参考文档 #8 提到的 “【问题单】修复电源FRU中制造时间异常”,此类问题已在历史 issue 中出现,建议查阅对应修复方案并进行回归验证。
用户反馈在 Web 界面显示的 PSU(电源供应单元)FRU(现场可更换单元)信息与通过 I2C 总线直接读取的 FRU 数据存在不一致情况。具体表现为:
Web 界面显示:
25.12.00.011996/01/01I2C 实际读取(地址 0x50):
GREATLLLLLLLLLLLLLLLLLLLLLLL(ASCII 解码)此现象表明系统中存在FRU 信息来源不一致的问题。
根据提供的知识库内容,可以定位到导致该问题的核心机制和可能原因如下:
系统通过以下两种方式获取 FRU 信息:
FetchPowerSupplyInfo 方法从电源设备的 PMBus 接口读取动态信息。0x50):通过 Ipmictl Command 或 ipmcget -d fruinfo 命令读取预写入的静态 FRU 数据。文档中明确指出:
FruSource配置项决定了 FRU 数据是从EEPROM还是从PowerSupply读取。
尽管 power_mgmt 组件支持从电源模块读取信息(如制造商、型号、序列号等),但当前 FRUDATA 组件未自动同步来自 OnePower 的最新 PMBus 读取信息。
相关证据:
frudata 组件目前依赖预设值而非实时同步电源数据。Web 显示的信息(厂商为 Huawei,时间 1996/01/01)明显不符合常规,属于典型的 默认值或初始化占位符,说明:
bmc.kepler.Systems.FruData.Board 或 .Product)获取数据;FruSource 设置。反观 I2C 直接读取的结果显示制造商为 GREATLLLLLLLLLLLLLLLLLLLLLLL,说明实际硬件 EEPROM 中的数据是有效的。
FruSource 决定数据源FruSource = 1 时,系统优先从 EEPROM 获取 FRU 数据;FruSource = 0 时,系统应从 电源模块本身(PSU) 获取数据(通常通过 PMBus);| 组件/接口 | 角色 |
|---|---|
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 数据采集与更新 |
FruSource 配置错误:系统配置为从硬件读取 FRU,但实际行为混乱;frudata 未更新其内部数据;bmc.kepler.Systems.FruData 返回的是初始化时的默认值;update_fru_data 或 fetch_property 更新操作。# 查看当前 FruSource 配置(伪命令示意)
busctl get-property bmc.kepler.hwproxy.PsuSlot SlotNumber
busctl get-property bmc.kepler.hwproxy.PsuSlot FruSource
确保其与预期一致。
尝试执行刷新命令,强制更新 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
对比以下三种数据是否一致:
| 来源 | 命令 | 目的 |
|---|---|---|
| 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 前端调用的是正确的 D-Bus 接口:
bmc.kepler.Systems.FruData.Product 和 BoardManufacturerName, BoardFRUFileID, MfgDate 等字段是否更新Web 显示的 PSU FRU 信息与 I2C 实际读取值不符的根本原因是:
frudata组件未能正确同步来自电源模块(PMBus)或 EEPROM 的真实 FRU 数据,导致 Web 界面展示的是默认值或陈旧缓存数据。
FruSource 设置合理;frudata 与 OnePower 的同步机制;power_mgmt 服务测试效果。附加建议:参考文档 #8 提到的 “【问题单】修复电源FRU中制造时间异常”,此类问题已在历史 issue 中出现,建议查阅对应修复方案并进行回归验证。
具体是哪个信息不符,读取的和显示的是什么
你这款电源是有单独的可直接访问的eep吗?我记得电源的fru信息是从电源imu用特定的命令字拿出来的
是的这个电源有单独的fru eeprom