qemu没有看到pcie card信息

问题描述

在ubuntu24.04本地拉起qemu仿真之后,ipmcget -d v 没有看到pcie card的信息;我应该修改那些文件配置,怎样检查,能让qemu加pcie网卡,以便后续我新增自有网卡BMC驱动之后,能做调试。

环境信息

  • 操作系统: Ubuntu 24.04

  • 软件版本:OpenUBMC2603

重现步骤

1.python3 init.py -path ./bmc_sdk.zip -user XXX -psw XXX
2.bingo build -b openUBMC -bt debug -ucc
3.bingo build -sc qemu
4.python3 build/works/packet/qemu_shells/vemake_1711.py
5.ssh Administrator@localhost -p 10022
6.ipmcget -d v

期望结果

实际结果

~ ~ $ ipmcget -d v
------------------- openUBMC INFO -------------------
IPMC CPU: userdata: NULL
IPMI Version: 2.0
Active openUBMC Version: 26.03.00.01
Active openUBMC Build: 01
Active openUBMC Built: 15:40:52 May 13 2026
Backup openUBMC Version: 26.03.00.01
Available openUBMC Version: 5.00.00.00
Available openUBMC Build: 001
Active Uboot Version: - (-)
Backup Uboot Version: - (-)
Active Secure Bootloader Version: - (-)
Backup Secure Bootloader Version: - (-)
Active Secure Firmware Version: - (-)
Backup Secure Firmware Version: - (-)
Active BMCSDK Version: 5.13.00.01
----------------- Product INFO -----------------
Product ID: 0x0000
Product Name: S920X20
Product Unique ID: 0x00000001030ABF00
Active BIOS Version: (U75)000
Backup BIOS Version: 000
PSR Version: 1.15
--------------- Riser Card INFO ----------------
Riser2 BoardName: BC83PRUO
Riser2 BoardID: 0xffff
Riser2 CUID: 00000001040302044498
Riser2 PCB: .C
Riser2 CSR: 1.04
Riser3 BoardName: BC83PRUX
Riser3 BoardID: 0xffff
Riser3 CUID: 00000001040302044504
Riser3 PCB: .C
Riser3 CSR: 1.04
Riser3 MCU: 1.37.05
-------------- HDD Backplane INFO --------------
DiskBP1 BoardName: BC83HBBA
DiskBP1 BoardID: 0xffff
DiskBP1 CUID: 00000001030302023925
DiskBP1 PCB: .B
DiskBP1 CPLD Version: (U11)0.13
DiskBP1 CSR: 2.36
DiskBP5 BoardName: BC83NHBF
DiskBP5 BoardID: 0xffff
DiskBP5 CUID: 00000001030302024340
DiskBP5 PCB: .B
DiskBP5 CPLD Version: (U1)0.13
DiskBP5 CSR: 2.36
---------------- CPU Board INFO ----------------
CpuBoard1 BoardName: BC83AMDA
CpuBoard1 BoardID: 0xffff
CpuBoard1 CUID: 00000001020302031825
CpuBoard1 PCB: .A
CpuBoard1 CPLD Version: (U6288)1.09
CpuBoard1 CSR: 1.25
CpuBoard1 MCU: 0.00.00
---------------- EXP Board INFO ----------------
ExpBoard1 BoardName: BC83SMMBC
ExpBoard1 BoardID: 0xffff
ExpBoard1 CUID: 00000001010302044492
ExpBoard1 PCB: .B
ExpBoard1 CPLD Version: (U5)1.09
ExpBoard1 CSR: 1.12
---------------- FAN Board INFO ----------------
FanBoard1 BoardName: BC83FDCA
FanBoard1 BoardID: 0xffff
FanBoard1 CUID: 00000001050302023924
FanBoard1 PCB: .A
FanBoard1 CPLD Version: (U1)0.12
FanBoard1 CSR: 2.36
FanBoard1 MCU: 0.00.00
------------------- PSU INFO -------------------
PSU1 Version:
PSU2 Version:

其他信息

root@bzwx-MS-7C82:/home/workspace/manifest/output/data/mockdata/pciecard# ll
-rw-r–r-- 1 root root 816 5月 13 15:52 0x00_0x0000_mctp.bin
-rw-r–r-- 1 root root 9520 5月 13 15:47 0x02_0x9700_mctp_BF2.bin
-rw-r–r-- 1 root root 14688 5月 13 15:47 0x02_0x9700_mctp_BF3.bin
-rw-r–r-- 1 root root 6528 5月 13 15:47 0x02_0x9700_mctp.bin
-rw-r–r-- 1 root root 9248 5月 13 15:47 0x02_0x9700_mctp_E810CQDA2G2P5.bin
-rw-r–r-- 1 root root 9248 5月 13 15:47 0x02_0x9700_mctp_E810XXVDA2G1P5.bin
-rw-r–r-- 1 root root 8432 5月 13 15:47 0x02_0x9700_mctp_HP380.bin
-rw-r–r-- 1 root root 8432 5月 13 15:47 0x02_0x9700_mctp_HP382.bin
-rw-r–r-- 1 root root 8432 5月 13 15:47 0x02_0x9700_mctp_MCX631102AN-ADAT.bin
-rw-r–r-- 1 root root 10336 5月 13 15:47 0x02_0x9700_mctp_MCX75310AAS-HEAT.bin
-rw-r–r-- 1 root root 8432 5月 13 15:47 0x02_0x9700_mctp_MCX755106AS-HEAT.bin
-rw-r–r-- 1 root root 6528 5月 13 15:47 0x02_0x9700_mctp_SP625D.bin
-rw-r–r-- 1 root root 6528 5月 13 15:47 0x02_0x9700_mctp_SP670.bin
-rw-r–r-- 1 root root 17136 5月 13 15:47 0x7e_0x9600_mctp.bin
-rw-r–r-- 1 root root 17136 5月 13 15:47 0x7e_0x9600_mctp_SP686CM16I2G.bin
-rw-r–r-- 1 root root 17136 5月 13 15:47 0x7e_0x9600_mctp_SP686CM40I2G.bin
-rw-r–r-- 1 root root 17136 5月 13 15:47 0x7e_0x9600_mctp_SP686CM40I4G.bin
-rw-r–r-- 1 root root 17136 5月 13 15:47 0x7e_0x9600_mctp_SP686CMH32I4G.bin

~ ~ $ cat /proc/bus/pci/devices
~ ~ $
~ ~ $ cat /mockdata/IMU/pcie_card.json
{
“description”: “key由id_auxid_slot组成,后面是devbus devdevice devfunction bus device function presense”,
“9005028f_90050801_1”: [“20”, “00”, “00”, “18”, “00”, “00”, “1”],
“19e50222_19e50052_2”: [“95”, “00”, “00”, “91”, “00”, “00”, “0”],
“19e50222_19e50052_3”: [“96”, “00”, “00”, “93”, “00”, “00”, “0”],
“19e50222_19e50052_4”: [“97”, “00”, “00”, “95”, “04”, “00”, “1”]
}
~ ~ $ ls /sys/bus/pci/devices/
~ ~ $

答案内容由AI生成,仅供参考:
:white_check_mark: 总结:实现PCIe卡加载的关键步骤

  1. :white_check_mark: 确保 pcie_card.json 中目标卡 presence=1
  2. :white_check_mark: 确保 .sr / .bin 仿真文件已存在且命名正确
  3. :white_check_mark: 重启QEMU使配置生效
  4. :white_check_mark: 使用 cat /proc/bus/pci/devices 验证内核层枚举
  5. :white_check_mark: 使用 ipmcget -d v 验证BMC层识别
  6. :white_check_mark: 成功后即可开始调试自有网卡BMC驱动
