BMC Studio CLI (bingo)
更新时间:2025/09/23
在Gitcode上查看源码

BMC Studio CLI (bingo) 是BMC Studio的CLI命令行,常用于组建构建、产品构建等命令执行。本文档介绍bingo的具体使用方式。

构建产品包与发布包

我们构建命令目前已经集成到bingo命令中,这个命令在环境中已安装,只需要执行命令即可,我们先来看下bingo的帮助文档,这个帮助文档会在manifest仓路径(也就是产品路径)和组件仓路径显示不同,此节只讨论产品构建。

shell
# 在manifest路径下执行命令
[04:51:58 root(1110):/home/workspace/codehome/manifest]# bingo --help
conan版本: 2.13.0
Integrated commands
    build              构建出包
    publish            构建版本发布包,-sc参数指定ToSupportE编码
Misc commands
    help               获取命令帮助
    new                创建组件
    diff               获取两个产品版本间, 组件版本变更时的合并记录
    fetch              基于参数指定的单个、部分、全量组件版本拉取源代码
    config             bingo参数配置
    upgrade            升级 bingo 版本
    analysis           依赖和接口分析
    json_check         json 文件检查
Studio commands
    studio             执行bmc studio启动停止操作
    check              BMC Studio语法正确性与模型一致性检查

输入 "bingo <command> -h" 获取子命令帮助
[04:52:01 root(1110):/home/workspace/codehome/manifest]#

从上面返回的日志,可以看到我们能够使用的命令,构建产品以及发布包只使用到其中一个命令,当前build命令与publish效果相同,其余命令后续自行深入学习,输入buildhelp命令,可以看到这个命令有很多的内容,部分版本有些命令没有,但是可以构建出hpm包,对出包没有影响

shell
[04:52:01 root(1110):/home/workspace/codehome/manifest]# bingo build --help
conan版本: 2.13.0
usage: bingo [-h] [-b BOARD_NAME] [-bt BUILD_TYPE] [--stage STAGE] [--verbose] [-ucc] [-r REMOTE] [-sc SUPPORTE_CODE] [-v VERSION] [-t TARGET] [--deploy]

构建openUBMC

options:
  -h, --help            show this help message and exit
  -b BOARD_NAME, --board_name BOARD_NAME
                        单板包,可选值为build/product/<Kunpeng|...>/下的目录名
                        默认:openUBMC
                        支持的单板列表:
                        openUBMC
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:debug(调试包), release(正式包)
  --stage STAGE         包类型,可选值为: dev(调试包), rc(预发布包), stable(发布包)
                        默认:dev
  --verbose             使能conan构建详细日志打印
  -ucc, --update_conan_cache
                        全量更新本地conan缓存
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓
  -sc SUPPORTE_CODE, --supporte_code SUPPORTE_CODE
                        待发布的SupportE编码,可选值参考单板manifest.yml/tosupporte
                        默认:default
  -v VERSION, --version VERSION
                        构建版本号,不指定时从manifest.yml读取
  -t TARGET, --target TARGET
                        构建目标,请查看build/target目录, 支持的目标:
                        install_sdk
                        publish
                        personal
                        app
  --deploy              将hpm包部署至bmc设备
[04:59:33 root(1110):/home/workspace/codehome/manifest]#

