component_drive仓适配网卡失败

问题描述

在component_drive仓适配网卡失败

环境信息

  • 2512版本

重现步骤

  1. 在component_drive仓适配网卡失败,添加sr文件和dds文件:

    在manifest下的build/product/BMC/openUBMC/rootfs/include/profile.txt添加新增的sr文件,并出hpm包,web发现网卡未识别

  2. 在/opt/bmc/sr下查看新增的sr文件已经被打包

  3. devmon服务没有被加载(删除新增sr文件后出包有devmon服务)

  4. 为确保sr文件无误,除了文件名,其余内容都是复制原有类似sr文件的内容,出包后devmon服务未被加载

期望结果

目前多次测试发现是新增文件会导致devmon服务加载失败,这是为什么

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

:white_check_mark: 总结:根本原因与对策

项目 结论
:red_circle: 根本原因 .sr 文件格式或内容错误导致 devmon 启动失败
:yellow_circle: 次要原因 devmoncomponent_drivers 版本不兼容
:green_circle: 解决方案 1. 修正 .sr 内容;2. 更新 mds/service.json;3. 对齐组件版本
:books: 参考文档 openUBMC网卡配置指南, 南向网卡驱动适配指南
点击此处查看详细分析解答

component_drivers 仓适配网卡失败问题分析与解决方案

根据您提供的故障现象和环境信息,以下是对 component_drivers 仓适配网卡失败问题的全面诊断与解决建议。该问题表现为:

  • 已在 component_drivers 仓中新增 .sr.dds 文件
  • profile.txt 中已声明该 .sr 文件并打包 HPM
  • .sr 文件确认已打入镜像
  • Web 界面未识别网卡,且 devmon 服务未能加载(删除 .sr 文件后 devmon 可正常启动)

:magnifying_glass_tilted_left: 问题核心定位

结合知识库中的信息与问题表现,根本原因很可能在于:

:white_check_mark: .sr 文件存在语法错误、结构异常或路径配置不正确,导致 devmon 在初始化阶段解析失败,进而引发服务崩溃或加载阻塞。

这解释了两个关键现象:

  1. devmon 服务不启动 → 表明系统在加载 .sr 时发生致命异常。
  2. 删除 .srdevmon 正常 → 验证了是此文件导致服务异常。

:puzzle_piece: 网卡识别机制回顾(基于 openUBMC 架构)

1. SR 文件的作用

SR(Self-describing Record)是 openUBMC 中用于描述硬件属性、拓扑关系和管理策略的核心配置文件。
其核心作用包括:

  • 定义设备类型(PCIe/NIC/GPU 等)
  • 提供设备监控模型(温度、电压、告警等传感器)
  • 指导 devmon 如何加载设备驱动和发布 D-Bus 对象

:warning:.sr 文件格式非法或逻辑冲突,devmon 在启动时将无法完成对象解析,导致服务退出。


2. SR 文件命名规范

网卡 .sr 文件名需遵循特定规则:

条件 命名方式
普通 PCIe 网卡 BOM + VendorID + DeviceID
特殊场景(如带 AuxId) BOM + ID + AUXID

例如:

/opt/bmc/sr/14140130_15b31017_15b30160.sr

其中:

  • 14140130: BOM ID
  • 15b3: Vendor ID(Mellanox)
  • 1017: Device ID
  • 15b30160: Subsystem ID 或 AuxID

:white_check_mark: 您的命名 14140130_15b31017_15b30160.sr 看似符合规范,但仍需验证是否与硬件实际信息一致。


:magnifying_glass_tilted_right: 故障排查步骤

:white_check_mark: 步骤 1:检查 .sr 文件语法与完整性

操作:

进入系统日志目录,检查 hwdiscoverydevmon 是否有解析 .sr 的报错。

journalctl -u devmon | grep -i error
# 或
cat /var/log/hw_stream.log | grep -i "sr\|error\|failed"

预期可能发现的错误:

hwdiscovery ERROR: position: 0101010903, get component sr failed, error: Local file not found, open file failed: /opt/bmc/sr/...
Invalid CSR format version
parse sr failed: invalid json syntax
devmon: symbol lookup error: ...

:warning: 注意:即使文件存在,内容若非合法 JSON 或结构不匹配,仍会导致解析失败。


:white_check_mark: 步骤 2:确认 .sr 内容合法(参考标准模板)

请确保 .sr 文件基于标准模板生成,基本结构如下:

{
  "Objects": {
    "PCIeCard_1": {
      "Name": "Mellanox ConnectX-5",
      "VendorID": "15b3",
      "DeviceID": "1017",
      "Manufacturer": "Mellanox",
      "Model": "MCX515A-CCAT"
    },
    "NetworkAdapter_1": {
      "NetworkPortCount": 2,
      "SupportedMctp": true,
      "HotPluggable": false
    }
  }
}

