26.06上devmon反复重启(自己构建HPM、26.03上正常)

发布求助时帖子重复了,转26.06上devmon反复重启(自己构建HPM、26.03上正常) - 交流互助区 - openUBMC 论坛跟踪。

问题描述

新开发的PCIe网卡驱动Porting到OpenUBMC26.06后,devmon服务反复重启。(在26.03版本上是正常的)

**表象:**OpenUBMC的WebUI “系统管理” → “系统信息“ → “网络适配器“中的网卡信息全是空的。

定位发现是“devmon”不能正常运行,反复重启:

查看LOG,发现PCIe网卡初始化时devmon未能找到几个.so

在构建的manifest下确实没找到这些.so。

其他26.03版本没出现的问题:

2606版本是这样:

2603版本是这样:

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC 2606

  • 硬件配置:MYIR开发板3093,自研PCIe网卡、使用NC-SI over MCTP over SMBus_OEM。

重现步骤

  1. 克隆component_drivers代码仓、切换到1.2.248 (OpenUBMC 26.06对应组件的版本),增加自研PCIe网卡的CSR、代码驱动,NC-SI MCPT驱动。然后binggo build构建dev版本。网卡CSR文件参见附件“14140130_20f91010_20f90066.sr”

  2. 克隆devmon代码仓、切换到1.2.58 (OpenUBMC 26.06对应组件的版本),修改mds/service.json,使用“conan”: “component_drivers/1.2.248@openubmc.dev/dev”。然后binggo build构建dev版本。

  3. 克隆vpd代码仓、切换到1.90.125 (OpenUBMC 26.06对应组件的版本),修改vendor/Huawei/Server/Kunpeng/openUBMC/root.sr,增加MYIR板上的I2C_8和Connector_SF的配置,参考附件“root.sr”。然后binggo build构建dev版本。

  4. 克隆manifest仓,切换到tag 26.06_2026.06.30,修改openubmc.lock、openubmc_sdk.lock解除锁定使用组件的版本,修改framework.yml和hardware.yml使用上面的dev版本,修改profile.txt增加包含自研网卡的14140130_20f91010_20f90066.sr,然后binggo build出包rootfs_openUBMC.hpm。

  5. 做米尔开发板OpenUBMC WebUI的“固件更新”更新刚出的HPM包,重启自研网卡和OpenUBMC。

期望结果

BMC与自研网卡之间MCTP over SMBus_OEM交互正常。

BMC的WebUI上网卡信息显示正常。

实际结果

:white_check_mark:】从网卡侧LOG和BMC的app.log中看MCTP over SMBus_OEM交互正常。

:cross_mark:】BMC的WebUI上无法显示网卡基本信息。

尝试过的解决方案

  1. 比对CX、Hisi和网讯的26.03和26.06 CSR变化,将自研网卡CSR中的PCIeNicCard_1.xxx改成PCIeNicCard_1[bmc.dev.PCIeDevice].xxx。因为看app.log中有“not found for PCIeNicCard_1.Slot”字眼。但还是没用。
  2. 看到drivers/meson.build有新增使用“unidev”编译宏,但看26.03上的“subdir(‘connector’)”,感觉用不着开启“unidev”。就没尝试。

分析结论

感觉是哪里构建步骤有问题,造成.so的缺失、devmon启动失败。

OpenUBMC26.06.zip (70.4 KB)

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

总结:关键排查清单

可能性 依据(知识库) 行动方向
manifest 未包含 component_drivers 关系、文档 #2、#5 对比 26.03/26.06 manifest,手动确认集成
CSR 格式版本不符 关系(FormatVersion 5.00) 检查 CSR 文件头版本
组件版本不兼容 多条关系(libmcpp、组合测试) 统一升级至官方稳定版
缺少构建优化宏 Unidev=True 关系 尝试开启 unidev 编译
构建缓存导致产物错误 conan remove 关系 清理缓存并重构建
固件缺少修复 PR PR_238、PR_197 合并相关修复补丁
驱动集成步骤遗漏 文档 #5 经验 逐项对照经验文档中的修改

由于您的问题涉及自研硬件和私有补丁,最可能的根因是 manifest 配置差异组件版本不匹配(尤其是 component_drivers 从 26.03 到 26.06 可能被移除或结构变化),建议优先对比两个版本的 manifest、framework.yml 和 hardware.yml,确保 component_driversdevmonlibmcpppcie_device 的版本完全对应,且 .so 文件确实出现在构建产物的预期路径中。

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

根据提供的知识库信息,您描述的 OpenUBMC 26.06 上 devmon 反复重启、PCIe 网卡驱动 .so 文件缺失 的问题,可以关联到以下核心依赖关系和常见配置要点。知识库中记录了大量关于 component_driversdevmon 的耦合机制、版本兼容性、构建配置等细节,以下是基于这些信息的问题分析与解决方向。


1. devmon 与 component_drivers 的强依赖关系

知识库明确说明:

  • devmon 系统在初始化时,仅从 component_drivers 目录加载 .so 文件,且两者的构建和运行时紧密耦合。
  • component_drivers 是 devmon 的子项目,devmon 核心功能(动态加载驱动)完全依赖 component_drivers 的完整性。

对您的问题devmon 找不到 .so 文件,直接表明 component_drivers 组件在 HPM 包中未正确打包或生成。需重点检查构建链路是否遗漏了 component_drivers 的产物。


2. Manifest 与构建配置的潜在缺失

