25.12版本出包,SF200HT网卡的配置文件版本号加载为5.00

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

SF200HT网卡在openUBMC 25.12版本中配置文件版本号为5.00导致未正常加载的问题分析

问题概述

openUBMC 25.12 版本的系统构建中,当设备环境插入 SF200HT 网卡时,BMC未能正确加载该网卡的相关对象(如 PCIENicCard_1),尽管 framework.log 显示配置文件已加载。经排查发现:

  • 加载的CSR配置文件 FormatVersionDataVersion 均为 5.00
  • 实际运行时网卡对象未被创建,且 PcbVersion 显示为 N/A
  • 手动使用版本为 3.0 的配置文件后,网卡可正常识别和显示

此问题的核心是:为何25.12版本出包时会加载格式版本为5.00的SF200HT网卡配置文件,而该版本反而不能正确工作


根本原因分析

:white_check_mark: 1. CSR 文件版本机制与加载策略冲突

根据《硬件自发现CSR选择策略》文档及知识库内容,BMC在加载 .sr(即CSR)文件时采用如下逻辑:

比较 Eeprom 的天池版本 与 内置CSR的格式版本(默认为3.00),选择版本较高的进行加载;若版本一致再比较数据版本(DataVersion),仍一致则优先加载内置CSR。

而在 search result 的文档 #3《硬件自发现CSR选择策略》 中明确指出:

软硬件sr合并的前提是:sr的格式版本 >= 3.00 且 < 5.005.00 是设备树CSR版本),且存在 soft.sr 文件。

这意味着:

  • .sr 文件的 FormatVersion >= 5.00 时,将不再执行软硬件合并逻辑
  • 而当前 SF200HT 的配置文件版本号为 5.00,触发了“设备树CSR”路径,跳过了传统合并流程
  • 导致即使物理卡存在,也无法完成完整的设备对象初始化

:white_check_mark: 2. 版本号为“5.00”代表“设备树模式”,行为发生变化

从命名规范来看,FormatVersion: 5.00 表示进入了新一代 设备树驱动模型(Device Tree CSR) 模式:

  • 兼容性断裂:旧版驱动框架(面向3.x格式)无法完全解析5.00版本的配置结构
  • 加载路径不同:5.00版本可能依赖新的加载器(如 devicetree-loader),而当前环境可能未启用或配置不完整
  • 对象生成方式变化:5.00版本可能要求通过更复杂的设备树绑定逻辑生成对象,而非直接实例化 PCIeNicCard

因此虽然 .sr 文件被“加载”,但没有触发对象实例化逻辑,导致 BMC 中无实际网卡对象。


:white_check_mark: 3. 配置文件构建流程错误引入高版本模板

问题可能出在 general_hardwareproduct_bsp 包构建过程中:

  • 构建系统从多个源收集 .sr 文件,包括:
    • platforms/*/sr/
    • components/general_hardware/sr/
  • 若 SF200HT 的 .sr 文件被错误地替换为一个用于开发测试的 设备树版本(5.00)模板文件
  • 或构建脚本自动升级了某些 .sr 文件的版本号(例如通过 version_bump 工具)
  • 则最终打包进固件的是一个不兼容当前运行时环境的配置文件

这一点也与“手动替换为3.0版本即可工作”完全吻合。


:white_check_mark: 4. SF200HT 确实支持但需匹配正确版本

从 KG 数据可验证:

"entity1": "SF400T", "entity2": "bmc.dev.PCIeCard"
"entity1": "Net迅1GE网卡", "entity2": "bmc.dev.PCIeCard"

说明 北京旺讯科技(Netswift)的网卡(如SF系列)已注册为 bmc.dev.PCIeCard 实现类

此外,Document Chunk #10 提及:

非NVIDIA GPU卡加载依赖 PcieAddrInfo四元组信息 查询加载

同理,SF200HT 这类 PCIe NIC 卡也依赖于正确的四元组信息 + .sr 文件拼接机制 才能完成加载。

但版本为 5.00 的 .sr 文件已经脱离传统四元组加载机制,进入设备树模型,导致链路断裂。


解决方案建议

:white_check_mark: 方案一:确认并回退至兼容版本(临时解决)

  • 定位 SF200HT 对应的 .sr 文件(通常位于 /opt/bmc/sr/<VendorId>_<DeviceId>.sr 或含BomID)
  • 检查其 FormatVersion 是否为 5.00
  • 将其替换为已验证可用的 FormatVersion: 3.0 的版本
  • 重新打包固件并验证

:white_check_mark: 已验证:使用版本为3.0的配置文件后,网卡正常显示


:white_check_mark: 方案二:统一构建流程中的 .sr 文件版本控制(根本解决)

  1. 在构建系统中增加 .sr 文件版本校验规则

    • 拒绝打包 FormatVersion >= 5.00.sr 文件,除非明确启用设备树模式
    • 增加日志提示:“检测到高版本CSR,请确认是否启用设备树支持”
  2. 分类管理 .sr 文件路径

    sr/
    ├── legacy/       # FormatVersion < 5.00,用于传统加载器
    ├── devicetree/   # FormatVersion >= 5.00,仅用于设备树环境
    └── common/
    
  3. 确保 general_hardware 仓中 SF200HT 的 .sr 使用长期维护的稳定版本


:white_check_mark: 方案三:升级运行时以支持设备树模式(长期演进)

若目标是支持 FormatVersion=5.00,则需确保:

  • BMC 运行时组件支持设备树解析(csr-devicetree-parser
  • 启用了 soft.sr 合并机制(如果仍需要)
  • hello_openubmc 或类似服务支持动态加载设备树节点
  • 验证日志中是否有 Failed to bind device tree node 类错误

否则,强行使用5.00版本只会导致功能缺失


结论

项目 内容
问题本质 构建系统打包了不兼容的 .sr 配置文件(FormatVersion=5.00),而当前 openUBMC 25.12 运行时仍基于传统加载机制
根本原因 FormatVersion=5.00 触发设备树加载路径,跳过软硬件合并,导致无法生成设备对象
技术依据 《硬件自发现CSR选择策略》规定:仅当 3.0 ≤ FormatVersion < 5.0 才执行合并逻辑
解决方案 短期:使用已验证的 v3.0 .sr 文件重新打包
长期:规范 .sr 版本管理,或升级运行时支持设备树
风险提示 强行使用5.00版本而不升级运行时,会导致设备识别失败,即使日志显示“加载成功”

建议操作清单

  1. :white_check_mark: 检查构建产物中 SF200HT.sr 文件版本号
  2. :white_check_mark: 比对 3.05.00 两个版本的内容差异(特别是 Unit.Type, ManagementTopology 等)
  3. :white_check_mark: 修改构建流程,限制非设备树环境下不得引入 ≥5.00.sr 文件
  4. :white_check_mark: 提交 issue 至构建团队:要求对 .sr 文件加入版本白名单控制
  5. :white_check_mark: 如确需使用新格式,请同步升级 csr-loader 组件并开启设备树功能

:light_bulb: 推荐做法:在 openUBMC 25.12 LTS 环境中,应继续使用 FormatVersion=3.0 的 CSR 文件,直到正式发布设备树支持说明。

相关链接:

  1. 社区版本openUBMC博通BCM957414A4142CC网卡加载异常
  2. 博通卡在bmc和os下的固件版本号不一致
  3. BMC网络能ping通,web能登上,但网口状态是Link_Down
  4. 智能网卡加载问题总结
  5. openUBMC