bmc-studio使用编译问题

问题描述

我在使用bmc-studio时候发现了几个问题,目前看文档里面的工具介绍说的不太明白。

1.我在命令行终端窗口下bingo build编译的包,和在bmc-studio编译的出的包是不是一个,我bingo build编译会有task_log 而bmc-studio编译没有task_log

2.bmc-studio一键出包,这几个什么区别?

3.我用bmc-studio创建仓库的时候,采用指定文件路径创建,用了本地的路径,他仍然需要git,编译仍然中task_log仍然没有变化,编译出的结果和bingo build仍然不同。

4.我在conan添加了部件,busybox,仿照这个帖子,

能让bingo build编译的包里面含有busybox。

conan也能查看到busybox,

Found 1 pkg/version recipes matching busybox/1.34.0@openubmc/stable in openubmc_dev
openubmc_dev
busybox
busybox/1.34.0@openubmc/stable

我看这个帖子

里面说

当前Studio是会基于用户配置的最后一次配置的conan远端,也就是conan remote list列表的最后一个

我当前

root@WIN:/home/conan_remote# conan remote list
openubmc_dev: https://conan.openubmc.cn/conan_1/ [Verify SSL: False, Enabled: True]

但是完全找不到busybox,变出的包也没有。

环境信息

  • 操作系统:wsl ubuntu 24

  • 软件版本:bmc_sdk版本是25-12 如需要再添加。

  • 硬件配置:无

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

关于 BMC Studio 编译与出包问题的详细解答

根据您提出的问题,结合知识库中的 BMC StudioConanBingo CLI 和相关文档信息,现对您提出的 4 个核心问题进行系统性分析和解答。


:small_blue_diamond: 问题一:bingo build 编译的包和 BMC Studio 编译的包是否一致?为何 task_log 不同?

:white_check_mark: 回答:本质使用相同构建流程,但上下文与配置可能不同,导致输出差异。

BMC Studio 与 bingo build 命令在底层共享相同的构建系统 BMCgo/Bingo,这意味着最终调用的组件构建逻辑(如 conan create, CMake, 代码打包等)是一致的。

但关键区别在于:

对比项 bingo build (命令行) BMC Studio (图形化)
启动方式 手动在终端执行命令 通过 Web UI 触发“编译构建”或“一键出包”
构建入口 直接调用 bingo build -b openUBMC 内部封装调用类似命令,可能附加特定参数
日志机制 输出完整 task.logmanifest/temp/log/ 路径下 默认不暴露详细构建日志,或写入内部路径(如 ~/bmc_studio/var/log/
构建环境 用户当前 Shell 环境,PATH/Conan配置直接影响结果 使用预设环境变量和 Conan Profile,可能更“封闭”
参数控制 可灵活指定 -r remote, --stage, -bt 多数参数通过 UI 下拉菜单选择,灵活性受限

:pushpin: 为什么 BMC Studio 编译没有 task_log?

  • BMC Studio 的构建日志可能被定向到其专有日志目录~/bmc_studio/var/log/debug.log 或内部容器日志中。
  • 它会调用 bingo buildconan create,但不会默认显示或生成完整的 task.log,除非显式开启调试模式。
  • 如需查看详细构建过程日志,请进入 BMC Studio 的【构建日志】模块 或检查后台服务日志。

:white_check_mark: 建议验证一致性:
在命令行运行与 BMC Studio 相同条件的命令:

bingo build -b openUBMC --stage rc -r openubmc_dev --build_type release

并对比最终生成的 .hpm.bin 包内容。


:small_blue_diamond: 问题二:BMC Studio 中的“一键出包”下拉菜单中各项的区别?

您提到的菜单结构如下:

- Manifest配置
- 一键出包 ▲
  - 装箱 ▸
  - 0502TEST
  - SupportE ▸
  - Qemu

这是BMC Studio 提供的多种预设出包场景选项,对应不同的目标平台和用途。

:white_check_mark: 各项含义解析:

选项 含义说明
装箱 指完整构建可用于真实服务器刷写的 标准生产固件包(HPM 格式),打包所有组件、签名、元数据,可用于“出包并升级到BMC”功能。
0502TEST 一种特定命名规则的测试固件包格式(源自华为硬件传统),常用于实验室或转维测试阶段。其构建流程包含额外校验和打包策略,通常对应某一类硬件平台。
SupportE 构建用于支持 远程技术支持场景的专用包(Support Engineer),常包含诊断工具、调试信息、日志收集脚本等,便于故障排查。
Qemu 构建适用于 QEMU 虚拟仿真环境 的 BMC 固件包(如 rootfs.cpio),用于在无物理硬件时进行功能验证、接口调试、自动化测试等。

:light_bulb: 补充说明:

  • 这些选项本质是为 bingo build 提供了不同的参数预设(如 -sc qemu--profile qemu)。
  • 例如:
    bingo build -sc qemu     # 对应 Qemu 项
    bingo build -sc supporte # 对应 SupportE
    

:small_blue_diamond: 问题三:使用本地路径创建工作空间后,编译仍失败,且结果不同于 bingo build

:white_check_mark: 回答:“指定文件路径”方式存在兼容性限制,且未正确集成本地 Conan 配置。

原因分析:

  1. “指定文件路径”方法用途有限

    • 该方式仅用于初始化项目结构,并不等价于手动克隆仓库并运行 bingo
    • 如果路径下的 manifest 仓不完整(缺少 .git, conandata.yml, build/ 脚本等),会导致构建异常。
  2. Git 是必须依赖

    • 即使使用本地路径,BMC Studio 在执行“一键仓库部署”或“同步远程manifest”时仍需 Git 操作拉取其余子仓代码
    • 若本地路径无 .git 信息,会报错“代码同步失败!模型仓库不存在”。
  3. Conan 远端配置未被 BMC Studio 正确识别

    • 知识库文档明确指出:

      “当前 Studio 是会基于用户配置的最后一次配置的 conan 远端,也就是 conan remote list 列表的最后一个”

    • 您的 conan remote list 输出中只有 openubmc_dev,但此仓库很可能 未同步您自定义的 busybox 包
  4. 构建缓存隔离问题

    • BMC Studio 可能使用独立的 Conan 缓存或 Docker 环境,无法访问您本地 ~/.conan 中已构建的 busybox 包。
    • 导致它在解析依赖时找不到 busybox,从而忽略该组件。

:white_check_mark: 解决方案建议:

  1. 改用“导入 Manifest”方式,并确保 Git 地址有效、分支存在;
  2. 在命令行先手动完成一次 bingo build,确保环境完整;
  3. 检查 BMC Studio 是否能正确识别 conan user -lconan remote list 配置;
  4. 查看 ~/bmc_studio/var/log/debug.log 看是否有如下错误:
    • Package busybox/1.34.0@openubmc/stable not found
    • ERROR: Missing prebuilt package

:small_blue_diamond: 问题四:自定义 busybox 包在 conan search 中可见,但在 BMC Studio 出包中不生效的原因?

:white_check_mark: 核心原因:Conan 包可见 ≠ 构建流程自动使用 —— 必须显式声明依赖!

虽然您通过社区方式构建并上传了 busybox/1.34.0@openubmc/stable,并在 conan search 中可以看到:

Found 1 pkg/version recipes matching busybox/1.34.0@openubmc/stable in openubmc_dev

但这仅表示包存在于远程仓库,不代表它会被自动包含在固件中。

:cross_mark: 常见误解纠正:

:cross_mark: “只要 conan 里有这个包,出包就会带上”
:white_check_mark: 正确理解:必须有组件在 conanfile.pyservice.json 中显式依赖它,才会触发下载和集成。

:white_check_mark: 如何让 busybox 被包含进固件?

:wrench: 方法一:修改系统组件依赖(推荐)

编辑 openubmc/rootfsplatform-initramfs 等基础组件的 conanfile.py,添加:

def requirements(self):
    self.requires("busybox/1.34.0@openubmc/stable")

或者在 service.json 中添加构建依赖。

:wrench: 方法二:创建自定义组件引用 busybox

新建一个 dummy 组件:

{
  "name": "custom-tools",
  "version": "1.0.0",
  "build_requires": ["busybox/1.34.0@openubmc/stable"]
}

并在 manifest.yml 中将其加入产品构建列表。

:wrench: 方法三:使用 bingo build 时强制包含

bingo build -o busybox:with_telnet=True

前提是 busybox 的 conanfile 支持该 option。


:white_check_mark: 总结与建议

问题 关键结论 解决方案
1 bingo build 与 BMC Studio 用同一工具链,但环境隔离导致输出不同 统一构建环境,检查日志路径
2 “一键出包”菜单为不同目标平台预设出包流程 选择对应目标平台(如 Qemu / SupportE)
3 “指定文件路径”不能绕过 Git 和 Conan 完整性要求 改用标准 Git 导入方式,确保 .git 存在
4 仅上传 busybox 包不足以使其出现在固件中 必须在某组件中显式声明依赖

:repeat_button: 终极建议验证步骤:

  1. 在命令行运行完整构建:
    bingo build -b openUBMC -r openubmc_dev --stage rc
    
  2. 确认 busybox 是否被打包进去(解压 .hpm 检查 /bin/busybox);
  3. 再在 BMC Studio 中选择“Qemu”或“装箱”出包,比对最终产物;
  4. 若仍缺失,检查 debug.log 看是否报 Package not found

:pushpin: 参考文档链接:

如需进一步排查,请提供:

  • ~/bmc_studio/var/log/debug.log 片段
  • manifest/temp/log/task.log(如有)
  • conan installconan graph info 的输出

我们将持续协助定位问题。

相关链接:

  1. bmc studio使用问题
  2. 新增一个组件,通过CLI进行模型代码生成时报错
  3. bmc studio工具使用问题
  4. bingo build报错,任务 work.build.conan 执行失败
  5. openUBMC
  1. 是一致的。理论上使用bmc studio编译也会产生task_log,可能是您没有找到正确的manifest?
    假设您使用的bmc studio工作空间名为yourWorkspace,那么task_log会生成在~/bmc_studio/workspaces/yourWorkspace/manifest/temp/log中,请您查看一下是否存在。
  2. ai说的挺好的
  3. 通过指定文件路径创建工作空间也会在~/bmc_studio/workspaces中生成一个文件夹,请根据您的工作空间名查看。
  4. 请检查conan包配置是否正确

您好,如果我们的回复解决了您的问题,麻烦您点一下解决方案。如果还有不解的地方,也欢迎您继续不耻下问,我们很乐意为您解答。

我依然不知道,为什么bmc-studio帮不上我的本地mainfest

通过本地manifest在bmc studio中创建工作空间会在~/bmc_studio/workspaces中生成一个文件夹,文件夹名为您的工作空间名。然后在这个文件夹中会生成一个新的manifest,后续bmc studio处理业务都会基于这个新的manifest,并不关注您本地的旧manifest。
请您查看一下~/bmc_studio/workspaces/您的工作空间名这个路径,是否存在一个manifest文件夹

那在bmc-studio里面如何添加组件呢?我在本地的mainfest加了组件,在这个目录下运行了bmc-studio,然后没有组件,我需要再你说的目录下同样在操作一遍吗?

是的,后续您可以只关注那个目录下的manifest

如果没关系的话,那为什么,选择仓库的时候让我选择本地路径。这好让人混淆呀。

可能我们的页面描述确实会给您造成一些误解,在此对您道歉。通过三种方式创建的工作空间都是位于我之前提到的目录下的,本质上都是导入一个manifest,只不过一种是通过git导入,一种是通过本地导入。