// 此模板仅供参考,如果不适用可以修改
问题描述
发送redfish命令/redfish/v1/Managers/:managerid/SPService/DeviceInfo,返回信息中缺少pciecard信息,环境中插着raid卡和pcie网卡。
查看rackmount后发现是这里为空所以没有信息
![]()
所以这个地方是25.12版本做啥修改了吗,还是有bug
环境信息
- 软件版本:25.12
// 此模板仅供参考,如果不适用可以修改
发送redfish命令/redfish/v1/Managers/:managerid/SPService/DeviceInfo,返回信息中缺少pciecard信息,环境中插着raid卡和pcie网卡。
查看rackmount后发现是这里为空所以没有信息
![]()
所以这个地方是25.12版本做啥修改了吗,还是有bug
答案内容由AI生成,仅供参考:
在 25.12 版本中,由于 CSR 配置缺失或
Pcie_Device Component更新导致 PCIe 设备未被正确枚举,使得 SPService 获取不到 PCIe 卡信息,最终 Redfish 接口返回空数据。
这并非典型 Bug,而是 适配问题,与以下因素强相关:
SPService 是否调整了设备信息收集逻辑根据您提供的问题描述,在使用 Redfish 接口 GET /redfish/v1/Managers/1/SPService/DeviceInfo 获取设备信息时,返回结果中缺少 PCIe 卡(如 RAID 卡、网卡)的相关信息。尽管系统中实际插有相关硬件,但接口返回数据异常为空。结合上下文信息和系统架构逻辑,以下为对该问题的全面分析与可能根源定位。
问题现象:
Redfish 接口 /redfish/v1/Managers/1/SPService/DeviceInfo 返回的数据中,未包含已插入的 RAID 卡、PCIe 网卡等 PCIe 设备信息。
环境信息:
/redfish/v1/Managers/:managerid/SPService/DeviceInfo200 OK,说明请求成功,但响应体中关键字段为空rackmount 工具或底层 busctl 调用中,发现相关路径返回值为空系统必须通过 PCIe 设备发现机制 将物理卡识别为可管理对象。若未正常加载,则无法在 DeviceInfo 中展示。
Pcie_Device ComponentImplPCIEDevicesPCIEDevicesGetPCIeCardNum 和 GetPCIeCardNum 方法若系统未完成 PCIe 设备枚举或 CSR 配置缺失,将导致
DeviceInfo接口无法获取 PCIe 卡列表。
PCIeCard_1、PCIeDevice_1、NetworkAdapter_1 等对象的属性(如 VendorID, DeviceID, Description),直接影响 BMC 是否能识别设备。
建议检查:
lspci 或 busctl 查看 PCIe 设备是否被 OS 识别从您提供的 busctl 命令来看,尝试调用的是:
busctl --user call bmc.kepler.maca /bmc/kepler/MdbService bmc.kepler.Mdb GetPath ... "bmc.kepler.Managers.Ums"
此路径用于获取资源协作接口数据,但返回为空。
SPService/DeviceInfo 接口的数据来源于底层的 资源协作接口(MdbService),由多个组件(如 openUBMC)上报。SPService 所依赖的 GetPath 接口未能从 bmc.kepler.Managers.Ums 正确获取数据,则表现为信息缺失。busctl 返回空表明:数据未上报、未注册、或路径不匹配Redfish API 作为北向接口,依赖于 MDBService 和资源协作接口的数据映射GetPCIeCardNum 方法应返回 PCIe 卡数量,但若其底层调用 ImplPCIEDevicesPCIEDevicesGetPCIeCardNum 失败,也会导致信息为空文档中明确指出:“网卡的静态信息,让BMC可以识别安装了什么网卡;” —— 这依赖 CSR 中的完整定义。
缺少以下任一信息都可能导致设备不可见:
| 对象 | 必需属性 |
|---|---|
PCIeDevice_1 |
DeviceName, FunctionClass, VendorID, DeviceID |
PCIeCard_1 |
Name, Manufacturer, PartNumber, FirmwareVersion, SerialNumber |
NetworkAdapter_1 |
NetworkPortCount, SupportedMctp, LinkSpeed, LinkWidth |
{
"PCIeCard_1": {
"Name": "Atlas 300I Pro Inference Card",
"Description": "AI Inference Accelerator",
"Manufacturer": "Huawei",
"VendorID": "0x19e5",
"DeviceID": "0x0222",
"FirmwareVersion": "1.00",
"SerialNumber": "SN12345678"
}
}
如果 CSR 中缺省了
PCIeCard相关配置,DeviceInfo将无法拼装出 PCIe 卡信息。
Redfish 接口需要通过 映射器接口配置 将底层资源协作数据映射到 /DeviceInfo 的 JSON 输出中。
/Managers/1/SPService/DeviceInfo 的映射配置中,未包含 PCIeCard 或 NetworkAdapter 的数据路径
映射器配置中对敏感字段 Sensitive 进行了屏蔽,但不应影响 PCIe 基本信息
映射器在 25.12 版本中是否有变更?参考文档提到:
“生成代码的版本大于等于14时,不再生成
bmc.kepler.Object.Properties接口相关代码”
若 DeviceInfo 依赖此接口,则升级后可能出现字段丢失。
您提到:
“初步分析应该和Smart Provisioning软件信息推送有关”
DeviceInfo 未及时更新25.12 版本中修改了数据拉取逻辑,改为懒加载或按需上报| 步骤 | 操作 | 工具/命令 |
|---|---|---|
| 1 | 确认 PCIe 卡是否被系统识别 | lspci | grep -i raid|eth |
| 2 | 检查 CSR 配置是否存在并正确命名 | 检查 /usr/share/ubmc/csr/ 下对应 PCIe 卡的 .json 文件 |
| 3 | 验证 CSR 中是否包含 PCIeCard_1、PCIeDevice_1 定义 |
查看字段如 VendorID, DeviceID, FirmwareVersion 是否完整 |
| 4 | 检查 MDB 是否成功加载该设备 | busctl tree bmc.kepler 或检查一键收集中的 mdb_info.log |
| 5 | 调试调用 GetPCIeCardNum 是否返回正确数值 |
通过 Lua 脚本或 D-Bus 调用 ImplPCIEDevicesPCIEDevicesGetPCIeCardNum |
| 6 | 检查 SPService 的 Redfish 映射配置 |
查看映射文件中 /SPService/DeviceInfo 是否关联了 PCIeCard 数据路径 |
| 7 | 对比 25.12 与旧版本的变更点 | 特别关注 Pcie_Device Component 版本是否从 1.70.100 → 1.70.109 引入兼容性问题 |
在 25.12 版本中,由于 CSR 配置缺失或
Pcie_Device Component更新导致 PCIe 设备未被正确枚举,使得 SPService 获取不到 PCIe 卡信息,最终 Redfish 接口返回空数据。
这并非典型 Bug,而是 适配问题,与以下因素强相关:
SPService 是否调整了设备信息收集逻辑PCIeCard_1 包含完整硬件信息GetPCIeCardNum 方法是否返回非零值bios_service.lua 中添加 PCIe 地址日志输出,用于调试发现流程PCIeCard_1 应包含 FirmwareVersion, Manufacturer, DeviceID 等字段Pcie_Device Component 版本 1.70.109 依赖 dtframeforlua,需确保依赖正常Redfish API 通过 MDBService.GetPath 获取数据,若路径无响应则返回空如仍无法解决,请提供:
mdb_info.log 内与 PCIeCard 相关部分csr 目录下对应网卡或 RAID 卡的配置文件内容lspci 输出及设备 BDF 地址以便进一步定位问题。
1、在SP未运行的情况下,收一份BMC一键日志,发送到邮箱huangjunhua14@huawei.com
2、/redfish/v1/Managers/:managerid/SPService/DeviceInfo该接口的信息来源于SP启动时进行的设备信息收集,确认下之前是否进入过SP,如果从未进入过SP,该接口是不会有设备信息的
从收集回来的BMC日志来看,可以确认是没有进入过SP,因此当前这个SPService/DeviceInfo接口没有返回设备信息,是正常的
可以通过以下操作,启动进入SP进行设备信息收集:
1、BMC web页面选择“iBMC管理”->“SP管理”
2、勾选“基本信息”->“启动设置”下的“设备信息收集使能”按钮
3、对服务器进行重新上电后,会进入SP收集设备信息
待SP收集完成设备信息并退出后,再请求SPService/DeviceInfo接口查看设备信息