答案内容由AI生成,仅供参考:
总结
| 问题环节 | 检查点 | 推荐操作 |
|---|---|---|
| SR 文件 | 文件是否存在、命名是否正确 | 从 vpd.git 拉取最新 SR |
| IdentifyMode | 是否为 2 |
修改 Riser SR 配置 |
| manifest.yml | storelib_enable 是否开启 |
添加配置并重新构建 |
| 日志分析 | 是否有 Load PCIeCard 打印 |
检查 app.log 和 framework.log |
| 通信协议 | I²C/MCTP 是否建立 | 使用 i2cdetect、mctpd 检查 |
点击此处查看详细分析解答
OpenUBMC 刷入 S920X20 后无法识别 PCIe 设备问题分析与解决方案
问题概述
用户在 S920X20 机型上刷入基于 OpenUBMC 2512LTS 版本的固件后,系统无法识别 网卡 和 RAID 卡 等 PCIe 设备。尽管环境搭建、编译构建及刷机流程已完成,但预期的硬件自发现功能未能正常工作,导致关键组件未被 BMC 正确加载与管理。
环境信息
- 操作系统:未明确指定(假设为 Ubuntu 20.04/22.04/24.04)
- 软件版本:OpenUBMC 2512LTS
- 硬件平台:S920X20
- 问题现象:PCIe 网卡、RAID 卡未被识别
- 期望结果:
vpd模块能正确加载并识别所有支持的硬件设备 - 实际结果:PCIe 设备缺失,
pcie_device未触发相关设备加载
问题原因分析
根据 OpenUBMC 的硬件自发现机制和文档内容,该问题涉及 VPD → PCIe Device → Storage/NIC 的多模块协同流程,失败原因可归结为以下几个关键环节:
1. VPD 配置缺失:SR 文件路径错误或未配置
- 根据 RAID卡适配指导:
- PCIe 设备识别依赖
vpd模块中的 SR 文件(Self-Description Resource),文件命名规则为BOM_ID_AUXID.sr。 - 若系统中缺少对应 PCIe 设备(如 RAID 卡、网卡)的 SR 文件,或路径配置不正确,则无法启动设备加载流程。
- PCIe 设备识别依赖
验证建议:检查
/opt/bmc/sr/目录下是否存在以下文件(以常见 RAID 卡为例):
14140130_100010e2_10004010.sr(Broadcom 9560-8i)- 对应网卡的 SR 文件(如
14xxxxxx_xxxxxxxx_xxxxxxxx.sr)
2. PCIe 拓扑构建失败:IdentifyMode 与 BDF 上报异常
- OpenUBMC 使用 动态 PCIe 加载机制,依赖 BIOS 向 BMC 上报 PCIe 设备的 BDF(Bus, Device, Function)信息。
- 关键流程如下:
- BIOS 通过 IPMI 命令
WritePcieCardBdfToBmc上报 PCIe 卡的 BDF - BMC 查询 PMU 获取设备四元组(Vendor ID, Device ID, SubVendor ID, SubDevice ID)
- 根据四元组匹配对应的 SR 文件并加载
- 触发
pcie_device模块加载设备并设置Id和AuxId
- BIOS 通过 IPMI 命令
若此流程中断,则日志中会缺少如下关键打印:
[BizTopoLoader] Load PCIeCard, Slot=3, path=/bmc/kepler/Connector/Connector_PCIE_SLOT3_01010103, Id-AuxId=100010e2-10004010
- 参考文档《bios相关FAQ》指出,BIOS 需启用
WritePcieCardBdfToBmc等命令,并确保通信链路正常。
3. IdentifyMode 配置错误
- 在 Riser 卡的 SR 文件中,
Connector_PCIE_SLOTx的IdentifyMode必须配置为2,表示“由 BIOS 上报 BDF 信息”。 - 若配置为其他值(如
0,1,3),会导致 BMC 无法进入动态识别模式。
检查项:
"Connector_PCIE_SLOT3": {
"Bom": "14140130",
"Slot": 3,
"IdentifyMode": 2,
"Type": "PCIe"
}
IdentifyMode = 2是 S920X20 等天池架构设备的标准配置。
4. pcie_device 模块初始化失败或依赖缺失
pcie_device是负责 PCIe 设备管理的核心模块,属于openUBMC.release包的一部分。- 若构建时未包含该模块,或其依赖库(如
libmgmt_protocol)配置错误,将导致无法加载 PCIe 卡。
已知问题(参考 RAID 适配文档):
- 缺少
storelib_enable: true配置会导致libsml_lsi.so等存储库无法加载,进而导致 RAID 卡注册失败。
修复方法(添加至 manifest.yml):
- conan: libmgmt_protocol
options:
storelib_enable: true
5. I²C/MCTP 通信异常:底层协议未适配
- 不同类型 PCIe 设备使用不同通信方式:
- Broadcom RAID 卡:使用 I²C 协议,地址通常为
0x02 - PMC/Huawei RAID/NIC 卡:使用 MCTP over PCIe
- OCP 网卡:可能使用 NCSI over MCTP over I²C/SMBus
- Broadcom RAID 卡:使用 I²C 协议,地址通常为
若固件中未启用相应驱动或协议栈,则无法与设备通信。
检查建议:
- 使用
i2cdetect -y <bus>检查 I²C 总线是否检测到设备 - 查看
busctl --user tree bmc.kepler.mctpd | cat是否存在 MCTP 绑定信息
解决方案
步骤一:确认 SR 文件完整性
- 登录系统,进入
/opt/bmc/sr/ - 列出所有
.sr文件:
ls /opt/bmc/sr/*.sr
- 确认是否存在目标设备的 SR 文件(如 RAID 卡、网卡)
- 若无,需从官方仓库(如
openUBMC/vpd.git)获取并部署
步骤二:验证 SR 文件配置
- 检查 Riser 卡 SR 文件中
Connector_PCIE_SLOTx的IdentifyMode是否为2 - 确认
Buses引脚配置正确(如使用Pca9545多路 I²C 扩展)
步骤三:修复 manifest.yml 配置
在构建配置文件中添加:
- conan: libmgmt_protocol
options:
storelib_enable: true
并重新编译整个镜像。
步骤四:检查 BIOS 是否上报 BDF
- 在 shell 中执行:
busctl --user tree bmc.kepler.hwdiscovery
- 查找
Connector_PCIE_SLOTx节点,确认其是否存在且Presence=1 - 检查
Id和AuxId是否非空且符合设备 ID
步骤五:查看日志定位问题
查看 app.log 或 framework.log 关键信息:
成功识别的日志特征:
[BizTopoLoader] Load PCIeCard, Slot=3, path=/bmc/kepler/Connector/..., Id-AuxId=100010e2-10004010
[hwdiscovery] get csr data from /opt/bmc/sr/14140130_100010e2_10004010.sr
[storage] controller init obj.Id = 255, object_id = 1
失败常见错误:
ERROR: adapter.c(603): Failed to load lsi sml library /usr/lib64/libsml_lsi.so: No such file or directory
ERROR: task [Controller.register_controller.0] error: ...ret: 4357
步骤六:启用调试信息(可选)
- 修改配置开启
pcie_device详细日志 - 使用
openubmc-bingo工具验证 SR 加载路径 - 在 QEMU 仿真环境中复现问题(OpenUBMC 25.09 支持 MCTP、SMBus 仿真)
补充说明:OpenUBMC 25.06/25.09 版本支持情况
| 版本 | RAID 卡支持 | 网卡支持 | PCIe 动态加载 |
|---|---|---|---|
| 25.06 | |||
| 25.09 |
提示:OpenUBMC 2512LTS 应基于 25.09 功能集进行裁剪,理论上支持 S920X20 所有 PCIe 设备。
总结
| 问题环节 | 检查点 | 推荐操作 |
|---|---|---|
| SR 文件 | 文件是否存在、命名是否正确 | 从 vpd.git 拉取最新 SR |
| IdentifyMode | 是否为 2 |
修改 Riser SR 配置 |
| manifest.yml | storelib_enable 是否开启 |
添加配置并重新构建 |
| 日志分析 | 是否有 Load PCIeCard 打印 |
检查 app.log 和 framework.log |
| 通信协议 | I²C/MCTP 是否建立 | 使用 i2cdetect、mctpd 检查 |
最终结论:当前问题极可能是 SR 文件缺失 + storelib_enable 未开启 导致 libsml_lsi.so 无法加载,进而引发 RAID 卡注册失败、网卡无法通信。建议优先修复 manifest.yml 配置并确认 SR 文件完整,即可恢复 PCIe 设备识别功能。
参考文档:
相关链接: