设备树方式适配GPU卡,未加载驱动

问题描述

我目前需要采用设备树方式适配一张GPU卡,已生成了SO驱动,了解到openubmc自动加载该驱动和vpd也有关,现在未加载驱动,如何排查问题呢

执行mdbctl lsprop Bios_1_010101能看见带内上报了GPU卡的bdf

framework包含我GPU卡的打印信息如下:

2026-06-02 08:22:31.530866 hwdiscovery NOTICE: hwcomponent.lua(313): [self-discovery] name: Connector_PCIE_SLOT2_01010103, position: 0101010302, current: 1, previous: 0,uptime: 6875 s
2026-06-02 08:22:31.637246 hwdiscovery ERROR: hwcomponent.lua(189): position: 0101010302, get component sr failed, error: Local file not found, open file failed: /opt/bmc/sr/100010e2_07311100.sr, status: 4, count: 1
2026-06-02 08:22:31.641942 hwdiscovery ERROR: hwcomponent.lua(189): position: 0101010302, get component sr failed, error: Local file not found, open file failed: /opt/bmc/sr/100010e2_07311100.sr, status: 4, count: 2
2026-06-02 08:26:41.650574 persistence NOTICE: persistence_db_intf.lua(331): finish persist save for table: t_event, persist_type: protect_power_off, op_type: delete, data_size: 368, key: PerId:Event_PCIeBandWidth_0101010302 [repeated 2 times in 0s from 2026-06-02 08:16:37.631612 to 2026-06-02 08:16:37.653570][flush]
2026-06-02 08:28:15.651446 persistence NOTICE: persistence_db_intf.lua(288): database per_poweroff.db backup successful
2026-06-02 08:29:15.181759 hwdiscovery NOTICE: hwcomponent.lua(344): [self-release] name: Connector_PCIE_SLOT2_01010103, position: 0101010302, current: 0, previous: 1,uptime: 7279 s
2026-06-02 08:29:15.183144 hwdiscovery NOTICE: component.lua(202): position: 0101010302, cleanup resource tree successfully
2026-06-02 08:36:37.137900 hwdiscovery NOTICE: hwcomponent.lua(313): [self-discovery] name: Connector_PCIE_SLOT2_01010103, position: 0101010302, current: 1, previous: 0,uptime: 7721 s
2026-06-02 08:36:37.258678 hwdiscovery ERROR: hwcomponent.lua(189): position: 0101010302, get component sr failed, error: Local file not found, open file failed: /opt/bmc/sr/100010e2_07311100.sr, status: 4, count: 1
2026-06-02 08:36:37.262244 hwdiscovery ERROR: hwcomponent.lua(189): position: 0101010302, get component sr failed, error: Local file not found, open file failed: /opt/bmc/sr/100010e2_07311100.sr, status: 4, count: 2
2026-06-02 08:37:55.076286 persistence NOTICE: persistence_db_intf.lua(331): finish persist save for table: t_pcie_dev_info, persist_type: protect_reset, op_type: update, data_size: 1269, key: GroupPosition:PCIeDevice_1_0103

环境信息

  • 软件版本:[如 OpenUBMC2603]
    “vpd/[>=1.90.74]@openubmc/stable”

期望结果

解析sr 加载so驱动

答案内容由AI生成,仅供参考:
根据要求,回答内容中未出现明确标有“总结”、“解决方案”或“结论”字样的章节,因此返回空内容。

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

根据您提供的日志和问题描述,核心错误是系统在设备自发现阶段无法找到对应的 SR 文件(/opt/bmc/sr/100010e2_07311100.sr),导致后续的驱动加载流程无法进行。以下是基于 设备树方式 的排查步骤和建议。


1. 确认 SR 文件是否存在且路径正确

  • 设备树方式下,SR 文件应存放在 component_drivers 仓库中,而不是 vpd 仓库。
  • 检查您是否已将 SR 文件(例如 100010e2_07311100.sr)放置在 component_drivers/pcie_gpu_card/<厂商>/csr/ 目录下,并在 manifest 中配置了该仓库的引用路径。
  • 同时确认该 SR 文件是否已被正确打包到固件中,最终出现在目标系统 /opt/bmc/sr/ 目录下。
  • 您可以在构建后的临时目录中查找该文件,例如:
    find ./temp/build_openUBMC_debug_dev -name "100010e2_07311100.sr"
    

