点击此处查看详细分析解答
component_drivers 仓适配网卡失败问题分析与解决方案
根据您提供的故障现象和环境信息,以下是对 component_drivers 仓适配网卡失败问题的全面诊断与解决建议。该问题表现为:
- 已在
component_drivers 仓中新增 .sr 和 .dds 文件
- 在
profile.txt 中已声明该 .sr 文件并打包 HPM
.sr 文件确认已打入镜像
- 但 Web 界面未识别网卡,且
devmon 服务未能加载(删除 .sr 文件后 devmon 可正常启动)
问题核心定位
结合知识库中的信息与问题表现,根本原因很可能在于:
.sr 文件存在语法错误、结构异常或路径配置不正确,导致 devmon 在初始化阶段解析失败,进而引发服务崩溃或加载阻塞。
这解释了两个关键现象:
devmon 服务不启动 → 表明系统在加载 .sr 时发生致命异常。
- 删除
.sr 后 devmon 正常 → 验证了是此文件导致服务异常。
网卡识别机制回顾(基于 openUBMC 架构)
1. SR 文件的作用
SR(Self-describing Record)是 openUBMC 中用于描述硬件属性、拓扑关系和管理策略的核心配置文件。
其核心作用包括:
- 定义设备类型(PCIe/NIC/GPU 等)
- 提供设备监控模型(温度、电压、告警等传感器)
- 指导
devmon 如何加载设备驱动和发布 D-Bus 对象
若 .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
您的命名 14140130_15b31017_15b30160.sr 看似符合规范,但仍需验证是否与硬件实际信息一致。
故障排查步骤
步骤 1:检查 .sr 文件语法与完整性
操作:
进入系统日志目录,检查 hwdiscovery 或 devmon 是否有解析 .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: ...
注意:即使文件存在,内容若非合法 JSON 或结构不匹配,仍会导致解析失败。
步骤 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)
- 检查
ObjectPath、ObjectType 是否声明正确
- 确保没有中文注释、UTF-8 BOM 头或非法字符
步骤 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"
}
缺少 .dds 或接口不匹配 → 导致对象无法绑定驱动
步骤 4:检查 mds/service.json 是否更新
mds/service.json 是 devmon 的插件注册表。
必须操作:
git add mds/service.json
并在 components 数组中添加:
{
"name": "pcie_nic_card",
"path": "drivers/pcie_nic_card/mellanox"
}
否则即使文件存在,框架也不会主动扫描该目录。
步骤 5:确认 profile.txt 引用路径正确
在:
manifest/build/product/BMC/openUBMC/rootfs/include/profile.txt
加入行:
sr_files += "/opt/bmc/sr/14140130_15b31017_15b30160.sr"
文件名拼写、路径、大小写必须完全一致
步骤 6:检查 devmon 依赖版本兼容性
您提到使用的是 25.12 版本,而以下信息从上下文提取:
“尝试使用新版本1.1.36的component_drivers,但是服务器启动后devmon服务自动加载失败……报错 symbol lookup error”
此错误表明:
undefined symbol: _ZN2mc7runtime18condition_variable13remove_waiterEPNS1_10WaiterNodeE
→ devmon 与 mc::runtime 库版本不兼容,动态链接失败。
解决方案:
- 升级
devmon 到匹配版本(如 1.1.30 或以上)
- 或回退
component_drivers 至与当前 devmon 兼容版本(如 1.1.7)
建议统一 manifest.yml 中各组件版本,避免混合打包不同分支代码。
最佳实践与建议(来自社区经验)
| 建议项 |
说明 |
优先使用 component_drivers 仓 |
根据社区经验,PCIe 网卡适配应优先放在 component_drivers,而非 VPD 仓([参考 Document Chunk 1]) |
| 命名格式:BOM + 四元组 |
确保 .sr 文件名为 BOM_VID_DID_SVID_SSID.sr 或等效组合 |
| 使用设备树方案 |
社区推荐采用设备树方式实现动态加载([参考 Document Chunk 1]) |
| 先测试无 BOM 路径 |
加载逻辑为:先尝试带 BOM,失败再试无 BOM。可临时复制一份用于调试 |
| 避免空字段 |
.sr 中不要留空 Manufacturer 或 Model,可能导致解析失败 |
推荐修复流程
# 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. 若成功 → 逐步修改为您的真实配置内容(字段逐一添加)
总结:根本原因与对策
| 项目 |
结论 |
根本原因 |
.sr 文件格式或内容错误导致 devmon 启动失败 |
次要原因 |
devmon 与 component_drivers 版本不兼容 |
解决方案 |
1. 修正 .sr 内容;2. 更新 mds/service.json;3. 对齐组件版本 |
参考文档 |
openUBMC网卡配置指南, 南向网卡驱动适配指南 |
最终建议操作清单:
检查 hw_stream.log 查看 sr 加载错误详情
验证 .sr 文件语法、路径、字段完整性
确认 mds/service.json 已添加新驱动路径
检查 devmon 与 component_drivers 版本兼容性
使用已知成功的 .sr 文件做对照测试
完成以上步骤后,网卡应能在 Web 界面正常识别。
如仍存在问题,建议上传 .sr 文件内容与日志片段做进一步分析。