构建产品包

  1. 构建hpm包 现在,开始构建一个hpm包,查看上面的help文档,可分析其具体含义,命令执行结束后,可在manifest目录下的output目录下找到构建出来的hpm

    shell
    # 进入到集成构建环境
    cd manifest
    # -t personal: 构建目标,个人构建指 hpm 包
    # -b openUBMC: 单板名,执行bingo build -h,可以看到支持哪些单板
    # -bt release: 构建类型,release正式包
    # --stage rc: 包类型,预发布包
    bingo build -t personal -b openUBMC -bt release --stage rc

    以下为列出的生成件目录下文件,其中rootfs_openUBMC.hpm即为产品包

    shell
    [05:22:48 root(1110):/home/workspace/codehome/manifest/output]# ls -l
    total 70172
    -rw-r--r--  1 root root     1349 Mar 12 17:22 openubmc.perf
    -rw-r--r--  1 root root    54813 Mar 12 17:22 package.lock
    drwxr-xr-x  5 root root     4096 Mar  7 14:32 packet
    -rw-r--r--  1 root root        0 Mar 12 17:20 prof.perf.lock
    -rw-r--r--  2 root root 70144173 Mar 12 17:22 rootfs_openUBMC.hpm
    [05:23:04 root(1110):/home/workspace/codehome/manifest/output]#
  2. 集成发布的组件

    根据章节的流程,已经了解了组件的发布,组件发布以后,我们需要集成到产品包中,具体修改方法如下

    • 第一步: 构建组件发布版本 在流程中,已经有组件的构建方法与发布方法,如果不清楚,请查看
    • 第二步: 在subsys目录下配置发布的组件版本 我们需要在subsys目录下添加新增的组件,当前组件发布只有stable版本,但仍需在rcstable目录下同时更改,这里的示例为rc版本,stable版本的修改同样如此
    yaml
    # yaml-language-server: $schema=../../schema/subsys.rc.schema.json
    dependencies:
    - conan: "rackmount/1.90.198@openubmc/stable"
    • 第三步: 在manifest.yml文件中配置添加的组件 新引入的组件,要在产品目录下配置相应的依赖,否则不会集成到产品包当中,dependencies字段中,每配置一个组件,则集成进一个组件,这里不要去填版本号,填入版本号后,更新组件版本时,则需要变更多个文件
    yaml
    dependencies:
    - conan: "huawei_secure_c"
    - conan: "kmc"
    - conan: "Signature_Verify_CBB_Library"
    - conan: "sqlite3"
    - conan: "openssh"
    • 第四步: 构建产品包 使用第1小节的构建命令,则可以构建出产品包hpm

构建发布包

构建发布包命令与上面的命令稍有差异,如下所示

shell
# 进入到集成构建环境
cd manifest
# -t publish: 构建目标,发布包
# -sc default: 发布包编码,这个编码可以在manifest.yml文件中的 tosupporte 字段中查询
# -b openUBMC: 单板名,查看帮助文档,可以看到支持哪些单板
# -bt release: 构建类型,release正式包
# --stage stable: 包类型,发布包
bingo build -t publish -sc default -b openUBMC -bt release --stage stable

执行完成以后,在output目录下会生成文件,如下为output

shell
[07:05:30 root(1110):/home/workspace/codehome/manifest/output]# tree
.
|-- openUBMC.perf
|-- package.lock
|-- packet
|   |-- openUBMC
|   |   |-- openUBMC-CMT_1.00.00.00.zip
|   `-- inner
|       |-- release
|       |   |-- package_openUBMC.lock
|-- prof.perf.lock
`-- rootfs_openUBMC.hpm

4 directories, 6 files
[07:05:31 root(1110):/home/workspace/codehome/manifest/output]#

组件构建与发布

在构建组件时,我们需要切换到组件目录,执行bingo命令,否则bingo命令不生效,这里以组件iam组件来作为示例,演示组件的构建流程。

进入到iam的源码目录,执行如下命令来查看支持的构建参数

shell
[07:16:31 root(1110):/home/workspace/codehome/iam]# bingo --help
conan版本: 2.13.0
Component commands
    build              构建出包
    deploy             将组件及其依赖部署至temp/rootfs目录
    test               构建DT.
    gen                代码自动生成,支持Lua和C语言,C组件需要在service.json中添加`"language": "c",`配置.
    git_history        获取指定开始时间与结束时间之间提交信息,并生成release note
Misc commands
    help               获取命令帮助
    new                创建组件
    config             bingo参数配置
    upgrade            升级 bingo 版本
    analysis           依赖和接口分析
    json_check         json 文件检查
Studio commands
    studio             执行bmc studio启动停止操作
    check              BMC Studio语法正确性与模型一致性检查

