问题描述
自己添加了一个新的FruData对象如下图:
一开始按照教程id填的是1,后来改成了3,但是不管设为几,最后在bmc中看到的都是1,且跟另一个FruData_Expander_0101冲突,id都为1,这是怎么回事?
环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:[如 OpenUBMC2509]
自己添加了一个新的FruData对象如下图:
操作系统:[如 Ubuntu 24.04]
软件版本:[如 OpenUBMC2509]
答案内容由AI生成,仅供参考:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| FruId始终显示为1 | 系统对1–63范围内的FruId执行自动分配,忽略配置值 | 将FruId设为≥64 |
| 多个FruData对象FruId冲突 | 多个对象落入自动分配区间,系统统一分配为1 | 确保FruId唯一且超出自动分配范围 |
| 配置值未生效 | Overview接口中的FruId由系统注入,未读取CSR原始值 |
审查frudata服务初始化逻辑 |
建议操作:立即将
FruData_Fru1的FruId改为64或更高值,并重新加载配置,然后使用lsprop验证FruId是否正确体现。
您在系统中添加了一个新的FruData_Fru1对象,配置的FruId为3(或1),但最终在BMC中通过lsprop查看时,其FruId显示为1。同时,该对象与已有的FruData_Expander_0101对象在FruId上发生冲突,两者均显示为1。
从提供的lsprop输出可见:
FruData_Fru1_0101的bmc.kepler.Systems.FruData.Overview.FruId=1FruData_Expander_0101的bmc.kepler.Systems.FruData.Overview.FruId=1尽管您在配置中指定FruId为3,但系统最终未能保留该值,而是将其统一设为1。
根据知识库和文档信息,FruId的分配遵循以下规则:
FruId值范围说明:
- 0:保留给“挂耳”(Bracket)等特殊用途;
- 1–63:系统会自动分配FruId;
- 64–255:使用用户配置值,不进行自动分配;
- 默认配置为1是常见做法。
相关证据:
因此,尽管您在CSR配置中将FruId设为3,只要其值落在1–63范围内,系统仍可能将其重新映射为1,从而导致多个FruData对象冲突。
Overview中被覆盖从lsprop输出可以看出,两个对象的FruId均来自bmc.kepler.Systems.FruData.Overview接口:
bmc.kepler.Systems.FruData.Overview
FruId = 1
说明:FruId的实际值可能并非直接取自CSR配置中的FruData.FruId字段,而是由系统在初始化过程中动态注入到Overview接口中的。
而该注入逻辑可能:
虽然您的对象命名为FruData_Fru1,但系统中已存在FruData_Expander_0101,如果两者都通过相同的资源协作路径(如MdbService)注册,并且未正确绑定到唯一的物理设备或EEPROM地址,则系统可能将它们视为同类设备并赋予相同的FruId。
此外,ObjectIdentifiers=["1","1","0101"] 的结构表明系统使用多级标识符,其中第二个“1”可能对应FruId字段,若此字段由系统自动生成,则无法保证与CSR中配置的一致性。
为避免系统自动分配机制干预,请将自定义FruData对象的FruId配置为64–255之间的值。
例如:
FruData_Fru1: {
"FruId": 64,
...
}
根据知识库:1–63范围内的FruId会被自动分配;64及以上才使用配置值。
这样可确保您设置的FruId不会被系统覆盖。
确保Fru对象正确引用FruData实例:
Fru_Expander_0101 {
"FruDataId": "#/FruData_Expander_0101"
}
若多个Fru对象引用了相同或错误的FruDataId,可能导致元数据混淆,进而使FruId重复。
确认ObjectIdentifiers字段在整个系统中唯一,避免不同对象拥有相同路径标识。可通过修改辅助字段(如GroupID、AuxId)确保唯一性。
检查系统是否存在如下情况:
FruData_Template)导致所有对象继承相同属性。可通过查看frudata组件的日志或源码中Update、GenerateFruId等方法确认逻辑。
| 来源 | 内容 |
|---|---|
| 搜索结果#1, #9 | “fruid配置为1-63会自动分配fruid,默认可以配为1” “fruid为0保留给挂耳,配置64-255不会进行fruid分配” |
知识图谱FruId实体 |
“有效FruId范围:1–63为自动分配;64–255为非标准/保留用途” |
关系 FruId → bmc.kepler.Systems.FruData.Overview |
FruId作为Overview接口属性,是运行时暴露的最终值,可能与配置值不同 |
| 问题 | 原因 | 解决方法 |
|---|---|---|
| FruId始终显示为1 | 系统对1–63范围内的FruId执行自动分配,忽略配置值 | 将FruId设为≥64 |
| 多个FruData对象FruId冲突 | 多个对象落入自动分配区间,系统统一分配为1 | 确保FruId唯一且超出自动分配范围 |
| 配置值未生效 | Overview接口中的FruId由系统注入,未读取CSR原始值 |
审查frudata服务初始化逻辑 |
建议操作:立即将
FruData_Fru1的FruId改为64或更高值,并重新加载配置,然后使用lsprop验证FruId是否正确体现。
fruid是工具position进行分配的,position不一样就会分配不一样的fruid,想深入了解的话看一下frudata初始化流程代码