qemu仿真环境pcie设备无法加载

问题描述

使用最新main分支manifest一键启动qemu:

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

启动之后pcie设备过了很久都没有自发现成功,web界面也找不到默认的pcie设备,qemu_stdout.log的部分信息如下

2023-08-15 09:20:46.922614 bmc_time NOTICE: rtc_time.lua(74): BMC synchronization time (1692091246) successful
2023-08-15 09:20:48.436665 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_D7a_010101, position: 01010114, current: 1, previous: 0,uptime: 302 s
2023-08-15 09:20:52.741157 hwdiscovery NOTICE: parser_work.lua(78): position: 01010112, process sr data successfully, uptime: 306 s, cost: 3570ms
2023-08-15 09:21:08.279192 bmc_time NOTICE: ntp.lua(1268): BMC synchronization time (1692091268) successful
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/bmc/web/nginx/conf/nginx.conf:1
2023-08-15 09:21:55.164694 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan2DualSensor_010103, position: 01010302, current: 1, previous: 0,uptime: 369 s
pcie_card.json change...
2023-08-15 09:21:57.303872 hwdiscovery NOTICE: parser_work.lua(78): position: 01010114, process sr data successfully, uptime: 371 s, cost: 1740ms
2023-08-15 09:21:57.536072 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan4DualSensor_010103, position: 01010306, current: 1, previous: 0,uptime: 371 s
[  373.188667] File has changed.
[  373.239461] Found 4 BDF entries.
[  373.240237] Set length field: dec=12 -> hex=0x0C
[  373.242877] Routing table updated with 4 entries.
[  373.243474] Cache invalidated for /mockdata/pciecard/0x00_0x0000_mctp.bin, will be recreated on next read.
insmod: can't insert '/lib/modules/ko/btc_drv.ko': File exists
2023-08-15 09:22:00.048830 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan3DualSensor_010103, position: 01010304, current: 1, previous: 0,uptime: 374 s
2023-08-15 09:22:01.528958 hwdiscovery NOTICE: parser_work.lua(78): position: 01010302, process sr data successfully, uptime: 375 s, cost: 1590ms
2023-08-15 09:22:03.010099 maca NOTICE: base.lua(394): monitor component web_backend added, service: bmc.kepler.web_backend
2023-08-15 09:22:03.923628 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan1DualSensor_010103, position: 01010300, current: 1, previous: 0,uptime: 377 s
2023-08-15 09:22:06.443609 hwdiscovery NOTICE: parser_work.lua(78): position: 01010306, process sr data successfully, uptime: 380 s, cost: 2780ms
2023-08-15 09:22:07.387897 maca NOTICE: base.lua(394): monitor component redfish added, service: bmc.kepler.redfish
2023-08-15 09:22:09.081472 hwdiscovery NOTICE: parser_work.lua(78): position: 01010304, process sr data successfully, uptime: 383 s, cost: 980ms
2023-08-15 09:22:09.645913 maca NOTICE: base.lua(394): monitor component dcmid added, service: bmc.kepler.dcmid
2023-08-15 09:22:11.782099 hwdiscovery NOTICE: parser_work.lua(78): position: 01010300, process sr data successfully, uptime: 385 s, cost: 1200ms
2023-08-15 09:20:48.412564 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan2SingleSensor_010103, position: 01010303, current: 1, previous: 0,uptime: 423 s
2023-08-15 09:20:50.241491 hwdiscovery NOTICE: parser_work.lua(78): position: 01010303, process sr data successfully, uptime: 425 s, cost: 280ms
2023-08-15 09:20:59.810785 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan4SingleSensor_010103, position: 01010307, current: 1, previous: 0,uptime: 434 s
2023-08-15 09:21:02.315709 hwdiscovery NOTICE: parser_work.lua(78): position: 01010307, process sr data successfully, uptime: 437 s, cost: 790ms
2023-08-15 09:21:13.459285 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan3SingleSensor_010103, position: 01010305, current: 1, previous: 0,uptime: 448 s
2023-08-15 09:21:15.926261 hwdiscovery NOTICE: parser_work.lua(78): position: 01010305, process sr data successfully, uptime: 450 s, cost: 200ms
2023-08-15 09:21:24.031129 hwdiscovery NOTICE: hwcomponent.lua(311): [self-discovery] name: Connector_Fan1SingleSensor_010103, position: 01010301, current: 1, previous: 0,uptime: 459 s
2023-08-15 09:21:25.953601 hwdiscovery NOTICE: parser_work.lua(78): position: 01010301, process sr data successfully, uptime: 460 s, cost: 290ms
pcie_nvme.json change...
pcie_card.json change...
2023-08-15 09:21:00.082079 maca NOTICE: base.lua(394): monitor component web_backend added, service: bmc.kepler.web_backend
2023-08-15 09:21:01.219854 maca NOTICE: base.lua(394): monitor component redfish added, service: bmc.kepler.redfish
2023-08-15 09:21:02.568167 maca NOTICE: base.lua(394): monitor component dcmid added, service: bmc.kepler.dcmid
pcie_nvme.json change...
[  841.161340] skynet (5639) used greatest stack depth: 11024 bytes left
pcie_card.json change...
2023-08-15 09:21:02.056665 maca NOTICE: base.lua(394): monitor component redfish added, service: bmc.kepler.redfish
2023-08-15 09:21:03.034702 maca NOTICE: base.lua(394): monitor component web_backend added, service: bmc.kepler.web_backend
2023-08-15 09:21:04.092322 maca NOTICE: base.lua(394): monitor component dcmid added, service: bmc.kepler.dcmid
pcie_nvme.json change...
cp: can't stat '/dev/shm/raid_controller_lib.log': No such file or directory
cp: can't stat '/dev/shm/raid_controller_lib.log.1': No such file or directory
pcie_card.json change...
2023-08-15 09:20:55.265685 maca NOTICE: base.lua(394): monitor component web_backend added, service: bmc.kepler.web_backend
2023-08-15 09:20:57.037111 maca NOTICE: base.lua(394): monitor component dcmid added, service: bmc.kepler.dcmid
2023-08-15 09:20:58.927824 maca NOTICE: base.lua(394): monitor component redfish added, service: bmc.kepler.redfish
ls: /data/var/coredump/: No such file or directory
cat: can't open '/var/log/journal/record': No such file or directory
/opt/bmc/script/dump.sh: line 83: df: not found
pcie_nvme.json change...
[ 1152.482790] coredump:do_coredump 767,task logs_tool 8269 8269:start
[ 1152.750958] coredump:do_coredump 1029,task logs_tool 8269 8269:end