输入 "bingo <command> -h" 获取子命令帮助
[07:16:33 root(1110):/home/workspace/codehome/iam]#

在上面返回的结果中,我们只使用到部分,build,gen为主要使用的命令,下面主要介绍这两条命令

代码自动生成

gen命令用来自动生成代码,现在组件的代码都是使用此工具来自动生成,自动生成后才能进行构建,所以这里先讲gen命令,查看gen命令的help菜单

shell
[07:28:19 root(1110):/home/workspace/codehome/iam]# bingo gen --help
conan版本: 2.13.0
usage: bingo gen/当前只支持C和lua语言代码生成 [-h] [-v VERSION] [-r REMOTE] [-s SERVICE_FILE] [-w]

代码自动生成.

options:
  -h, --help            show this help message and exit
  -v VERSION, --version VERSION
                        use specified version
  -r REMOTE, --remote REMOTE
                        conan remote, 如不设置则默认读取本地conan配置
  -s SERVICE_FILE, --service_file SERVICE_FILE
                        Service file
  -w, --with_template   generate with template
[07:33:21 root(1110):/home/workspace/codehome/iam]#

从返回结果,可以看到这个参数结构相对比较简单,建立好模板文件,使用如下命令即可生成代码

shell
# -bt debug: 构建类型
# --stage rc: 预发布包
# 如果在mds目录下配置了model.json,则带上-w参数来进行模板生成
bingo gen -bt debug --stage rc
# 日志截取,没有发生报错,则表示自动生成成功
python3 /home/workspace/codehome/iam/temp/lua_codegen/script/template.py -d /home/workspace/codehome/iam/proto -j /home/workspace/codehome/iam/temp/lua_codegen/temp/iam/ -n iam -i /home/workspace/codehome/iam/temp/lua_codegen/temp/iam/db_json.json -f /home/workspace/codehome/iam/temp/lua_codegen/script/lua_format.py -t orm_classes.lua.mako -o /home/workspace/codehome/iam/gen/iam/orm_classes.lua
make[3]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen/templates/apps'
make[2]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen/templates'
make[1]: Leaving directory '/home/workspace/codehome/iam/temp/lua_codegen'

组建构建

build命令用来构建组件的版本包,使用help命令来看下build命令的帮助文档

shell
[07:16:33 root(1110):/home/workspace/codehome/iam]# bingo build --help
conan版本: 2.13.0
usage: bingo build [-h] [-bt BUILD_TYPE] [--stage STAGE] [-u] [-r REMOTE] [--conan2] [-nc] [-o OPTIONS] [--user USER] [-wb]

Build conan

