pcie卡partnumber信息获取方案咨询

问题描述

适配沐创网卡过程中,与厂商确认到每个网卡型号的partnumber不固定,与实际生产工厂有关,因此需要通过oem_smbus获取。目前看到该网卡无Fru信息,也不会在VPD信息中存PN
但是目前发现2512LTS分支上NetworkAdapter对象的PartNumber属性变更后不广播通知,PCIeCard对象的partnumber无法通过在csr里关联进行刷新。

诉求

1、不在组件执行build gen的情况下,如引入新的interface、新建类方法等,是否还有其他方法可以将pcie卡partnumber刷新成通过oem_smbus获取到的值。
2、若1无法满足,能否将NetworkAdapter对象的PartNumber属性修改为变更后广播,我理解这样修改最简单。
3、是否可以考虑将pciecard信息中的partnumber留空,可以通过网络适配器读到partnumber

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

结论

诉求2(修改 NetworkAdapter.PartNumber 为变更后广播)是目前最直接、最可靠的解决方案,符合知识库中属性变化通知的设计规范,且改动范围小、风险可控。诉求1在现有框架下难以满足实时同步需求。

如果您需要更详细的接口修改示例或 CSR 配置片段,可进一步提供具体版本信息以便补充。

点击此处查看详细分析解答

根据您提供的问题描述和知识库中的信息,我为您整理以下分析及建议方案。


问题背景

  • 沐创网卡的 PartNumber 不固定,需通过 oem_smbus 协议获取。
  • 当前系统上,NetworkAdapter 对象的 PartNumber 属性在变更后 不广播通知,导致 PCIeCard 对象的 PartNumber 无法通过 CSR 中的同步语法刷新。
  • 知识库中明确提到:CSR1.0 要求 Component_PCIeCardPartNumber 须同步 PCIeCard 下的 PartNumber(见文档 [8])。但 PCIeCardPartNumber 又依赖于 NetworkAdapter.PartNumber 的同步或直接赋值。由于源属性不广播,同步链路中断。

诉求分析与方案

诉求1:不引入新 Interface / 类方法,能否刷新 PartNumber?

可能性评估

方法 可行性 说明
在 CSR 中使用 同步语法 不可行 同步语法(如 <=/NetworkAdapter_1.PartNumber)依赖被引用属性的 变化通知(广播)来触发更新。当前 NetworkAdapter.PartNumber 不广播,因此 PCIeCard.PartNumber 无法实时感知变更,仅能在启动或手动刷新时同步一次。
通过 定时轮询(如 devmon 定时刷新) 不推荐 需要额外组件开发,且刷新延迟不可控,不符合实时性要求。
在 CSR 中配置 固定值 不可行 PartNumber 动态变化,无法固定。
通过 其他已广播的属性间接触发 复杂度高 例如利用 NetworkAdapter.ModelFirmwareVersion 的广播事件,在事件处理脚本中手动写入 PCIeCard.PartNumber,但这涉及新增脚本逻辑,属于“引入新处理机制”,不符合“不引入新组件”要求。

结论:在不改动接口(新增 interface、方法或变更属性广播)的前提下,无法可靠地实现 PartNumber 的实时刷新


诉求2:将 NetworkAdapter 对象的 PartNumber 属性修改为变更后广播

可行性分析

  • 根据知识库中 网卡驱动规范 v0.1(文档 [5])及 资源协作接口变更声明 示例,属性支持 变化通知 字段,可设置 true 表示广播通知。
  • 当前 NetworkAdapter.PartNumber 的类型为 String,只读,未配置变化通知(即 变化通知 = false)。将其改为 true 是最小改动,不涉及新增接口或类方法,仅修改属性定义。
  • 修改后,NetworkAdapter.PartNumber 一旦通过 oem_smbus 更新,将触发广播,此时 CSR 中的同步语法(如 <=/NetworkAdapter_1.PartNumber)即可正常刷新 PCIeCard.PartNumber(进而影响 Component_PCIeCard.PartNumber)。

影响评估

  • 仅影响 bmc.kepler.Systems.NetworkAdapter 接口,不改变其他属性行为。
  • 需同步更新 bmc.dev.PCIeCardbmc.dev.NetworkAdapter 中同一属性的广播设置,保持一致性(参考知识库:bmc.dev 路径更准确,且与 bmc.kepler 需同步)。
  • 不会影响现有 Redfish 或 Web 页面回显,因为 PartNumber 本就是只读属性。

推荐方案:采用此修改,简单且能解决根本问题。


实施建议

  1. 修改接口定义:在 bmc.kepler.Systems.NetworkAdapter 的 PartNumber 属性中增加 变化通知 = true
  2. 同步修改底层接口:检查 bmc.dev.NetworkAdapterbmc.dev.PCIeCard 的 PartNumber 是否已有广播,若没有,一并修改。
  3. 验证:使用 devmonbusctl 监听 NetworkAdapterPropertiesChanged 信号,确认 PartNumber 变更时信号发出;再检查 PCIeCard 的 PartNumber 是否自动更新。
  4. CSR 配置确认:确保 PCIeCard_1(或对应 PCIeCard 对象)的 PartNumber 同步语法正确指向 NetworkAdapter_1.PartNumber

结论

诉求2(修改 NetworkAdapter.PartNumber 为变更后广播)是目前最直接、最可靠的解决方案,符合知识库中属性变化通知的设计规范,且改动范围小、风险可控。诉求1在现有框架下难以满足实时同步需求。

如果您需要更详细的接口修改示例或 CSR 配置片段,可进一步提供具体版本信息以便补充。

PCIe卡更新PN/SN顺序参考 【已评审】网卡partnumber、serialnumber更新优先级顺序 - Hardware SIG / Hardware评审 - openUBMC 论坛

如需自己定制,在pcie_device仓库中搜索set_sn_pn,如果属性变化有通知,可以注册监听,如果没有通知,可以自行使用一个循环轮询读取。

1 个赞