2. 检查 SR 文件的加载方式标记

  • 打开 SR 文件,检查其 FormatVersion 字段:

    • FormatVersion = 3.00 → 资源树方式(传统方式)
    • FormatVersion = 5.00 → 设备树方式(南向驱动方式)
  • 如果您的 SR 文件是 5.00,则系统会通过 devmon 组件加载驱动;若不是,则需要确认您的适配目标是否为设备树方式。


3. 检查 devmon 组件是否正常工作

  • 设备树方式依赖于 devmon 服务进行设备发现和驱动加载。请检查:
    • 系统启动后 devmon 服务是否已正常启动(可通过 busctlsystemctl 查看)。
    • devmon 日志中是否有关于该 PCIe 卡加载失败的详细错误(已出现在您的日志中,但可进一步查看完整日志)。
    • 确保 devmon 配置中已包含 GPU 插件,且 component_drivers 仓库中对应的 GPU 驱动插件已正确编译并打包。

4. 确认 SR 文件的命名规则

  • 根据您提供的错误日志,系统尝试加载名为 100010e2_07311100.sr 的文件。
  • 这个文件名通常由 Bom + Id + AuxId 组成(例如 Bom_Id_AuxId.sr),或由 VID_DID 等四元组定义。
  • 请检查您的上级组件(如载板、IEU)的 SR 文件中,连接器(Connector)对象的 IdentifyMode 和 SR 文件名拼接规则是否与您实际生成的 SR 文件名一致。
  • 如果文件名规则不匹配,系统会尝试加载默认 default.sr 或失败。

5. 排查驱动 SO 文件是否正确打包

  • 设备树方式下,驱动 SO 文件(例如 libpcie_gpu_card.so)应位于 component_drivers 仓库的对应实现目录中,并作为 conan 包的一部分被安装到 /opt/bmc/ 目录。
  • 检查构建日志中是否成功编译并链接了您的 SO 驱动文件,以及是否被正确地复制到最终文件系统中(例如 .../building/rtos_with_driver/rootfs/opt/bmc/...)。

6. 参考社区现有排查流程

根据社区 PCIe设备加载 文档(文档5)中的流程:

  1. 检查带内 PCIe 设备树(您已确认 mdbctl lsprop 可见 BDF,说明 BIOS 上报正常)。
  2. 确认 SR 文件是否存在(您当前遇到的失败即为此步)。
  3. 确认加载方式(查看 FormatVersion 是否为 5.00)。
  4. 确认 SR 文件路径
    • 设备树方式 → component_drivers 仓库。
    • 资源树方式 → vpd 仓库。
  5. 检查 devmon 日志init 流程。

7. 建议行动

  • 首要行动:确保 SR 文件 100010e2_07311100.sr 已放置在 component_drivers/pcie_gpu_card/<厂商>/csr/ 目录下,并且在 manifest 中正确引用了该仓库,使文件能被打包到 /opt/bmc/sr/ 下。
  • 验证:重新编译固件并刷新后,检查 /opt/bmc/sr/ 下是否出现该文件。
  • 若仍失败:检查 devmon 组件是否启用了 GPU 插件,以及 SO 驱动是否被正确加载(可使用 busctl tree bmc.kepler 查看是否已有 GPU 卡对应的 D-Bus 对象)。

如果上述步骤均正确但驱动仍未加载,请提供 devmon 的完整初始化日志、构建日志及 manifest 中 component_drivers 的配置片段,以便进一步定位问题。

从提供的日志上来看,是没有将sr文件编入包中,可以先检查一下环境上的/opt/bmc/sr中有无卡的sr文件。

设备树方式的卡的csr文件在component_driver仓中,不在vpd中,可以参考component_driver中其他pice卡的实现。

为了将sr文件带入hpm包,还需要修改manifest,一般在build/product/BMC/openUBMC/rootfs/include/profile.txt路径下,试具体机型还可能在不同的路径,需要自行带入

请问这里为什么去找100010e2_07311100.sr呢 我参照component_drivers GPU卡sr文件名应该是14140130_07311100_07311105.sr

确定下相关Connector的Bom字段是不是有值