OpenUBMC 刷入s920X20之后识别不了PCIE设备

答案内容由AI生成,仅供参考:

总结

问题环节 检查点 推荐操作
SR 文件 文件是否存在、命名是否正确 vpd.git 拉取最新 SR
IdentifyMode 是否为 2 修改 Riser SR 配置
manifest.yml storelib_enable 是否开启 添加配置并重新构建
日志分析 是否有 Load PCIeCard 打印 检查 app.logframework.log
通信协议 I²C/MCTP 是否建立 使用 i2cdetectmctpd 检查
点击此处查看详细分析解答

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 文件,或路径配置不正确,则无法启动设备加载流程。

:white_check_mark: 验证建议:检查 /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)信息
  • 关键流程如下:
    1. BIOS 通过 IPMI 命令 WritePcieCardBdfToBmc 上报 PCIe 卡的 BDF
    2. BMC 查询 PMU 获取设备四元组(Vendor ID, Device ID, SubVendor ID, SubDevice ID)
    3. 根据四元组匹配对应的 SR 文件并加载
    4. 触发 pcie_device 模块加载设备并设置 IdAuxId

:no_entry: 若此流程中断,则日志中会缺少如下关键打印:

[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_SLOTxIdentifyMode 必须配置为 2,表示“由 BIOS 上报 BDF 信息”。
  • 若配置为其他值(如 0, 1, 3),会导致 BMC 无法进入动态识别模式。

:white_check_mark: 检查项

"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 卡。

:red_exclamation_mark: 已知问题(参考 RAID 适配文档):

  • 缺少 storelib_enable: true 配置会导致 libsml_lsi.so 等存储库无法加载,进而导致 RAID 卡注册失败。

:white_check_mark: 修复方法(添加至 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

:cross_mark: 若固件中未启用相应驱动或协议栈,则无法与设备通信。

:white_check_mark: 检查建议:

  • 使用 i2cdetect -y <bus> 检查 I²C 总线是否检测到设备
  • 查看 busctl --user tree bmc.kepler.mctpd | cat 是否存在 MCTP 绑定信息

解决方案

:white_check_mark: 步骤一:确认 SR 文件完整性

  1. 登录系统,进入 /opt/bmc/sr/
  2. 列出所有 .sr 文件:
ls /opt/bmc/sr/*.sr
  1. 确认是否存在目标设备的 SR 文件(如 RAID 卡、网卡)
  2. 若无,需从官方仓库(如 openUBMC/vpd.git)获取并部署

:white_check_mark: 步骤二:验证 SR 文件配置

  1. 检查 Riser 卡 SR 文件中 Connector_PCIE_SLOTxIdentifyMode 是否为 2
  2. 确认 Buses 引脚配置正确(如使用 Pca9545 多路 I²C 扩展)

:white_check_mark: 步骤三:修复 manifest.yml 配置

在构建配置文件中添加:

- conan: libmgmt_protocol
  options:
    storelib_enable: true

并重新编译整个镜像。


:white_check_mark: 步骤四:检查 BIOS 是否上报 BDF

  1. 在 shell 中执行:
busctl --user tree bmc.kepler.hwdiscovery
  1. 查找 Connector_PCIE_SLOTx 节点,确认其是否存在且 Presence=1
  2. 检查 IdAuxId 是否非空且符合设备 ID

:white_check_mark: 步骤五:查看日志定位问题

查看 app.logframework.log 关键信息:

:white_check_mark: 成功识别的日志特征:

[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

:cross_mark: 失败常见错误:

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

:white_check_mark: 步骤六:启用调试信息(可选)

  • 修改配置开启 pcie_device 详细日志
  • 使用 openubmc-bingo 工具验证 SR 加载路径
  • 在 QEMU 仿真环境中复现问题(OpenUBMC 25.09 支持 MCTP、SMBus 仿真)

补充说明:OpenUBMC 25.06/25.09 版本支持情况

版本 RAID 卡支持 网卡支持 PCIe 动态加载
25.06 :check_mark: 9560-8i, 9440-8i, SP686C-M :check_mark: BF2, BF3 等 :check_mark: 基础支持
25.09 :check_mark: 新增 SP686C-M 系列 :check_mark: E810xx, MCX755106AS :check_mark: MCTP over I2C/SMBus

提示:OpenUBMC 2512LTS 应基于 25.09 功能集进行裁剪,理论上支持 S920X20 所有 PCIe 设备。


总结

问题环节 检查点 推荐操作
SR 文件 文件是否存在、命名是否正确 vpd.git 拉取最新 SR
IdentifyMode 是否为 2 修改 Riser SR 配置
manifest.yml storelib_enable 是否开启 添加配置并重新构建
日志分析 是否有 Load PCIeCard 打印 检查 app.logframework.log
通信协议 I²C/MCTP 是否建立 使用 i2cdetectmctpd 检查

:white_check_mark: 最终结论:当前问题极可能是 SR 文件缺失 + storelib_enable 未开启 导致 libsml_lsi.so 无法加载,进而引发 RAID 卡注册失败、网卡无法通信。建议优先修复 manifest.yml 配置并确认 SR 文件完整,即可恢复 PCIe 设备识别功能。

:link: 参考文档:

相关链接:

  1. 【教学培训篇】体验openUBMC
  2. openUBMC调试工具安装指导
  3. 【提问求助】25.06源码构建的qemu,启动后网页无法打开
  4. openUBMC是否支持mcpt over pcie升级硬盘固件?
  5. RAID卡常见问题指南 | 文档中心 | openUBMC