ipmcget -d d捕获的日志:

dump_info.tar.gz (1.6 MB)

请问可能的原因是什么?类似问题该如何定位?

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC25.12

答案内容由AI生成,仅供参考:
:white_check_mark: 总结:解决方案清单

类型 解决方案
:white_check_mark: 最优解 确保/mockdata/sr/Bom_id_auxid.sr等SR文件存在且格式正确
:white_check_mark: 高概率原因 补充/mockdata/pciecard/*.bin仿真Eeprom文件
:hourglass_not_done: 常见误解 误以为“change…”=失败 → 实际可能只是处理延迟 → 请等待+刷新
:wrench: 辅助措施 重新构建QEMU镜像(bingo build -sc qemu)确保一致性
:hammer_and_wrench: 调试工具 使用BMC Studio连接QEMU,查看Redfish/Web界面动态加载情况
点击此处查看详细分析解答

QEMU仿真环境中PCIe设备无法自发现的问题分析与定位

在使用QEMU仿真环境进行BMC开发时,遇到PCIe设备无法自发现的问题,是一个典型且常见的故障。根据用户提供的日志信息、操作步骤和环境配置,结合知识库中的技术资料,本文将系统性地分析可能原因,并提供完整的定位与解决路径。


:magnifying_glass_tilted_left: 问题描述总结

  • 现象:在使用最新main分支的manifest启动QEMU后,PCIe设备长时间未被自发现,Web界面中无法看到默认的PCIe设备。
  • 关键日志线索
    • pcie_card.json change... 多次出现,表明PCIe配置文件被修改或监听到变化。
    • Found 4 BDF entries. 表明系统已识别部分PCIe拓扑信息。
    • 无明显错误日志(如ERRORFAILED),但缺乏PCIe设备注册成功的确认信息。
  • 使用命令
    python3 build/works/packet/qemu_shells/vemake_1711.py >qemu_stdout.log 2>qemu_stder.log
    
  • 环境信息
    • 操作系统:Ubuntu 24.04
    • 软件版本:openUBMC 25.12(QEMU仿真环境)

:police_car_light: 可能原因分析(基于上下文)

1. 缺少必要的SR配置文件(如 Bom_id_auxid.sr

根本原因:BMC在加载PCIe卡时必须依赖特定的SR文件进行硬件识别。

  • 根据知识图谱实体 Bom_id_auxid.sr 的描述:

    “该SR文件是BMC正确识别并加载PCIe卡所必需的;其缺失会导致PCIe卡无法加载。”

  • 关系:BMCBom_id_auxid.sr(强依赖关系)
  • 问题定位建议
    • 检查QEMU仿真环境中是否包含正确的SR文件(如 Bom_id_auxid.sr)。
    • 验证路径 /mockdata//data/sr/ 是否存在对应板卡的CSR/SR文件。
    • 参考文档《openUBMC Qemu特性设计说明书》中提到:自发现服务依赖从固定路径读取 root.sr 文件,并解析CSR数据建立设备拓扑

:white_check_mark: 解决方案

# 检查是否存在必要SR文件
ls /mockdata/sr/*.sr
# 若缺失,需补充正确的CSR/SR描述文件(可从真实设备导出或由硬件团队提供)

2. PCIe设备自发现机制未完成或延迟

现象解释:尽管log显示pcie_card.json change...Found 4 BDF entries,但实际设备仍未出现在Web界面。

  • QEMU中PCIe设备的自发现依赖于以下流程:

    1. 加载SR/CSR文件 → 2. 解析硬件拓扑 → 3. 枚举PCIe设备(BDF)→ 4. 生成pcie_card.json → 5. 触发热插拔事件 → 6. 设备出现在Web界面。
  • 日志中“change…”频繁出现,说明系统正在不断响应PCIe配置更新,但未完成稳定的设备注册流程

:pushpin: 知识支持

  • 文档《BMC Studio相关FAQ》指出:QEMU性能较慢,接口获取需要时间,建议耐心等待并刷新。
  • 《QEMU 仿真与 BMC 业务开发指南》说明:PCIe热插拔事件需由BMC检测并上报资产管理模块。

:white_check_mark: 解决方案

  • 等待更长时间(建议5~10分钟),观察是否最终完成自发现。
  • 手动刷新Web界面或调用Redfish API验证设备状态:
    GET /redfish/v1/Systems/1/PCIeDevices
    

3. 仿真环境缺少Eeprom仿真文件或bin桩文件

核心机制:QEMU中通过“文件打桩”模拟真实硬件访问。

  • 《openUBMC Qemu特性设计说明书》明确指出:

    “Eeprom器件通过仿真实现——当需访问硬件Eeprom时,实际转向读取对应的Eeprom仿真二进制文件(bin文件)。”

  • 如果缺少pciecard/0x00_0x0000_mctp.bin等Eeprom仿真文件,可能导致PCIe设备信息读取失败。

:magnifying_glass_tilted_left: 日志佐证

[  373.242877] Cache invalidated for /mockdata/pciecard/0x00_0x0000_mctp.bin, will be recreated on next read.

这表明系统试图访问该文件,但其内容可能不存在或不完整。

:white_check_mark: 解决方案

# 确保以下路径存在且有权限访问
/mockdata/pciecard/
# 检查是否有对应BDF地址的.bin文件(如0x00_0x0000_mctp.bin)
ls /mockdata/pciecard/
# 若缺失,可复制模板文件或从真实设备提取

4. PCIe卡热插拔事件未正确触发或处理

背景知识:PCIe热插拔需由BMC检测中断并执行自发现。

  • 根据《QEMU 仿真与 BMC 业务开发指南》:

    “BMC需要能够:检测设备变化 → 识别新设备 → 更新资产记录 → 发送告警。”

  • 若QEMU未正确模拟PCIe中断信号,或BMC服务未监听pcie_card.json变更,则不会触发设备注册流程。

:pushpin: 相关组件

  • bios_service.lua 负责调用 get_pcie_silk_config 获取PCIe配置。
  • hwdiscovery 模块负责处理pcie_card.json change...事件并执行自发现。

:white_check_mark: 验证方法

# 检查bios_service.lua是否运行
ps | grep bios_service

# 查看日志中是否有get_pcie_silk_config调用
grep "get_pcie_silk_config" qemu_stdout.log

5. QEMU镜像构建不完整或不匹配

风险点:使用vemake_1711.py脚本启动,是否对应正确构建的QEMU固件包?

  • 根据《构建你的BMC》文档:
    bingo build -sc qemu
    
    此命令构建QEMU专用固件包(如openUBMC_qemu_default.cpio.gz)。

:warning: 隐患

  • 若未重新构建QEMU镜像,使用旧版本manifest可能导致功能缺失。
  • Ubuntu 24.04 可能存在glibc或工具链兼容性问题(虽QEMU本身为静态编译,但仍需注意依赖)。

:white_check_mark: 解决方案

# 强制重新构建QEMU包
bingo build -sc qemu --force

# 确保output目录下生成了最新固件
ls manifest/output/packet/inner/openUBMC_qemu_default.cpio.gz

:compass: 定位流程指南(推荐排查步骤)

步骤 操作 目的
1 检查/mockdata/sr/下是否存在Bom_id_auxid.sr等SR文件 确认硬件描述完整
2 检查/mockdata/pciecard/下是否存在.bin仿真文件 确保Eeprom可读
3 等待5~10分钟后刷新Web界面或查询Redfish API 排除延迟问题
4 搜索日志中是否存在get_pcie_silk_config调用 验证BIOS服务是否介入
5 检查bios_service.lua是否正常运行 确保关键服务启动
6 重新执行bingo build -sc qemu构建完整镜像 排除构建不一致问题
7 使用BMC Studio连接QEMU并查看“资源协作接口” 观察接口是否逐步加载

:light_bulb: 提示:参考《BMC Studio相关FAQ》,若接口显示少,可能因QEMU性能慢导致,建议耐心等待 + 频繁刷新


:white_check_mark: 总结:解决方案清单

类型 解决方案
:white_check_mark: 最优解 确保/mockdata/sr/Bom_id_auxid.sr等SR文件存在且格式正确
:white_check_mark: 高概率原因 补充/mockdata/pciecard/*.bin仿真Eeprom文件
:hourglass_not_done: 常见误解 误以为“change…”=失败 → 实际可能只是处理延迟 → 请等待+刷新
:wrench: 辅助措施 重新构建QEMU镜像(bingo build -sc qemu)确保一致性
:hammer_and_wrench: 调试工具 使用BMC Studio连接QEMU,查看Redfish/Web界面动态加载情况

:books: 参考资料(来自知识库)

  • openUBMC Qemu特性设计说明书.md》:文件打桩、SR/CSR机制、整机仿真
  • QEMU 仿真与 BMC 业务开发指南》:PCIe热插拔流程、事件模拟
  • 构建你的BMC》:QEMU仿真包构建方法(bingo build -sc qemu
  • BMC Studio相关FAQ》:接口加载慢是正常现象,建议等待刷新
  • 实体关系:BMC → Bom_id_auxid.sr(缺失导致PCIe卡无法加载)

如上述方法仍无法解决,请提供以下附加信息进一步分析:

  1. /mockdata/sr//mockdata/pciecard/ 目录结构
  2. pcie_card.json 文件内容(路径通常为/data/pcie_card.json
  3. 是否手动修改过任何仿真文件?

可通过BMC Studio的“仿真文件”功能查看与编辑。

可以看下对应的csr文件有没有加载

是指 /opt/bmc/sr 路径下的 sr文件吗?默认的raid卡是有的

/opt/bmc/sr # ls *9005028f_90050801*
14140130_9005028f_90050801.sr

在framework.log搜下这个sr看看?有没有对应的get csr data from xxx.sr的日志记录。没有说明BMC没有识别到卡;有的话看看前后对应的position有没有报错日志。
顺便可以发下一键收集日志里AppDump/hwdiscovery目录下connector.txt文件。

之前的带有connector.txt文件的回复一直没通过,可以麻烦你看下上面的提问,我附上了日志压缩包,另外我看了framework.log没有找到默认raid的sr文件。

这边可以看到模拟的bios上报了一张pcie卡,devBus = 33,(见bios_info文件种的PcieCardBDF),而这张pcie卡也加载了,PCIeDevice_1_01011503,SP686C-M-16i 2G,您这边哪张卡没有呢?

就是默认的一张raid卡和网卡,我没有修改替换,正常启动qemu在qemu_stdout.log中看不到pcie设备[self-discovery]的打印,ipmcget -d v查不到,web端也没有显示。

这个和分配的系统资源有关系吗?我是用VMware的ubuntu 24虚拟机里跑的环境。

qume加载情况和执行机没什么关系,这个就是一个打桩数据。从日志来看也上报了一张,您这边是什么情况出现的问题呢?

我之前又尝试删除.conan2缓存,重新执行init.py并构建bingo build -sc qemu,不过启动后还是无法看到pcie设备。其实之前运行我有看到pcie设备,所以我也不太清除具体是什么情况出现的这个问题。

qemu的数据加载逻辑可以查看这个帖子如何新增仿真数据和仿真驱动 希望这个帖子能帮助你定位问题