建议:

  • 使用已知成功网卡的 .sr 文件作为模板(如 MCX515A-CCAT
  • 检查 ObjectPathObjectType 是否声明正确
  • 确保没有中文注释、UTF-8 BOM 头或非法字符

:white_check_mark: 步骤 3:验证 .dds 文件是否正确注册

.dds(Device Description Specification)用于南向驱动框架识别设备接口。

必须满足:

  • .dds 文件与 .sr 基本同名
  • 位于 drivers/pcie_nic_card/mellanox/csr/CX-5/
  • 包含正确的 object_path, interface, driver_name

示例片段(dds):

{
  "interface": "xyz.openbmc_project.Network.Mellanox.ConnectX5",
  "driver": "mellanox_cx5_driver"
}

:cross_mark: 缺少 .dds 或接口不匹配 → 导致对象无法绑定驱动


:white_check_mark: 步骤 4:检查 mds/service.json 是否更新

mds/service.jsondevmon 的插件注册表。

必须操作:

git add mds/service.json

并在 components 数组中添加:

{
  "name": "pcie_nic_card",
  "path": "drivers/pcie_nic_card/mellanox"
}

否则即使文件存在,框架也不会主动扫描该目录。


:white_check_mark: 步骤 5:确认 profile.txt 引用路径正确

在:

manifest/build/product/BMC/openUBMC/rootfs/include/profile.txt

加入行:

sr_files += "/opt/bmc/sr/14140130_15b31017_15b30160.sr"

:warning: 文件名拼写、路径、大小写必须完全一致


:white_check_mark: 步骤 6:检查 devmon 依赖版本兼容性

您提到使用的是 25.12 版本,而以下信息从上下文提取:

:pushpin: “尝试使用新版本1.1.36的component_drivers,但是服务器启动后devmon服务自动加载失败……报错 symbol lookup error”

此错误表明:

undefined symbol: _ZN2mc7runtime18condition_variable13remove_waiterEPNS1_10WaiterNodeE

devmonmc::runtime 库版本不兼容,动态链接失败。

:white_check_mark: 解决方案:

  • 升级 devmon 到匹配版本(如 1.1.30 或以上)
  • 或回退 component_drivers 至与当前 devmon 兼容版本(如 1.1.7

建议统一 manifest.yml 中各组件版本,避免混合打包不同分支代码。


:white_check_mark: 最佳实践与建议(来自社区经验)

建议项 说明
优先使用 component_drivers 根据社区经验,PCIe 网卡适配应优先放在 component_drivers,而非 VPD 仓([参考 Document Chunk 1])
命名格式:BOM + 四元组 确保 .sr 文件名为 BOM_VID_DID_SVID_SSID.sr 或等效组合
使用设备树方案 社区推荐采用设备树方式实现动态加载([参考 Document Chunk 1])
先测试无 BOM 路径 加载逻辑为:先尝试带 BOM,失败再试无 BOM。可临时复制一份用于调试
避免空字段 .sr 中不要留空 ManufacturerModel,可能导致解析失败

:hammer_and_wrench: 推荐修复流程

# 1. 备份 & 清理
mv /opt/bmc/sr/14140130_15b31017_15b30160.sr /tmp/

# 2. 重启 devmon 验证是否恢复
systemctl restart devmon
systemctl status devmon  # 应正常运行

# 3. 检查日志
journalctl -u devmon | grep -i error

# 4. 使用已知正确 .sr 文件进行替换测试
cp /opt/bmc/sr/existing_working.sr /opt/bmc/sr/14140130_15b31017_15b30160.sr

# 5. 重启并验证 Web 是否识别

# 6. 若成功 → 逐步修改为您的真实配置内容(字段逐一添加)

:white_check_mark: 总结:根本原因与对策

项目 结论
:red_circle: 根本原因 .sr 文件格式或内容错误导致 devmon 启动失败
:yellow_circle: 次要原因 devmoncomponent_drivers 版本不兼容
:green_circle: 解决方案 1. 修正 .sr 内容;2. 更新 mds/service.json;3. 对齐组件版本
:books: 参考文档 openUBMC网卡配置指南, 南向网卡驱动适配指南

:white_check_mark: 最终建议操作清单:

  1. :white_check_mark: 检查 hw_stream.log 查看 sr 加载错误详情
  2. :white_check_mark: 验证 .sr 文件语法、路径、字段完整性
  3. :white_check_mark: 确认 mds/service.json 已添加新驱动路径
  4. :white_check_mark: 检查 devmoncomponent_drivers 版本兼容性
  5. :white_check_mark: 使用已知成功的 .sr 文件做对照测试

完成以上步骤后,网卡应能在 Web 界面正常识别

如仍存在问题,建议上传 .sr 文件内容与日志片段做进一步分析。

可能是CSR里面配置哪儿配错了,导致devmon服务挂掉了

应该不会,除了文件名,其余都是复制原有14140130_15b31017_15b30006.sr文件内容的,排除csr内容出错导致devmon起不来

LTS分支没有带南向组件

是的,用了main分支可以了,devmon也起来了