BMC Studio CLI (bingo)
更新时间:2024/12/27
在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
Integrated commands
    build              构建出包
    publish            构建版本发布包,-sc参数指定ToSupportE编码,-z参数指定ToGPD生产装备编码
    qemu               创建仿真环境,运行构建的产品包
    fetch              基于参数指定的组件版本拉取全量代码
Misc commands
    help               获取命令帮助

输入"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
构建BMC

options:
  -h, --help            show this help message and exit
  -b BOARD_NAME, --board_name BOARD_NAME
                        单板包,可选值为build/product/|...>/下的目录名
                        默认:openUBMC
                        支持的单板列表:
                        openUBMC
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:debug(调试包), release(正式包), dt(开发者测试包)
  --stage STAGE         包类型,可选值为: dev(调试包), rc(预发布包), stable(发布包)
                        默认:dev
  --verbose             使能conan构建详细日志打印
  -ucc, --update_conan_cache
                        全量更新本地conan缓存
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓
                        默认: openubmc_dev
  -sc SUPPORTE_CODE, --supporte_code SUPPORTE_CODE
                        待发布的SupportE编码,可选值参考单板manifest.yml/tosupporte
                        默认:default
  -q, --enable_qemu     QEMU打包使能
  -qi, --qemu_in        QEMU使能,自动拉起qemu环境
  -as, --asan           Enable address sanitizer
  -v VERSION, --version VERSION
                        构建版本号,不指定时从manifest.yml读取
  -t TARGET, --target TARGET
                        构建目标,请查看build/target目录, 支持的目标:
                        personal
                        publish
[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目录下添加新增的组件,组件属于什么类型,则添加到相应类型下,subsys目录下有rcstable区分,组件发布对应的类型并在rcstable目录下同时更改,这里的示例为rc版本,stable版本后缀要更新为stable
    yaml
    # yaml-language-server: $schema=../../schema/subsys.rc.schema.json
    dependencies:
    - conan: "rackmount/1.20.97@openUBMC.release/rc"
    - conan: "Kunpeng/1.10.2@openUBMC.release/rc"
    • 第三步: 在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
Component commands
    build              构建出包
    deploy             将组件及其依赖部署至temp/rootfs目录
    test               构建DT.
    gen                代码自动生成,支持Lua和C语言,C组件需要在service.json中添加`"language": "c",`配置.
Misc commands
    help               获取命令帮助

输入"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
usage: bingo gen/当前只支持C和lua语言代码生成 [-h] [-v VERSION] [-w]

代码自动生成.

options:
  -h, --help            show this help message and exit
  -v VERSION, --version VERSION
                        use specified version
  -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
usage: bingo [-h] [-b BOARD_NAME] [-bt BUILD_TYPE] [--stage STAGE] [-u] [-r REMOTE] [-s] [-nc] [-o OPTIONS] [--user USER] [--summary] [--minimum]
             [--package_info PACKAGE_INFO]

component dt different version

options:
  -h, --help            show this help message and exit
  -b BOARD_NAME, --board_name BOARD_NAME
                        支持的单板名,请参考manifest/build/product目录
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:dt,debug,release 默认:debug
  --stage STAGE         组件包发布阶段, 可选: dev(developer), pre, rc, stable 默认:dev
  -u, --upload          上传组件包到conan仓
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓 默认: openubmc_dev
  -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字段,尝试从/etc/bmcgo.conf文件读取conan.user字段,否则由程序管理
  --summary             打印conan构建详细日志,默认:打印简要信息
  --minimum, -m         获取 dt 构建的最小版本
  --package_info PACKAGE_INFO, -pi PACKAGE_INFO
                        package_info 文件路径, 此文件在 manifest 构建时会在 inner 目录生成
[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
bingo test -h
optional arguments:
  -h, --help            show this help message and exit
  -bt BUILD_TYPE, --build_type BUILD_TYPE
                        构建类型,可选:dt,debug,release 默认:debug
  --stage STAGE         组件包发布阶段, 可选: dev(developer), pre, rc, stable 默认:dev
  -u, --upload          上传组件包到conan仓
  -r REMOTE, --remote REMOTE
                        conan仓别名,请检查conan remote list查看已配置的conan仓 默认: openubmc_dev
  -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字段,尝试从/etc/bmcgo.conf文件读取conan.user字段,否则由程序管理
  -pr PROFILE, --profile PROFILE
                        显式指定conan构建使用的profile文件 (~/.conan/profiles目录下)别名, 默认为: 空 可选值: profile.dt.ini, profile.luajit.ini, profile.ini, default
  -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
  -wb, --without_build  测试时不重新构建
  --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 完成