点击此处查看详细分析解答

QEMU中PCIe卡信息缺失问题分析与解决指南

根据您提供的问题描述和系统信息,您在Ubuntu 24.04环境下成功部署了OpenUBMC 26.03的QEMU仿真环境,但发现ipmcget -d v命令无法显示PCIe卡信息。以下基于所提供的知识库内容进行详细分析并提供解决方案。


:magnifying_glass_tilted_left: 问题诊断

通过分析您的实际输出与期望结果之间的差异,可以定位到核心问题是:虽然QEMU已启动,但PCIe卡(特别是SP680)未能正确加载到系统中

1. 关键线索分析:

  • cat /mockdata/IMU/pcie_card.json 显示配置了4张PCIe卡,其中只有ID为19e50222_19e50052_1的卡设置为在位(presence: 1),其余均为离线状态(presence: 0)→ 这直接影响了BMC是否识别该设备。
  • /sys/bus/pci/devices//proc/bus/pci/devices 均为空 → 表明内核未枚举任何PCI设备 → 说明PCIe设备未被正确模拟或驱动未加载。
  • ipmcget -d v 输出中缺少PCIE Card相关信息 → 确认BMC侧未获取到任何PCIe卡信息。

:white_check_mark: 解决方案:确保PCIe卡正确加载

要让QEMU成功模拟PCIe网卡并供后续BMC驱动调试使用,需完成以下步骤:


:wrench: 第一步:修改 pcie_card.json 配置文件

该文件位于:output/data/mockdata/IMU/pcie_card.json

作用:定义哪些PCIe卡被模拟及其物理属性、存在状态和总线位置。

修改要求:

将你希望加载的PCIe卡(如SP680)的 "presence" 字段从 0 改为 1,表示设备“在位”。

示例正确配置(以SP680为例):

{
  "description": "key由id_auxid_slot组成,后面是devbus devdevice devfunction bus device function presense",
  "9005028f_90050801_1": ["20", "00", "00", "18", "00", "00", "1"],
  "19e50222_19e50052_2": ["95", "00", "00", "91", "00", "00", "1"],
  "19e50222_19e50052_3": ["96", "00", "00", "93", "00", "00", "1"],
  "19e50222_19e50052_4": ["97", "00", "00", "95", "04", "00", "1"]
}

:white_check_mark: 注意:请确保所有关键PCIe卡(包括Riser槽位上的)presence 值均为 "1"

:pushpin: 知识库支持

  • pcie_card.json 是QEMU用来定义PCIe卡存在状态和CSR数据的核心配置文件。
  • QEMU会监听该文件变化,并在运行时动态响应(见DC1, DC3, DC7)。
  • SP680网卡的设备ID组合 0x19e5 0x0222 多次出现在KG和文档中,对应多个PCIe地址(如0000:95:04.0等)。

:hammer_and_wrench: 第二步:确认仿真数据(CSR文件)已就绪

1. 查找对应CSR文件:

SP680网卡需要对应的CSR文件支持,通常命名格式为:

19e50222_19e50052.sr
  • 可在 vpd 仓中查找此文件。
  • 编译时会被转换成 .bin 文件(如 0x02_0x9700_mctp_SP680.bin)用于运行时加载。

2. 检查现有bin文件是否存在:

ls /output/data/mockdata/pciecard/*.bin | grep -i sp680

若无对应文件,需添加如下内容至构建流程:

  • .sr 文件(描述硬件参数)
  • .dds 文件(描述数据结构)
    通过 bingo build 自动编译生成 .bin

:pushpin: 知识库支持

  • 文档(5)提到开发新网卡需添加.sr.dds文件。
  • openUBMC QEMU默认支持SP680(DC6、DC7)。

:counterclockwise_arrows_button: 第三步:重启QEMU并验证系统枚举

1. 重新启动QEMU使配置生效:

python3 build/works/packet/qemu_shells/vemake_1711.py > qemu_stdout.log 2> qemu_stderr.log

推荐每次都重定向日志,便于排查错误。

2. 登录后检查PCI设备是否枚举:

# 查看内核发现的PCI设备
cat /proc/bus/pci/devices

# 或列出sysfs中的设备
ls /sys/bus/pci/devices/

预期应看到类似:

0000:18:00.0  0000:91:00.0  0000:93:00.0  0000:95:04.0

:bar_chart: 第四步:验证BMC是否识别PCIe卡

执行:

ipmcget -d v

预期输出应包含PCIe卡信息,例如:

PCIe1 ProductName: SAS 3152
PCIe4 ProductName: SP680

也可通过Redfish API验证:

curl -k -u Administrator:****** https://localhost:443/redfish/v1/Chassis/1/PCIeDevices/PCIeCard4

:gear: PCIe卡热插拔支持说明

若您希望动态加载/卸载PCIe卡(无需重启QEMU),QEMU支持在线热插拔仿真

在线热插拔操作步骤:

  1. 修改 pcie_card.json

    • 将某卡的 "presence" 改为 "1"(插入)或 "0"(拔出)
  2. 触发重载机制

    • QEMU会自动检测该文件变更并重新加载配置(见KG:QEMU ↔ pcie_card.json关系)
  3. 查看效果

    ipmcget -d v
    

    应能立即看到新增/移除的PCIe卡信息。

:pushpin: 知识库支持

  • “Qemu仓支持部分PCIe卡热插拔能力,支持在线加载和替换成自己的热插拔卡”(DC1, DC2, DC7)
  • 支持通过修改pcie_card.json实现动态增删卡(DC1, DC7)

:file_folder: 文件路径与结构参考

文件 路径 作用
pcie_card.json output/data/mockdata/IMU/pcie_card.json 定义PCIe卡的存在状态、总线映射
.sr 文件 vpd-repo/csr/ 描述PCIe设备的静态属性
.bin 文件 output/data/mockdata/pciecard/ 运行时使用的仿真数据二进制
QEMU启动脚本 build/works/packet/qemu_shells/vemake_1711.py 启动虚拟BMC实例

:red_exclamation_mark: 常见问题排查清单

问题 检查项 解决方案
ipmcget 不显示PCIe卡 presence 是否为1 修改 pcie_card.json
/sys/bus/pci/devices 为空 PCI设备未枚举 检查QEMU日志是否有错误
SP680无法识别 CSR文件缺失 添加19e50222_19e50052.sr并重新构建
修改配置不生效 QEMU未重启 重新运行vemake_1711.py
内核不识别设备 设备ID不在支持列表 确保使用0x19e5:0x0222这类已知设备ID

:white_check_mark: 总结:实现PCIe卡加载的关键步骤

  1. :white_check_mark: 确保 pcie_card.json 中目标卡 presence=1
  2. :white_check_mark: 确保 .sr / .bin 仿真文件已存在且命名正确
  3. :white_check_mark: 重启QEMU使配置生效
  4. :white_check_mark: 使用 cat /proc/bus/pci/devices 验证内核层枚举
  5. :white_check_mark: 使用 ipmcget -d v 验证BMC层识别
  6. :white_check_mark: 成功后即可开始调试自有网卡BMC驱动

:books: 参考资料

  • 【Qemu应用】如何在Qemu使用PCIe卡(文档7)
  • QEMU资料汇总(文档2)
  • QEMU仿真与BMC业务开发指南(文档6)
  • PCIe卡热插拔功能支持(KG: PCIe Card Hot Plug)

:light_bulb: 提示:在进行新网卡驱动开发前,建议先确保现有SP680网卡能在您的环境中正常显示,作为基准验证环境搭建无误。

目前这些板卡识别有问题,qemu仓有issue在跟踪,正在解决中