问题描述
我们编译950CPU环境的BMC包后,发现BMC获取switch板MCU版本和CPLD版本失败
环境信息
-
操作系统:openEuler
-
软件版本:openUBMC 2026 330分支
-
硬件配置:1712 BMC
期望结果
问题排查方案与思路有哪些?
实际结果
web上查看IEU组件,看到Swith板MCU和CPLD版本获取不到
尝试过的解决方案
- 我们让硬件测量了Eeproom信号,发现有相关信号,另外我们在BMC后台通过I2C工具能访问Eeproom相关数据和扫描到相关设备地址
- 另外我们查看日志和riser对象没有正常加载
答案内容由AI生成,仅供参考:
总结
您当前的问题最可能指向 I2C通道状态异常 或 CSR对象配置缺失。建议按照上述排查步骤,重点检查通道状态和CSR文件完整性。若硬件I2C通路和Eeprom数据本身正常,则问题大概率属于软件层面的时序或配置问题。可参考社区讨论帖(如Topic 4695和4863)中提供的详细分析。
如需要更具体的命令或配置文件检查示例,请提供相关日志片段,以便进一步定位。
点击此处查看详细分析解答
根据您提供的上下文信息,针对BMC加载Riser Eeprom失败、无法获取Switch板MCU/CPLD版本的问题,以下是基于知识库内容的排查思路与建议。
问题根因分析
从您描述的现象(硬件I2C通路正常、BMC后台可通过I2C工具访问Eeprom,但资源树中Riser对象未正常加载)来看,问题很可能与 Hisport总线上Eeprom对象生成失败 有关。在上下文中有多个类似案例,典型的错误日志如下:
hwdiscovery ERROR: hwcomponent.lua(185): position: 01010109, get component sr failed, error: read eeprom header failed, err: Device access failed, Unknown object path /bmc/kepler/Chip/Eeprom/Eeprom_3_9_010101
这明确指向 Eeprom读取头部失败,导致Riser卡无法加载CSR数据,进而无法获取MCU/CPLD版本信息。
已知原因(来自社区经验)
-
I2C通道状态不正确
在较新的openUBMC版本中,I2C通道默认由MCU管理,BMC访问Eeprom前需要将通道切换到BMC侧。如果通道状态未正确切换(例如从旧版本升级后或AC重启时序问题),会导致访问失败。
- 社区案例中分析:老版本通道常驻BMC侧(1),新版本启动后MCU将通道切到MCU侧(0),BMC访问EEP前若未执行切通道操作,则失败。
- 临时措施:升级后人工断电再进行AC重启,可使通道状态恢复正常。
-
CSR配置或对象依赖缺失
- 如果IEU组件的CSR文件中未正确定义对应的Smc对象(如
Smc_ExpBoardSMC),或Eeprom对象属性配置错误,会导致BMC无法正确加载Riser卡对象。
- 例如在“读取fru显示Device not present”案例中,因CSR文件缺少SMC命令字对象,导致FRU信息读取失败。
- 需要检查CSR文件中是否配置了正确的RiserCard对象、Eeprom对象及关联的MCU/CPLD升级对象。
-
硬件链路时序问题
- BMC启动速度快于NPU/OS加载,若在NPU MCU未完全初始化前访问Eeprom,可能返回失败。
- 可尝试在Chip对象中增加
DrvWriteDelay属性,延长写操作等待时间。
排查步骤建议
| 步骤 |
操作 |
预期 |
| 1 |
查看app.log,确认具体错误内容(如read eeprom header failed、Device access failed) |
定位错误类型 |
| 2 |
检查资源树中Hisport总线下的Eeprom对象是否存在(例如Eeprom_3_9_010101) |
确认对象是否生成 |
| 3 |
使用mdbctl命令检查I2C通道状态,判断当前通道是否在BMC侧 |
命令参考:mdbctl call Chip_MCU1_01010103 bmc.kepler.Chip.BlockIO ComboWriteRead ...(详见上下文文档块) |
| 4 |
若通道在MCU侧,尝试手动切换至BMC侧后重新加载 |
设置命令:mdbctl call ... 0x01 0x4b 0x21 40 |
| 5 |
对比正常和异常的Eeprom数据,确认是否因错误写入CSR导致Eeprom头部损坏 |
使用I2C工具dump完整数据 |
| 6 |
检查CSR文件中是否包含正确的Smc_ExpBoardSMC对象定义,以及RiserCard对象属性 |
参考“IEU CSR配置指导书” |
| 7 |
检查CPLD版本是否过低或不兼容,可能影响链路选通 |
可通过dmesg查看CPLD扫链日志 |
| 8 |
确认BMC与MCU之间的心跳通信是否正常,MCU是否正常运行 |
查看MCU自检告警日志 |
已知解决方案(来自社区)
- 临时规避:升级完成后,对整机执行一次完整的下电(AC断电)再上电,可强制重置通道状态。
- 永久修复:确保在BMC启动流程中正确实现通道切换逻辑(适用于新版本方案)。
- 配置补充:在CSR文件中补充缺失的SMC对象定义,或调整Eeprom对象的访问参数。
总结
您当前的问题最可能指向 I2C通道状态异常 或 CSR对象配置缺失。建议按照上述排查步骤,重点检查通道状态和CSR文件完整性。若硬件I2C通路和Eeprom数据本身正常,则问题大概率属于软件层面的时序或配置问题。可参考社区讨论帖(如Topic 4695和4863)中提供的详细分析。
如需要更具体的命令或配置文件检查示例,请提供相关日志片段,以便进一步定位。
上图中两个读取失败的原因分别是存在对应的Accessor和Eeprom对象不存在,导致读取失败。有可能是CSR配置有误导致的,但更像是整个riser的CSR未加载导致。
建议检查一下riser的CSR是否进行了加载,请确认上一级CSR中riser对应的connector对象,该对象的presence是如何配置的,是否由于connector配置不正确导致下一级未加载。
已解决,是另一riser占用了该sw板的通道,导致该sw eeprom读取失败