如何构建组件已经查找生成文件
更新时间:2025/10/15
在Gitcode上查看源码

组件构建与发布

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

一、简述

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

shell
[07:16:31 root(1110):/home/workspace/codehome/iam]# bingo --help
Component commands
    build              构建出包
    analysis           BMC product or package analysis, including build dependency analysis, interface dependency analysis, etc
    deploy             将组件及其依赖部署至temp/rootfs目录
    test               构建DT.
    gen                代码自动生成,支持Lua和C语言,C组件需要在service.json中添加`"language": "c",`配置.
Misc commands
    help               获取命令帮助
    upgrade            升级bingo版本

输入"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
  -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字段,尝试从/etc/bingo.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 Openubmc: 指定单板名,某些组件和单板名挂钩,需要指定单板名来打入某些文件,如果组件和单板无关,不带此参数
# -bt debug: 构建类型,调试包
# --stage rc: 预发布包
bingo build -b Openubmc -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@hw.ibmc.release/rc: Package installed cb9794cb17b2f104bdddb1803a0104b29d12d75c
iam/1.20.31@hw.ibmc.release/rc: Downloaded package revision 35401b8fc57f5024055b6203bbd5abfe
Build successfully
[07:28:19 root(1110):/home/workspace/codehome/iam]#

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

四、构建生成文件

conan2:

组件下执行bingo build默认发布阶段为dev,此时通过cd ~/.conan2/p可进入到生成组件文件夹。

  • 示例:
  • 通过输入conan cache path vpd/1.80.18@openubmc/stable可以查看组件配方文件路径 /root/.conan2/p/vpd264d23efe75e8/e
  • 通过输入conan cache path vpd/1.80.18@openubmc/stable:582e093ee6c9a154a84fdfd89574d24b71441f47可进入制品文件夹 /root/.conan2/p/b/vpd6d29851846626/p

bingo会根据组件的conanfile.py或者conanbase.py文件,会构建生成对应的conan文件,其中:

  • e文件夹中是构建的配方文件,在文件的export()方法中定义。
  • s文件夹中是构建的源代码文件,在文件的source()方法中定义。
  • es文件夹是导出的source中的文件,在文件的exports_sources中配置相关信息。
  • b文件夹是构建源代码生成的文件,是根据文件中build方法配置构建信息
  • p文件夹中是打包构建后的代码,在文件的package方法中配置打包信息。
  • 在metadata.json文件中,可以查看生成文件的recipe哈希值、包的唯一标志符以及包的修订哈希值,它用于跟踪包的变化。可通过此编号在conan仓中找到上传组件信息。

conan1(后续将不再维护):

组件下执行bingo build默认发布阶段为dev,此时通过cd ~/.conan/data/<组件名>/<版本号>/hw.ibmc.dev/dev可进入到生成组件文件夹。

bingo会根据组件的conanfile.py或者conanbase.py文件,会构建生成对应的conan文件,其中:

  • source文件夹中是构建的源代码文件,在文件的source()方法中定义,如果没有定义,会默认复制文件同层文件和文件夹。
  • export_source文件夹是导出的source中的文件,在文件的exports_sources中配置相关信息。
  • build文件夹是构建源代码生成的文件,是根据文件中build方法配置构建信息
  • package文件夹中是打包构建后的代码,在文件的package方法中配置打包信息。
  • 在metadata.json文件中,可以查看生成文件的recipe哈希值、包的唯一标志符以及包的修订哈希值,它用于跟踪包的变化。可通过此编号在conan仓中找到上传组件信息。