知识库中多次讨论 component_drivers 是否自动集成到 manifest:

  • 早期版本存在手动添加的要求,虽然后来被确认已集成到 manifest,但26.06 版本可能仍有变动
  • 关系显示:component_drivers was removed from version 25.12-SP1, causing integration issues ,这暗示 26.06 的 manifest 结构可能与 26.03 存在差异,导致部分 .so 未被包含。

建议

  • 对比 26.03 与 26.06 的 manifest 文件(特别是 framework.ymlhardware.yml),确认 component_drivers 的引用是否缺失或版本不对。
  • 检查 manifest 下的 rootfs 目录是否包含了 component_drivers 生成的 .so 库(路径通常如 /usr/lib64/ 下)。

3. CSR 文件格式版本要求

知识库记录:

  • 为了让 hwdiscovery 识别新驱动,component_drivers 中的 CSR 文件必须使用 FormatVersion 5.00
  • 您提供的网卡 CSR 文件 “14140130_20f91010_20f90066.sr” 需要确认其格式版本是否正确。

建议

  • 检查 CSR 文件头部是否包含 FormatVersion = 5.00;旧版本格式(如 4.xx)可能导致驱动 .so 被跳过,从而不被 devmon 加载。

4. 版本兼容性(component_drivers、devmon、libmcpp 等)

知识库强调:

  • libmcpp 版本敏感:The component_drivers build is sensitive to Libmcpp version; using 1.2.92 causes runtime problems。您使用的 component_drivers 1.2.248 及配套的 libmcpp 版本需要匹配。
  • component_drivers 与 devmon 需特定组合:文档 #2 显示,在某些版本组合下(如 component_drivers 1.1.36 + devmon 1.1.20)devmon 无法加载,更换为 1.1.30 + 1.1.18 后才成功。

建议

  • 检查 subprojects/libmcpp.wrap 中指定的 libmcpp 版本是否为 26.06 所要求的稳定版本。
  • 尝试 整体升级 component_drivers 和 devmon 至 26.06 官方推荐的最新版本,而非仅使用您自建的 dev 版本(参考文档 #10:更新组件到最新可修复类似问题)。

5. 编译宏与构建缓存问题

  • unidev 编译宏:您看到 drivers/meson.build 新增了 unidev 宏。知识库指出 Using the Unidev=True parameter changes the component_drivers build behavior for debugging or simplification。虽然您尚未尝试,但开启该宏可能纠正某些 .so 的生成规则。
  • 构建缓存The conan remove command is used to clean up the component_drivers cache to reduce disk occupation。累积的 Conan 缓存可能导致不一致,建议:
    1. 执行 conan remove component_drivers/* -f 清理缓存。
    2. 重新执行 bingo build 确保完全重新编译。

6. 缺失的关键补丁(Pull Request)

知识库提到:

  • PR_238introduces a fix in component_drivers for a CSR configuration issue,可能解决了某些驱动 .so 被错误跳过的 bug。
  • PR_197introduced the set_lldp cmd implementation,涉及网卡驱动交互。

建议

  • 确认您的基础分支是否已包含这些 PR。如果是从较早标签(如 26.06 未合并所有修复的版本)开始开发,手动合并这些 PR 可能修复 .so 缺失问题。

7. 参考已有经验文档

知识库中的 “南向适配网迅网卡经验分享”(文档 #5)提供了完整的问题排查流程,包括:

  • 修改 start_ncsi_protocol()mctp() 接口的正确做法。
  • 由于 NC-SI over MCTP over SMBus 的 mctp 关联性,必须指定正确的 endpoint 对象
  • 在 manifest 中新增 profile.txt 以解决头文件缺失问题(该文件在 26.06 构建时是否缺少?)。

建议您严格对照该文档,检查每一步配置是否一致(特别是针对 SMBus 的特殊处理)。


总结:关键排查清单

可能性 依据(知识库) 行动方向
manifest 未包含 component_drivers 关系、文档 #2、#5 对比 26.03/26.06 manifest,手动确认集成
CSR 格式版本不符 关系(FormatVersion 5.00) 检查 CSR 文件头版本
组件版本不兼容 多条关系(libmcpp、组合测试) 统一升级至官方稳定版
缺少构建优化宏 Unidev=True 关系 尝试开启 unidev 编译
构建缓存导致产物错误 conan remove 关系 清理缓存并重构建
固件缺少修复 PR PR_238、PR_197 合并相关修复补丁
驱动集成步骤遗漏 文档 #5 经验 逐项对照经验文档中的修改

由于您的问题涉及自研硬件和私有补丁,最可能的根因是 manifest 配置差异组件版本不匹配(尤其是 component_drivers 从 26.03 到 26.06 可能被移除或结构变化),建议优先对比两个版本的 manifest、framework.yml 和 hardware.yml,确保 component_driversdevmonlibmcpppcie_device 的版本完全对应,且 .so 文件确实出现在构建产物的预期路径中。

确认下26.03和26.06 manifest差异

组件版本是否匹配

查了一下26.03版本manifest构建后也没有这些.so。

使用的component_drivers / devmon / vpd版本都是从26.06版本的manifest下载后直接构建的LOG中确认的版本号,也对应修改了manifest中.yml文件中版本号 。

manifest中除了新增ast2600和hi1712的,公共文件没看出啥关键修改。

另外今天我也尝试了这几个组件的“26.06_2026.06.30” tag版本,也是一样的现象。

26.06上devmon反复重启(自己构建HPM、26.03上正常) - 交流互助区 - openUBMC 论坛跟踪