options:
  -h, --help            show this help message and exit
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:debug, release
                        默认:debug
  --stage STAGE         组件包发布阶段, 可选: ['dev', 'pre', 'rc', 'stable']
                        默认:dev
  -u, --upload          上传组件包到conan仓
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓
  --conan2              强制使用conan2构建组件,此参数仅用于临时兼容组件conan1和conan2构建场景
  -nc, --no_cache       不使用~/.conan/data目录下的缓存包(构建前删除缓存)
  -o OPTIONS, --options OPTIONS
                        Define options values (host machine), e.g.: -o Pkg/*:with_qt=True
  --user USER           指定conan包的user字段,未指定时依次尝试读取mds/service.json的user字段,都未指定时使用'openubmc'
  -wb, --without_build  不强制源码构建组件自身
[07:20:03 root(1110):/home/workspace/codehome/iam]#

根据上面的返回结果,需要使用的参数只有其中几个,以具体实例来讲解

shell
# -b Board_A: 指定单板名,某些组件和单板名挂钩,需要指定单板名来打入某些文件,如果组件和单板无关,不带此参数
# -bt debug: 构建类型,调试包
# --stage rc: 预发布包
bingo build -b Board_A -bt debug --stage rc
# 截取部分日志放在这里
Downloading conanmanifest.txt completed [17.89k]
Downloading conaninfo.txt completed [2.97k]
Downloading conan_package.tgz completed [543.98k]
Decompressing conan_package.tgz completed [0.00k]
iam/1.20.31@openUBMC.release/rc: Package installed cb9794cb17b2f104bdddb1803a0104b29d12d75c
iam/1.20.31@openUBMC.release/rc: Downloaded package revision 35401b8fc57f5024055b6203bbd5abfe
Build successfully
[07:28:19 root(1110):/home/workspace/codehome/iam]#

在Build successfully上方,能看到编译完成的版本号,这个版本号就是生成的组件版本

组建测试

test命令用来执行组件的集成测试,单元测试,压力测试,使用help命令来看下test命令的帮助文档

shell
[07:25:33 root(1110):/home/workspace/codehome/iam]# bingo test --help
conan版本: 2.13.0
usage: bingo [-h] [-bt BUILD_TYPE] [--stage STAGE] [-r REMOTE] [--conan2] [-s] [-nc] [-o OPTIONS] [--user USER] [-as] [-wb] [-pr PROFILE] [-jit] [-ut] [-it] [-ft] [-fg] [-cnt FUZZ_COUNT] [-f TEST_FILTER] [-a APP] [--coverage_exclude COVERAGE_EXCLUDE] [--minimum] [--package_info PACKAGE_INFO]

Test component

options:
  -h, --help            show this help message and exit
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:debug, release 默认:debug
  --stage STAGE         组件包发布阶段, 可选: ['dev', 'pre', 'rc', 'stable'] 默认:dev
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓
  --conan2              强制使用conan2构建组件,此参数仅用于临时兼容组件conan1和conan2构建场景
  -s, --from_source     Build from source, include dependency component
  -nc, --no_cache       不使用~/.conan/data目录下的缓存包(构建前删除缓存)
  -o OPTIONS, --options OPTIONS
                        Define options values (host machine), e.g.: -o Pkg/*:with_qt=True
  --user USER           指定conan包的user字段,未指定时依次尝试读取mds/service.json的user字段,都未指定时使用'openubmc'
  -as, --asan           Enable address sanitizer
  -wb, --without_build  不强制源码构建组件自身
  -pr PROFILE, --profile PROFILE
                        显式指定conan构建使用的profile文件 (~/.conan/profiles目录下)别名, 默认为: 空 可选值: profile.ini, profile.dt.ini, profile.luajit.ini, armv8_release, default
  -jit, --enable_luajit
                        Enable luajit
  -ut, --unit_test      Enable unit test
  -it, --integration_test
                        Enable integration test
  -ft, --fuzz_test      Enable fuzz test
  -fg, --fuzz_gen       Generate fuzz case
  -cnt FUZZ_COUNT, --fuzz_count FUZZ_COUNT
                        Fuzz count
  -f TEST_FILTER, --test_filter TEST_FILTER
                        Run unit test with a filter
  -a APP, --app APP     App in hica
  --coverage_exclude COVERAGE_EXCLUDE
                        Specify coverage exclude file path of whitelist
  --minimum, -m         获取dt构建的最小版本
  --package_info PACKAGE_INFO, -pi PACKAGE_INFO
                        package_info 文件路径, 使用manifest配套版本dt构建, 此文件在manifest构建时会在inner目录生成

从返回结果,可以看到这个参数结构相对比较简单,使用如下命令即可执行组件测试

shell
# 集成测试
bingo test -it
# 单元测试
bingo test -ut
# 日志截取,没有发生报错,则表示测试通过
================ 开发者测试开始 ================
================ 测试 bmc_time 开始 ================
1..1
# Started on Thu Dec 12 10:24:16 2024
# Starting class: TestTimeCfg
ok     1        TestTimeCfg.test_time_intf
# Ran 1 tests in 0.005 seconds, 1 success, 0 failures
Dt 报告结果输出到 /root/bmc_time/temp/coverage/dt_result.json
================================ 构建菜单 ================================
单元测试(ut):                      True
集成测试(it):                      False
覆盖率:                           False
地址消毒:                          False
============================================================================
===>>>> 测试: bmc_time/1.60.1@openubmc.dev/dev 完成