问题描述
如题,在sr文件中添加了一个FruData对象,但是通过busctl和ipmitool都看不到里面的属性
环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:[如 OpenUBMC2506]
如题,在sr文件中添加了一个FruData对象,但是通过busctl和ipmitool都看不到里面的属性
操作系统:[如 Ubuntu 24.04]
软件版本:[如 OpenUBMC2506]
答案内容由AI生成,仅供参考:
您在
FruData中添加的属性不可见,是因为 属性没有写入正确的 D-Bus 接口路径下,导致frudata组件无法识别和暴露这些数据。
bmc.kepler.Systems.FruData.Boardbmc.kepler.Systems.FruData.Productbmc.kepler.Systems.FruData.Systembmc.kepler.Systems.FruData.OverviewMfgDate,非 MfdDate)busctl 和 mdbctl 验证资源树是否更新ipmitool fru print <id> 查看最终输出完成以上步骤后,属性即可正常显示。
在 FruData 中添加了属性但无法通过 busctl 和 ipmitool 查看,其根本原因在于 属性必须通过 D-Bus 接口进行正确映射并分配到对应的接口类中,否则无法被外部工具识别和访问。
根据您提供的信息(包括 sr 配置文件、busctl introspect 输出和 ipmitool fru print 结果),以下为详细分析与解决方案。
sr 文件中已配置属性您已在 sr 文件中定义了一个 FruData_Fru1 对象,并为其设置了多个属性,例如:
{
"FruData_Fru1": {
"BoardManufacturer": "hjkl",
"ProductSerialNumber": "1234qwer",
"SystemSerialNumber": "5678asdf",
"SystemProductName": "zxcv"
}
}
busctl introspect 显示接口属性为空使用命令:
busctl --user introspect bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru1_0101
输出显示:
bmc.kepler.Systems.FruData.Board
.BoardManufacturer "Huawei"
.BoardPartNumber ""
...
但您设置的值(如 BoardManufacturer = hjkl)未生效,且 ProductSerialNumber、SystemSerialNumber 等字段为空。
ipmitool fru print 显示数据缺失或无效输出中:
Board Mfg 显示为 "Huawei"(默认值)Product Name、Serial Number 等关键字段在 OpenUBMC 架构中,即使你在 sr 文件中直接写入属性,这些属性不会自动映射到 D-Bus 接口属性上。sr 文件中的结构需遵循 CSR(Component Self-description Register)模型规范,并通过 硬件自发现机制 解析后,由 frudata 组件解析 EEPROM 数据并更新资源树。
您的问题根源在于:
您直接在
FruData_Fru1下写了属性,但没有将这些属性正确映射到bmc.kepler.Systems.FruData.Board、.Product、.System等标准接口中。
这些接口有固定的结构定义,只有写入对应接口路径下的属性才会生效并对外暴露。
应将属性分配到对应的标准 D-Bus 接口对象下,而不是平铺在 FruData_Fru1 根节点。
sr 配置方式(示例):{
"FruData_Fru1": {
"FruId": 1,
"FruDev": "#/Eeprom_BMC",
"EepromWp": 0,
"StorageType": "Others",
// ✅ 正确:将属性归入各自接口域
"bmc.kepler.Systems.FruData.Board": {
"BoardManufacturer": "hjkl",
"BoardPartNumber": "N/A",
"BoardSerialNumber": "N/A",
"BoardProductName": "",
"MfgDate": "2023/11/29 Wed 11:43:00"
},
"bmc.kepler.Systems.FruData.Product": {
"ManufacturerName": "hjkl",
"ProductSerialNumber": "1234qwer",
"ProductPartNumber": "PART-001",
"ProductName": "MyProduct"
},
"bmc.kepler.Systems.FruData.System": {
"SystemManufacturer": "hjkl",
"SystemProductName": "zxcv",
"SystemSerialNumber": "5678asdf",
"SystemVersion": "1.0"
},
"bmc.kepler.Systems.FruData.Overview": {
"FruId": 1,
"FruName": "Fru1",
"FruType": "0"
}
}
}
frudata 服务通过 D-Bus 暴露以下主要接口,每个接口管理特定类型的信息:
| 接口名称 | 用途 | 关键属性 |
|---|---|---|
bmc.kepler.Systems.FruData.Board |
板级信息 | BoardManufacturer, BoardSerialNumber, MfgDate |
bmc.kepler.Systems.FruData.Product |
产品信息 | ProductSerialNumber, ProductName, ManufacturerName |
bmc.kepler.Systems.FruData.System |
系统信息 | SystemSerialNumber, SystemProductName |
bmc.kepler.Systems.FruData.Overview |
FRU 概览 | FruId, FruName, FruType |
如果不将属性放在上述接口路径下,它们不会被
frudata解析,也无法被ipmitool或 Redfish API 访问。
busctl 查看完整对象属性busctl --user introspect bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru1_0101
确保各接口下的属性已正确填充。
busctl --user tree bmc.kepler.frudata
查看 /bmc/kepler/Systems/1/FruDatas/FruData_Fru1_... 是否存在。
mdbctl 查看实际资源树属性mdbctl lsprop FruData_Fru1_0101
可查看运行时的实际属性值。
ipmitool 查看 FRU 内容ipmitool -H <IP> -I lanplus -U Administrator -P password fru print 1
此时应能正确显示 Product Name、Serial Number 等字段。
| 问题 | 原因 | 解决方案 |
|---|---|---|
属性写在 FruData_FruX 根下 |
未归属于标准接口 | 将属性移至 bmc.kepler.Systems.FruData.Board 等接口下 |
使用默认值(如 "Huawei") |
属性未覆盖或未生效 | 确认接口路径正确,重启 frudata 服务 |
ipmitool fru print 显示 Device not present |
FRU ID 不匹配或未激活 | 检查 FruId 是否被正确识别,确认 EEPROM 存在 |
属性名拼写错误(如 MfdDate) |
应为 MfgDate |
检查属性名是否符合标准定义 |
服务未加载 FruData 对象 |
CSR 未正确分发 | 使用 busctl tree bmc.kepler.frudata 验证对象是否存在 |
sr 文件,确保属性按接口分类;systemctl restart bmc.kepler.frudata
busctl --user tree bmc.kepler.frudata
busctl --user introspect bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru1_0101
ipmitool fru print 1 验证输出。
您在
FruData中添加的属性不可见,是因为 属性没有写入正确的 D-Bus 接口路径下,导致frudata组件无法识别和暴露这些数据。
bmc.kepler.Systems.FruData.Boardbmc.kepler.Systems.FruData.Productbmc.kepler.Systems.FruData.Systembmc.kepler.Systems.FruData.OverviewMfgDate,非 MfdDate)busctl 和 mdbctl 验证资源树是否更新ipmitool fru print <id> 查看最终输出完成以上步骤后,属性即可正常显示。
这是值不是csr配置的,是从eeprom读的