ipmi_mgmt组件编译问题

问题描述

ipmi_mgmt代码修改后按照文档无法进行编译,报错如下,目前这个开源组件是否可以编译进整包?

BMC社区版本用的26.06 组件版本是最新的1.0.40

修改这个组件是因为想用ipmbeth这个类,但是发现这一块代码没有实现,所以在这个组件新增了代码,但是目前发现这个组件无法重新编译。

参考组件文档编译报错如下:

Executing subproject libmcpp:mcdbus

mcdbus| Project name: mcdbus
mcdbus| Project version: 0.1.0
mcdbus| C++ compiler for the host machine: /home/workspace/ipmi_mgmt/.ccache_wrapper c++ (gcc 9.5.0 “c++ (Ubuntu 9.5.0-6ubuntu2.1) 9.5.0”)
mcdbus| C++ linker for the host machine: /home/workspace/ipmi_mgmt/.ccache_wrapper c++ ld.bfd 2.42
mcdbus| Run-time dependency skynet found: NO (tried pkgconfig and cmake)

subprojects/libmcpp/libraries/mcdbus/meson.build:31:2: ERROR: Problem encountered: mcdbus:use_old_shm=true 需要 skynet(仅由 conan 构建提供 ::shm 真实实现头), 当前 pkg-config 未找到 skynet。请改用 -Duse_old_shm=false(顶层同时 -Duse_shm=true), 或在 conan 环境下构建。

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

解决方案

方案一:在完整的 Conan 构建环境中编译(推荐用于整包集成)

  • 整包构建(如使用 bingo build)会自动加载 profile 文件(通常由 bmc_sdk 或 manifest 提供),其中已声明 skynet 等公共工具依赖。此时编译不会出现该错误。
  • 若您确认 ipmi_mgmt 组件已正确配置在 manifest/build/subsys/rc/bmc_core.yml 或对应 manifest.yml 的依赖列表中,整包构建应该能够正常编译该组件并集成到最终版本中。

方案二:单独编译时按错误提示添加选项

在单独构建 ipmi_mgmt 时,可尝试添加 -Duse_old_shm=false 选项,暂时绕过 skynet 的强依赖(该选项会使用其他共享内存实现):

meson setup ... -Duse_old_shm=false

或者顶层同时使用 -Duse_shm=true(取决于具体构建命令)。

方案三:更新组件代码或使用最新分支

根据社区类似问题的处理经验(参见文档块6,用户 sam_h1973 遇到相同 skynet 未找到的错误,社区回复):

“建议更新组件代码后重试,最好使用最新正在合入的分支尝试构建。如问题依然存在,建议在对应代码仓提 issue。”

请确保您使用的 ipmi_mgmt(以及 libmcpp)版本与当前 OpenUBMC 26.06 的 manifest 和 bmc_sdk 完全匹配,并已拉取最新的代码分支。

总结:您遇到的 skynet 缺失问题在整包构建中不会出现(因 profile 自动管理该依赖)。建议优先使用整包构建(bingo build)来集成 ipmi_mgmt;若需单独调试,可按错误提示添加编译选项或更新组件代码。

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

根据您提供的错误日志和上下文信息,您遇到的编译问题主要源于 ipmi_mgmt 组件在单独构建时缺少 Conan 构建环境提供的 skynet 依赖。以下是详细分析和建议。


错误原因分析

  • 报错位置出现在子项目 libmcpp 下的 libraries/mcdbus/meson.build。
  • 错误信息明确说明:mcdbus:use_old_shm=true 需要 skynet,但当前通过 pkg-config 找不到该库。
  • skynet 是 OpenUBMC 构建体系中由 profile 文件统一管理的公共构建工具依赖(参见搜索结果中的《conan2.0适配说明》)。单独编译组件时,若未正确加载 profile(或未在 Conan 环境中运行),系统无法自动提供 skynet 的头文件和库路径,导致 pkg-config 查找失败。

解决方案

方案一:在完整的 Conan 构建环境中编译(推荐用于整包集成)

  • 整包构建(如使用 bingo build)会自动加载 profile 文件(通常由 bmc_sdk 或 manifest 提供),其中已声明 skynet 等公共工具依赖。此时编译不会出现该错误。
  • 若您确认 ipmi_mgmt 组件已正确配置在 manifest/build/subsys/rc/bmc_core.yml 或对应 manifest.yml 的依赖列表中,整包构建应该能够正常编译该组件并集成到最终版本中。

方案二:单独编译时按错误提示添加选项

在单独构建 ipmi_mgmt 时,可尝试添加 -Duse_old_shm=false 选项,暂时绕过 skynet 的强依赖(该选项会使用其他共享内存实现):

meson setup ... -Duse_old_shm=false

或者顶层同时使用 -Duse_shm=true(取决于具体构建命令)。

方案三:更新组件代码或使用最新分支

根据社区类似问题的处理经验(参见文档块6,用户 sam_h1973 遇到相同 skynet 未找到的错误,社区回复):

“建议更新组件代码后重试,最好使用最新正在合入的分支尝试构建。如问题依然存在,建议在对应代码仓提 issue。”

请确保您使用的 ipmi_mgmt(以及 libmcpp)版本与当前 OpenUBMC 26.06 的 manifest 和 bmc_sdk 完全匹配,并已拉取最新的代码分支。


关于“是否可编译进整包”

  • 可以。ipmi_mgmt 作为开源组件,在正确的整包构建流程中应能正常编译并集成。
  • 需要确认 manifest.yml 或 bmc_core.yml 中已正确添加 ipmi_mgmt 的依赖声明(包括 user/channel),且 profile 文件配置正确(特别是 skynet 等工具链部分)。
  • 可参考社区 new_app 组件集成时的做法(文档块3及搜索结果9):修改 subsys/rc/bmc_core.yml 和 product/BMC/<版本>/manifest.yml 的 tosupporte 字段,并确保 bmc_sdk 版本与 manifest 匹配。

补充建议

  • 检查 Docker 环境是否完整配置了 bmc_sdk(包括 /opt/RTOS、/opt/hcc_arm64le 等目录),缺少这些会导致依赖环境不完整。
  • 如果继续遇到 libmcpp 自身相关的依赖问题(如 pkgconfig 未找到 libmcpp),可能需要确认 subprojects/libmcpp.wrap 中的版本与 manifest 一致,并启用 fallback 依赖(默认禁用,需在 meson.build 或 profile 中开启)。

总结:您遇到的 skynet 缺失问题在整包构建中不会出现(因 profile 自动管理该依赖)。建议优先使用整包构建(bingo build)来集成 ipmi_mgmt;若需单独调试,可按错误提示添加编译选项或更新组件代码。

先拉取社区主干manifest执行bingo build -t install_sdk