bingo
更新时间: 2026/07/25
在Gitcode上查看源码

bingo

版本信息

项目内容
组件版本0.7.58
首发版本0.1.0
文档作者马思雨
最后更新2026-07-24

1. 组件概述

1.1 组件简介

bingo 是 openUBMC BMC 开发的工程工具和最佳实践的承载者,提供一站式命令行工具,降低组件开发成本。bingo 作为 openUBMC 工程体系的核心枢纽,统一管理组件创建、代码自动生成、构建出包、开发者测试、依赖分析、版本发布等 BMC 开发全流程,是 openUBMC 开发者日常使用的核心工具。

1.2 解决什么问题

bingo 解决 BMC 软件开发中的工程效率问题:将分散的构建脚本、代码生成工具、依赖管理、测试框架整合为统一 CLI,开发者无需手动维护 Conan 配置、交叉编译 profile、MDS 模型到代码的映射等繁琐工程细节,通过一条 bingo 命令即可完成从建模到出包的端到端流程。

1.3 核心功能

  • 核心功能一:组件全生命周期管理——通过 bingo new 创建组件脚手架、bingo gen 代码自动生成(Lua/C)、bingo build 构建、bingo test 测试、bingo deploy 部署,覆盖组件从创建到发布的完整流程
  • 核心功能二:产品集成构建——在 manifest 仓库中执行 bingo build,基于 Conan 依赖体系自动拉取组件、交叉编译、组装 rootfs 并生成 HPM 固件包,支持多单板、多构建类型和发布阶段
  • 核心功能三:工程辅助能力——包括依赖与接口分析(bingo analysis)、版本差异追踪(bingo diff)、源码拉取(bingo fetch)、参数配置(bingo config)、版本升级(bingo upgrade)、BMC Studio 管控(bingo studio)和 Skill 管理(bingo skill

1.4 关键术语表

术语解释
Manifest产品仓库,包含 manifest.yml 配置、组件依赖声明和构建脚本,bingo 识别 manifest 仓后启用 Integrated commands
Component组件仓库,包含 mds/service.json 配置,bingo 识别组件仓后启用 Component commands
ConanC/C++ 包管理器,bingo 依赖 Conan 完成组件依赖解析、下载和交叉编译,支持 Conan 1.0 和 2.0 双版本
MDS模型定义服务(Model Definition Service),组件通过 mds/service.json 描述服务模型,bingo gen 依据此模型生成代码
HPM固件升级包格式,bingo build 在 manifest 仓最终输出的产品包为 rootfs_<单板名>.hpm
DT开发者测试(Developer Test),bingo test 支持单元测试(UT)、集成测试(IT)和模糊测试(FT)
ProfileConan 编译配置文件,描述目标平台(如 ARM64 交叉编译)的构建参数,bingo 自动管理 profile 初始化与同步
CSR组件服务资源(Component Service Resource),bingo check 用于校验 CSR 语法的正确性与模型一致性

1.5 外部交互边界图

bingo 与以下外部系统交互:

  • Conan 远程仓库:拉取/上传组件包,解析依赖关系
  • Git 仓库:通过 gitpython 拉取源码、获取版本信息和分支差异
  • BMC Studio:启动/停止建模服务,执行 CSR 语法检查
  • PyPI:bingo 自身的安装和升级源(openubmc-bingo 包)
  • Skills Marketplace(GitCode):同步 AI agent 技能到本地
  • HPM 签名服务:支持 SignServer 签名、服务器签名和自签名三种模式
  • 板子部署:通过 SFTP/HTTPS 将产品包部署到目标 BMC 设备

2. API 使用说明与示例

2.1 bingo build

功能说明

构建组件包或产品 HPM 包。bingo 具有配置探测能力:在组件目录执行时构建组件包,在 manifest 目录执行时构建产品集成包。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

组件构建参数:

参数名方向类型描述取值范围
-bt / --build_type输入str构建类型,默认:debugdebug, release
--stage输入str组件包发布阶段,默认:devdev, pre, rc, stable
-u / --upload输入flag上传组件包到 Conan 仓true/false
-r / --remote输入strConan 仓别名conan remote list 已配置的仓
--conan2输入flag强制使用 Conan 2 构建组件true/false
-nc / --no_cache输入flag强制更新 Conan 缓存依赖true/false
-o / --options输入strConan 构建选项如 Pkg/*:with_qt=True
--user输入strConan 包 user 字段,未指定时依次读取 mds/service.json,都未指定时使用 openubmc任意合法 user
-wb / --without_build输入flag不强制源码构建组件自身true/false
--ccache输入flag使用 ccache 加速 C/C++ 编译true/false

产品构建参数:

参数名方向类型描述取值范围
-b / --board_name输入str单板包,默认:openUBMCopenUBMC_ast2600, openUBMC_1712, openUBMC 等
-bt / --build_type输入str构建类型debug(调试包), release(正式包)
--stage输入str包类型,默认:devdev(调试包), rc(预发布包), stable(发布包)
--verbose输入flag使能 Conan 构建详细日志打印true/false
-ucc / --update_conan_cache输入flag全量更新本地 Conan 缓存true/false
-r / --remote输入strConan 仓别名conan remote list 已配置的仓
-z / --zip_code输入str0502 编码参考单板 manifest.yml/manufacture
-sc / --supporte_code输入str待发布的 SupportE 编码参考单板 manifest.yml/tosupporte
--ccache输入flag使用 ccache 加速 C/C++ 编译true/false
--debug_platform_path输入str联调整包路径任意合法路径
--signature_type输入str固件签名类型rsa4096, sm2
-v / --version输入str构建版本号,不指定时从 manifest.yml 读取任意合法版本号
-t / --target输入str构建目标install_sdk, personal, app, publish
--deploy输入flag将 HPM 包部署至 BMC 设备true/false

返回值与异常

返回值含义触发条件处理建议
0成功构建正常完成
-1失败当前目录不是合法组件/manifest 仓、参数非法或内部错误检查当前路径是否包含 .bmcgo/config 或 mds/service.json

应用场景

  • 在组件源码目录构建组件 Conan 包并上传到远端仓库
  • 在 manifest 仓库构建产品 HPM 包或发布包
  • 开发调试阶段使用 -bt debug --stage dev 快速构建
  • 正式发布阶段使用 -bt release --stage stable 构建正式包

限制条件

  • 必须在合法组件目录(包含 mds/service.json)或 manifest 目录(包含 .bmcgo/config)下执行
  • 组件构建和产品构建互斥,bingo 根据目录类型自动切换
  • 多个 bingo build 进程在同一 manifest 下并发执行会被互斥锁阻止
  • Conan 版本需要与组件/产品配置匹配(1.0 或 2.0),bingo 会自动检测并切换

调试示例

命令行调试

组件构建:

bash
bingo build -bt debug --stage rc

产品 HPM 包构建:

bash
bingo build -t personal -b openUBMC -bt release --stage rc

产品发布包构建:

bash
bingo build -t publish -b openUBMC -bt release --stage stable --signature_type sm2

2.2 bingo gen

功能说明

代码自动生成,支持 Lua 和 C 语言。根据 MDS 模型定义自动生成服务端/客户端代码框架,大幅减少手工编码量。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-v / --version输入str指定版本号任意合法版本号
-r / --remote输入strConan 远端仓,如不设置则默认读取本地 Conan 配置conan remote list 已配置的仓
-s / --service_file输入strService 文件路径任意合法路径
-w / --with_template输入flag生成时包含模板文件true/false

返回值与异常

返回值含义触发条件处理建议
0成功代码生成正常完成
-1失败模型文件缺失或格式错误检查 mds/service.json 和 model.json 是否存在且格式正确

应用场景

  • 新组件创建后首次生成代码框架
  • MDS 模型变更后重新生成代码以同步接口定义
  • 支持 C、C++ 和 Lua 语言代码生成,C/C++ 组件需在 service.json 中配置 "language" 字段

限制条件

  • 必须在组件目录下执行
  • C/C++ 组件需要在 service.json 中配置 "language" 字段
  • 生成代码会覆盖 gen 目录下的已有文件,手工修改的代码应放在非 gen 目录

调试示例

命令行调试
bash
bingo gen
# 指定 service 文件路径生成代码
bingo gen -s mds/service.json
# 生成时包含模板文件
bingo gen -w

2.3 bingo test

功能说明

执行组件开发者测试(DT),支持单元测试、集成测试、模糊测试、Mock 测试和 ASAN 内存检测。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-bt / --build_type输入str构建类型,默认:debugdebug, release
--stage输入str组件包发布阶段,默认:devdev, pre, rc, stable
-r / --remote输入strConan 仓别名conan remote list 已配置的仓
--conan2输入flag强制使用 Conan 2 构建组件true/false
-s / --from_source输入flag从源码构建,包含依赖组件true/false
-nc / --no_cache输入flag强制更新 Conan 缓存依赖true/false
-o / --options输入strConan 构建选项如 Pkg/*:with_qt=True
--user输入strConan 包 user 字段,未指定时依次读取 mds/service.json,都未指定时使用 openubmc任意合法 user
-as / --asan输入flag使能 Address Sanitizertrue/false
-wb / --without_build输入flag不强制源码构建组件自身true/false
-pr / --profile输入strConan 构建使用的 profile,默认为空profile_oee.ini, default, profile.luajit.ini, profile.ini, profile.dt.ini
-jit / --enable_luajit输入flag使能 LuaJITtrue/false
--ccache输入flag使用 ccache 加速 C/C++ 编译true/false
-ut / --unit_test输入flag执行单元测试true/false
-it / --integration_test输入flag执行集成测试true/false
-ft / --fuzz_test输入flag执行模糊测试true/false
-fg / --fuzz_gen输入flag生成模糊测试用例true/false
-mt / --mock_test输入flag执行 Mock 测试true/false
-mg / --mock_gen输入flag生成 Mock 用例true/false
-lf / --log_file输入str监控日志文件目录路径任意合法路径
-cnt / --fuzz_count输入str模糊测试次数整数值
-f / --test_filter输入str单元测试过滤器LuaUnit 过滤表达式
-a / --app输入strhica 中的 App任意合法 App 名
--coverage_exclude输入str覆盖率排除文件路径(白名单)任意合法路径
--minimum / -m输入flag获取 DT 构建的最小版本true/false
-pi / --package_info输入strpackage_info 文件路径,manifest 构建时在 inner 目录生成任意合法路径

返回值与异常

返回值含义触发条件处理建议
0成功所有测试通过
-1失败测试失败或组件无效检查测试用例是否正确、组件 mds/service.json 是否存在

应用场景

  • 组件开发过程中执行单元测试验证功能正确性
  • 代码提交前执行集成测试验证接口行为
  • 使用模糊测试发现潜在安全漏洞
  • 使用 Mock 测试隔离依赖组件进行局部验证
  • 使用 ASAN(-as)检测内存错误

限制条件

  • 必须在合法组件目录下执行(包含 mds/service.json)
  • 测试默认会先构建组件,如需跳过构建可使用 -wb 参数
  • 使用 ASAN 测试需添加 -as 参数
  • 模糊测试用例可通过 -fg 生成,通过 -ft 执行

调试示例

命令行调试
bash
# 单元测试
bingo test -ut
# 集成测试
bingo test -it
# 不重新构建直接测试
bingo test -ut -wb
# ASAN 内存检测
bingo test -ut -as
# Mock 测试
bingo test -mt
# 生成模糊测试用例并执行
bingo test -fg && bingo test -ft

2.4 bingo new

功能说明

创建新的 openUBMC 组件,自动生成组件脚手架代码和目录结构。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-n / --name输入str指定组件名(必填)任意合法目录名
-t / --type输入str指定组件类型,默认:applicationapplication
-l / --language输入str指定组件编程语言,默认:lualua
-conan / --conan_version输入str指定组件支持的 Conan 版本,默认:1.01.0, 2.0

返回值与异常

返回值含义触发条件处理建议
0成功组件创建完成
-1失败当前目录已存在同名子目录或选项无效删除同名目录或修正选项

应用场景

  • 开发新的 openUBMC 业务组件
  • 快速搭建包含 MDS 模型、构建脚本、测试框架的标准组件框架

限制条件

  • 当前目录下不能已存在同名子目录
  • 目前仅支持 Lua 语言和 application 类型

调试示例

命令行调试
bash
bingo new -n my_component -t application -l lua -conan 1.0
# 使用 Conan 2.0 模板
bingo new -n my_component -t application -l lua -conan 2.0

2.5 bingo deploy

功能说明

将组件及其依赖部署至 temp/rootfs 目录,先构建再部署。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

与 bingo build 组件构建参数一致。

返回值与异常

返回值含义触发条件处理建议
0成功构建并部署完成
-1失败组件无效(缺少 mds/service.json)检查当前目录是否为合法组件

应用场景

  • 本地调试时将组件部署到 temp/rootfs 目录模拟运行环境
  • 验证组件在目标文件系统中的安装布局

调试示例

命令行调试
bash
bingo deploy -bt debug --stage dev

2.6 bingo analysis

功能说明

依赖和接口分析,支持组件和 manifest 两个级别,用于理解组件间依赖关系和接口调用链。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-r / --remote输入str指定 Conan 远端conan remote list 已配置的仓
--rebuild输入flag分析前重新构建true/false
--out_dir输入str分析结果输出目录任意合法路径
--lock_file输入strmanifest lock 文件路径任意合法路径
-b / --board_name输入str单板名,参考 manifest/build/product 目录manifest/build/product 下的目录名

调试示例

命令行调试
bash
bingo analysis -b openUBMC

2.7 bingo fetch

功能说明

基于参数指定的单个、部分或全量组件版本拉取源代码。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-b / --board_name输入str指定单板获取配套全量源码,默认:openUBMCbuild/product 目录下的单板名
--manifest_yml输入str指定 manifest.yml 文件获取源码任意合法路径
-pi / --package_info输入str通过组件包名及版本拉取单个组件源码,或通过配置文件拉取部分组件源码package/version@user/channel 或 yml/文本配置文件路径
-sys / --subsystem输入str根据平台获取源码opensource, public, framework, bmc_core, security, hardware, ras, energy, om, interface, product_extension, customer_extension
--stage输入str包类型,默认:stablerc, stable
-a / --all输入flag拉取全部 Conan 代码true/false
-p / --path输入str指定拉取源代码的存放路径,默认:./source_code任意合法路径
-r / --remote输入strConan 仓别名conan remote list 已配置的仓

调试示例

命令行调试
bash
# 拉取单个组件
bingo fetch -pi iam/1.20.31@openUBMC.release/rc
# 拉取全量组件
bingo fetch --all
# 指定单板拉取配套源码
bingo fetch -b openUBMC
# 根据平台拉取源码
bingo fetch -sys bmc_core

2.8 bingo diff

功能说明

获取两个产品版本间组件版本变更时的合并记录。

属性内容
首发版本0.5.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
commit id before输入str前一个 commit ID(位置参数)Git commit hash
commit id after输入str后一个 commit ID(位置参数)Git commit hash

调试示例

命令行调试
bash
bingo diff abc123 def456

2.9 bingo config

功能说明

bingo 参数配置,支持代理、签名、部署、插件等运行参数的持久化管理。

属性内容
首发版本0.5.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-l / --list输入flag列出所有配置true/false
--unset输入flag取消配置参数true/false
--local输入flag本地配置模式(写入 .bmcgo/config)true/false

通过 bingo config <section>.<key>=<value> 格式设置配置项。可用配置项包括:

配置项描述取值范围
env.http_proxybingo 使用的 http_proxyURL 或空
env.https_proxybingo 使用的 https_proxyURL 或空
env.ftp_proxybingo 使用的 ftp_proxyURL 或空
env.no_proxybingo 使用的 no_proxy域名/IP 列表
env.timestamp_sign_serverjar 文件签名的时间戳签名服务器URL 或空
env.jarsigner_http_proxyJarSigner HTTP 代理URL 或空
env.json_checker检查 json 文件的工具工具名或路径
env.hpm_signerHPM 重签名工具工具名或路径
env.plugins_path插件地址,默认 ~/.bmcgo/plugins路径
deploy-host.porthttps 端口号,默认 443端口号
deploy-host.username部署用户名任意合法用户名
deploy-host.password部署密码任意合法密码(明文存储,请注意安全)
skill.sync技能自动同步开关,默认 truetrue, false

调试示例

命令行调试
bash
# 关闭技能自动同步
bingo config skill.sync=false
# 设置代理
bingo config env.http_proxy=http://proxy:8080
# 查看生效配置
bingo config -l
# 取消全局配置
bingo config --unset env.http_proxy
# 设置本地配置
bingo config --local env.http_proxy=http://proxy:8080
# 设置部署配置
bingo config deploy-192.168.1.1.port=443

2.10 bingo upgrade

功能说明

升级 bingo 自身版本,支持升级到最新版本、指定版本和版本范围。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-v / --version输入str目标版本号bingo=latest, bingo=<版本号>, bingo>=<版本号>
-f / --force输入flag跳过确认,直接安装true/false
-l / --list输入flag列出可安装版本true/false

调试示例

命令行调试
bash
# 升级到最新版本
bingo upgrade
# 升级到指定版本
bingo upgrade --version bingo=0.7.50
# 列出可安装版本
bingo upgrade -l

2.11 bingo studio

功能说明

执行 BMC Studio 启动/停止操作,用于建模服务的管控。

属性内容
首发版本0.1.0
废弃状态正常可用

调试示例

命令行调试
bash
bingo studio start
bingo studio stop

2.12 bingo check

功能说明

CSR 语法正确性与模型一致性检查,用于验证组件服务资源的合规性。

属性内容
首发版本0.1.0
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
-b / --board_name输入str指定单板,默认:openUBMCbuild/product 目录下的单板名
--stage输入str包类型,默认:stablerc, stable
-r / --remote输入strConan 仓别名conan remote list 已配置的仓
--csr-format输入strCSR 检查结果输出格式,默认:humanhuman, json, junit
--no-csr-incremental输入flag关闭 CSR 增量检查,对全仓库执行全量检查true/false

调试示例

命令行调试
bash
bingo check
# 指定输出格式为 json
bingo check --csr-format json
# 全量检查
bingo check --no-csr-incremental

2.13 bingo skill

功能说明

技能管理,用于从 GitCode Skills Marketplace 同步和管理 AI agent 技能到本地环境。

属性内容
首发版本0.7.0
废弃状态正常可用

调试示例

命令行调试
bash
bingo skill sync

3. 组件扩展案例

3.1 扩展能力概述

bingo 提供功能模块动态加载机制,开发者可通过在 bmcgo/functional/ 目录下编写 Python 模块来扩展 bingo 命令。每个功能模块需实现 if_available(可用性检查)、command_info(命令元信息)和 BmcgoCommand(命令执行类)三个接口,bingo CLI 在启动时自动扫描并注册符合条件的命令。

3.2 扩展点说明

扩展点位于 bmcgo/functional/ 目录,bingo 在初始化时通过 _load_functional 方法扫描该目录下所有 .py 文件(以 _ 开头的除外),动态导入并注册到对应命令组(Misc/Component/Integrated/Studio/Conan Index/SDK)中。

3.3 二次开发指导

步骤一:创建功能模块文件

bmcgo/functional/ 目录下创建新的 .py 文件,如 my_command.py

步骤二:实现三个必须接口

  • if_available(bconfig: BmcgoConfig):返回布尔值,控制命令是否在当前环境下显示
  • command_info: CommandInfo:定义命令组、名称、描述、是否隐藏和帮助信息
  • class BmcgoCommand:实现命令执行逻辑,构造函数接收 bconfigargsrun() 方法执行具体操作

示例代码

python
from bmcgo import misc
from bmcgo.bmcgo_config import BmcgoConfig
from bmcgo.utils.tools import Tools

tools = Tools("my_command")
log = tools.log

command_info: misc.CommandInfo = misc.CommandInfo(
    group=misc.GRP_MISC,
    name="mycmd",
    description=["我的自定义命令"],
    hidden=False
)

def if_available(bconfig: BmcgoConfig):
    return True

class BmcgoCommand:
    def __init__(self, bconfig: BmcgoConfig, *args):
        self.bconfig = bconfig
        log.info("自定义命令执行")

    def run(self):
        log.success("自定义命令完成")
        return 0

验证方法

  1. 在 bingo 源码目录执行 sh install_local.sh 安装到本地
  2. 在任意 bingo 项目目录执行 bingo help,检查是否出现新命令
  3. 执行 bingo mycmd 验证命令逻辑是否正确

注意事项

  • 功能模块文件不能以 _ 开头
  • 必须实现 if_availablecommand_infoBmcgoCommand 三个接口,否则 bingo 会跳过该模块
  • command_info.group 必须属于已有命令组(Misc commands、Component commands、Integrated commands、Studio commands、Conan Index commands、SDK commands)
  • 新增功能模块后需重新安装 bingo(sh install_local.sh)才能生效

4. 日志说明

4.1 一键日志收集

文件路径内容说明
~/.bmcgo_log/bingo 运行时日志缓存目录,每次执行前自动清理并重建
temp/log/组件构建和测试过程中产生的详细日志
output/openubmc.perf产品构建性能分析数据
output/package.lock构建依赖锁定文件

4.2 关键日志信息

日志片段日志级别含义解读建议处理动作
构建成功INFObingo build 命令正常完成无需处理
注意:检测到当前目录即不是合法的组件(Component)目录也不是合法的产品(Manifest)目录ERROR当前执行目录未被 bingo 识别为有效项目切换到包含 .bmcgo/config 或 mds/service.json 的目录
检测到依赖conan2.0但仅安装了conan1.0WARNConan 版本不匹配bingo 会自动安装正确版本,重新执行命令即可
未检测到/opt/RTOS目录,可能未安装构建工具INFO缺少交叉编译工具链执行 init.py 或 bingo build 安装构建工具
检测到环境设置了https_proxy代理WARN代理可能导致网络资源访问失败设置 no_proxy 或取消代理
Build successfullyINFO组件 Conan 包构建成功无需处理
当前skill自动更新状态已关闭INFOSkill 同步功能被禁用执行 bingo config skill.sync=true 开启
构建已退出, 退出码为: NERROR命令执行异常退出检查退出码含义和输入参数

4.3 日志级别控制

通过环境变量 LOG 控制日志详细程度:

LOG 值日志级别用途
不设置INFO(简化格式)日常使用
infoINFO(带文件名和行号)问题排查
debugDEBUG详细调试
warnWARNING仅警告和错误
errorERROR仅错误

使用方式:

bash
export LOG=debug && bingo build

5. 问题定界指南

5.1 典型问题定界

现象描述是否为本组件问题判断依据关键证据收集方法
bingo build 报错"不是合法组件或产品目录"bingo 根据目录下的配置文件识别项目类型检查当前目录是否包含 .bmcgo/config 或 mds/service.json
bingo build Conan 包下载失败网络或 Conan 仓问题检查 conan remote list,测试 conan install,检查代理配置
bingo gen 代码生成报错模型文件格式错误或模板引擎异常查看 temp/lua_codegen 日志,检查 mds/service.json 和 model.json 格式
bingo test 测试失败通常是组件业务逻辑问题查看测试输出和 temp/coverage/dt_result.json
HPM 包签名失败签名服务或证书配置问题检查 .bmcgo/config 中的签名配置和证书文件
bingo 命令未显示预期子命令bingo 根据项目类型动态显示命令检查 .bmcgo/config 是否正确配置 manifest/component 字段
Conan 版本冲突bingo Conan 版本自动切换失败查看 conan --version,检查 conanfile.py 的 required_conan_version

5.2 错误码速查表

错误码含义可能原因排查建议
-1一般性失败参数非法、目录无效、内部异常查看 ERROR 日志,检查执行目录和参数
1系统退出命令执行过程中触发 SystemExit检查子命令返回码
0成功正常完成无需处理
CommandNotFoundException命令未找到输入了 bingo 不支持的命令执行 bingo help 查看可用命令
NotIntegrateException非集成环境在非 manifest 仓执行了集成构建命令切换到 manifest 仓库目录
ConfigException配置错误命令组不匹配或配置文件格式错误检查 .bmcgo/config 配置
ParameterException参数错误命令行参数不合法执行 bingo <command> -h 查看参数说明

5.3 调试方法

开启调试日志

bash
export LOG=debug
bingo build -bt debug --stage dev

复现问题方法

  1. 前置条件设置:确保 bingo 已正确安装(pip3 install openubmc-bingo),在目标目录下有 .bmcgo/config 或 mds/service.json
  2. 操作步骤:设置 export LOG=debug,执行目标 bingo 命令
  3. 预期现象:命令成功完成或输出详细错误信息定位到具体代码行

VSCode 调试

bingo 提供了 VSCode 调试脚本 debug.py,修改其中的配置后可直接在 VSCode 中断点调试:

python
# debug.py
DEBUG_TARGET_RELATIVE_PATH = "."      # 调试目标目录
DEBUG_COMMAND = "bingo help"           # 需调试的命令

6. 常见问题解答

Q1:bingo help 未显示预期命令

  • 问题描述:在某个目录执行 bingo help,预期出现的命令未显示
  • 一句话答案:bingo 根据目录下的配置文件动态显示可用命令
  • 根因说明:bingo 通过检测 .bmcgo/config 或 mds/service.json 判断项目类型,只显示对应类型的命令组
  • 解决方案:确认当前目录包含正确的配置文件,manifest 仓需要 .bmcgo/config 中配置 manifest.folder,组件仓需要 mds/service.json
  • 适用版本:所有版本

Q2:Conan 版本不匹配导致构建失败

  • 问题描述:bingo build 报错 Conan 版本不匹配
  • 一句话答案:bingo 会自动检测并切换 Conan 版本
  • 根因说明:组件 conanfile.py 的 required_conan_version 或 manifest 的 conan.version 配置与当前安装的 Conan 版本不一致
  • 解决方案:bingo 会自动安装正确版本并提示重新执行,按提示操作即可
  • 适用版本:所有版本

Q3:bingo build 构建速度慢

  • 问题描述:bingo build 执行时间过长
  • 一句话答案:利用 Conan 缓存和增量构建加速
  • 根因说明:全量构建每次都重新编译所有依赖,Conan 缓存未启用
  • 解决方案:避免使用 -nc(no_cache)参数,确保 ~/.conan/data 缓存目录正常;产品构建使用 -ucc 更新缓存而非全量重建
  • 适用版本:所有版本

Q4:bingo gen 后手工代码被覆盖

  • 问题描述:执行 bingo gen 后之前手写的代码被覆盖
  • 一句话答案:手工代码不应放在 gen 目录下
  • 根因说明:bingo gen 输出到 gen 目录,每次执行会覆盖该目录内容
  • 解决方案:将手工编写的业务逻辑代码放在 gen 目录之外(如 src/lualib/lib),仅通过 gen 生成框架代码
  • 适用版本:所有版本

Q5:bingo 升级失败

  • 问题描述:执行 bingo upgrade 报错
  • 一句话答案:检查 pip3 网络和权限
  • 根因说明:pip3 安装失败通常由网络不通、PyPI 源不可达或权限不足导致
  • 解决方案:配置正确的 pip 源和代理(bingo config env.http_proxy),或使用 APT 源安装(apt install openubmc-bingo
  • 适用版本:所有版本

附录

附录A 参考资料

附录B 修订记录

版本日期修订人修订内容
v1.02026-07-24openUBMC初始版本创建