openUBMC 630版本 PCIe网卡相关疑问

// 此模板仅供参考,如果不适用可以修改

问题描述

在openUBMC 26 0630 版本上开发DDR4 X20机型。在验证时发现SP681网卡接入到Riser后,web页面的PCIe卡不会展示相应的PCIe信息。从BMC日志上看,这张开被正常加载了,对应的sr文件也找到了,BMC通过PMU也能找到对应的四元组ID,但是web页面的PCIe卡不显示。后续对比NPU卡的sr文件,发现网卡类型的PCIe设备没有PCIeCard对象,且FormatVersion与DataVersion均为5.00版本,随即使用一张沐创网卡进行验证,发现现象一样。对应的Connector现象如下

Connector_PCIE_SLOT3_01010101:
.AuxId                 : "19e50051"
.Bom                   : "14140130"
.Buses                 : ["I2cMux_Pca9545_PCA9545_3_01010101"]
.ChassisId             : ""
.GroupId               : 58
.GroupPosition         : "0101010103"
.Id                    : "19e50222"
.IdentifyMode          : 2
.LoadStatus            : 0
.ManagerId             : "1"
.Presence              : 1
.SilkText              : "RiserCard1"
.Slot                  : 3
.SystemId              : 1
.Type                  : "PCIe"
-SourcePath            : /opt/bmc/sr/14140130_19e50222_19e50051.sr
-SoftSourcePath        : NA
-DataSource            : LOCAL
-EffectiveFormatVersion: 5.00
-EffectiveDataVersion  : 5.00
-EepromFormatVersion   : NA
-EepromDataVersion     : NA
-LocalFormatVersion    : 5.00
-LocalDataVersion      : 5.00

app.log中也能找到PMU加载现象

pcie_device NOTICE: device_loader.lua(195): [BizTopoLoader] Get id from PMU, vid:6629, did:546, sub_vid:6629, sub_did:81

日志导出后,发现sr文件Unit为 "Type": "PCIeNicCard", "Name": "PCIeNicCard_1", "Compatible": [ "hisi_1822", "hisi_182x" ]与常规的{"Type":"PCIeCard","Name":"PCIeCard_1"}不一样,不确定是不是因为整个原有导致的。我们自己配置的vpd仓库中是正常的{“Type”:“PCIeCard”,“Name”:“PCIeCard_1”}`。请问一下这个问题要如何处理?

环境信息

  • 软件版本:[OpenUBMC2606]

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

解决方案

1. 修正 SR 文件类型

将 SR 文件中 Unit 的 Type 修改为 "PCIeCard",并调整 Name 为 "PCIeCard_1"(或自定义但符合规范)。参考示例:

{
  "Unit": {
    "Type": "PCIeCard",
    "Name": "PCIeCard_1"
  }
}

2. 补充 PCIeCard 对象

在 SR 文件的 Objects 中添加 PCIeCard_1 对象,并配置必要属性。可参考知识库中 E810 网卡适配的 SR 文件(topic 2471),至少包含:

  • SlotID、NodeID
  • Name、Model、VendorID、DeviceID、SubVendorID、SubDeviceID
  • Position、LaneOwner 等
  • 健康状态关联(如 Health 指向 Component_PCIeCard.Health)

例如:

"PCIeCard_1": {
  "SlotID": "<=/PCIeDevice_1.SlotID",
  "NodeID": "<=/PCIeDevice_1.SlotID |> string.format('PCIeCard%s', $1)",
  "Name": "E810-XXVDA2",
  "VendorID": "0x8086",
  "DeviceID": "0x159b",
  "SubVendorID": "0x8086",
  "SubDeviceID": "0x0003",
  ...
}

3. 确认 Connector 配置

您提供的 Connector 配置基本正确(IdentifyMode=2、Presence=1),但请确保 SourcePath 指向的 SR 文件是修正后的版本。同时检查 EffectiveFormatVersion 与 LocalFormatVersion 是否一致(当前均为 5.00,应保持同步)。

4. 重新构建并升级 BMC

  • 将修改后的 SR 文件集成到 VPD 或南向驱动组件中(根据文件来源决定)。
  • 重新构建 openUBMC 镜像(可使用 bingo build 命令)。
  • 升级固件后,重启 BMC,检查 Web 页面是否显示 PCIe 卡信息。

5. 额外的排查建议

  • 查看 BMC 资源树中是否存在 PCIeCard_* 对象。若无,则确认 SR 文件是否被正确加载(例如在 framework.log 中搜索 get csr data from xxx.sr)。
  • 对比您本地 VPD 仓库中正常的 "Type": "PCIeCard" 文件,确保实际加载的 SR 文件来自于该正常定义,而非南向驱动部件的非标准文件。若来源不一致,需统一规范。
点击此处查看详细分析解答

根据您提供的信息,您遇到的问题是在 openUBMC 26.06(您提到的“630 版本”)上,SP681 网卡接入 Riser 后,虽然 BMC 已成功加载该卡并找到了对应的 SR 文件,但 Web 页面的“PCIe 卡”列表中没有显示该设备。您对比 NPU 卡的 SR 文件后,发现网卡类型的 SR 文件中 Unit 的 Type 为 "PCIeNicCard",而常规配置为 "PCIeCard",且缺少 PCIeCard 对象。

结合知识库中的相关描述,此问题的核心原因很可能在于 SR 文件的设备类型定义与 Web 展示机制不匹配。以下是分析和处理建议。


问题原因分析

  • Web 展示依赖 PCIeCard 对象:在 openUBMC 中,Web 界面的“系统信息 → 其他 → PCIe 卡”列表通过 PCIeCard 对象来展示信息。该对象由 SR(CSR)文件定义,并用于关联 PCIe 设备的位置、属性等。
  • SR 文件类型错误:您日志中导出的 SR 文件 Unit 定义为 "Type": "PCIeNicCard",而 PCIe 卡的标准定义为 "Type": "PCIeCard"。若使用 PCIeNicCard 类型,系统可能不会创建对应的 PCIeCard 对象,导致 Web 无法显示。
  • 对象缺失:对比 NPU 卡(正常显示)的 SR 文件,网卡类型缺少 PCIeCard_1 对象,使得 Web 没有数据源可展示。

解决方案

1. 修正 SR 文件类型

将 SR 文件中 Unit 的 Type 修改为 "PCIeCard",并调整 Name 为 "PCIeCard_1"(或自定义但符合规范)。参考示例:

{
  "Unit": {
    "Type": "PCIeCard",
    "Name": "PCIeCard_1"
  }
}

2. 补充 PCIeCard 对象

在 SR 文件的 Objects 中添加 PCIeCard_1 对象,并配置必要属性。可参考知识库中 E810 网卡适配的 SR 文件(topic 2471),至少包含:

  • SlotID、NodeID
  • Name、Model、VendorID、DeviceID、SubVendorID、SubDeviceID
  • Position、LaneOwner 等
  • 健康状态关联(如 Health 指向 Component_PCIeCard.Health)

例如:

"PCIeCard_1": {
  "SlotID": "<=/PCIeDevice_1.SlotID",
  "NodeID": "<=/PCIeDevice_1.SlotID |> string.format('PCIeCard%s', $1)",
  "Name": "E810-XXVDA2",
  "VendorID": "0x8086",
  "DeviceID": "0x159b",
  "SubVendorID": "0x8086",
  "SubDeviceID": "0x0003",
  ...
}

3. 确认 Connector 配置

您提供的 Connector 配置基本正确(IdentifyMode=2、Presence=1),但请确保 SourcePath 指向的 SR 文件是修正后的版本。同时检查 EffectiveFormatVersion 与 LocalFormatVersion 是否一致(当前均为 5.00,应保持同步)。

4. 重新构建并升级 BMC

  • 将修改后的 SR 文件集成到 VPD 或南向驱动组件中(根据文件来源决定)。
  • 重新构建 openUBMC 镜像(可使用 bingo build 命令)。
  • 升级固件后,重启 BMC,检查 Web 页面是否显示 PCIe 卡信息。

5. 额外的排查建议

  • 查看 BMC 资源树中是否存在 PCIeCard_* 对象。若无,则确认 SR 文件是否被正确加载(例如在 framework.log 中搜索 get csr data from xxx.sr)。
  • 对比您本地 VPD 仓库中正常的 "Type": "PCIeCard" 文件,确保实际加载的 SR 文件来自于该正常定义,而非南向驱动部件的非标准文件。若来源不一致,需统一规范。

说明

知识库明确指出:openUBMC 系统设计上要求所有 PCIe 设备必须通过 SR 文件明确定义,才能被识别和管理。因此,SR 文件是 PCIe 卡展示的唯一入口。您遇到的问题并非 BMC 配置错误,而是 SR 文件中的类型定义与对象缺失导致 Web 侧无法生成展示条目。

请按上述步骤修正 SR 文件,并重新部署,即可解决该问题。如果仍有异常,建议进一步检查南向驱动与 VPD 组件的加载通道(两者独立),确认最终生效的 SR 文件来源。

现在的问题是,我们在vpd仓库中的sr文件,不知道在能够步骤被替换成这种PCIeNicCard类型了。不是一两个sr被替换了,从设备下载sr发现只有少数没有替换,启用都PCIe卡脚本都变成PCIeNicCard类型。

目前通过在conan仓库中搜索相应文件,发现是 component_drivers组件中的网卡sr文件替换了vpd仓库中的sr文件,导致Connector加载后无法正确失败PCIeCard。这个问题要在吗解决?删除component_drivers组件下的sr文件吗?

问题已经解决。630版本的manifest中缺少devmon.service文件,导致devmon、component_drivers相关组件编译了但是没有实际使用。当前添加了devmon.service,运行devmon服务后正常。另外一种方案是直接在manifest.yml中删除devmon、component_drivers组件。

已解决问题可以将您自己的方案标记为解决方案,供社区其他用户参考