代码仓
中
整包构建配置
更新时间: 2026/11/11
在AtomGit上查看源码

本文介绍其他单板、构建类型、发布配置和固件签名。首次生成默认 HPM 包,请参考《构建你的 BMC》。以下内容按实际需求选用,无需逐项执行。

命令均在已完成初始化的 manifest 仓库内执行,示例路径为 /home/workspace/manifest,请按实际位置调整。

其他构建场景(按需选择) ​

以下场景是默认构建的替代选择,不是需要依次执行的后续步骤。仅在需要其他单板、构建类型或发布配置时选择对应场景;默认构建成功后,无需逐项重复构建。详细参数请参考本文的bingo build 参数说明。

若需要指定单板型号出包,则需要在进行整包构建之前先安装单板指定的sdk,即执行以下指令(以Hi3095为例):

shell
cd /home/workspace/manifest
bingo build -t install_sdk -b openUBMC_3095
bingo build -b openUBMC_3095

对于上述 Hi3095 场景,确认本次构建成功结束,并在 manifest/output/ 中生成本次构建的 rootfs_openUBMC_3095.hpm,即完成该单板的整包构建。

  • 构建 release 类型的个人 HPM 包:

    shell
    cd /home/workspace/manifest
    bingo build -t personal -b openUBMC -bt release --stage rc
  • 构建发布包:

    shell
    cd /home/workspace/manifest
    bingo build -t publish -b openUBMC -bt release --stage stable
  • 构建 debug 版本用于调试:

    shell
    cd /home/workspace/manifest
    bingo build -t personal -b openUBMC -bt debug --stage rc
  • 使用 ccache 加速编译并全量更新 conan 缓存:

    shell
    cd /home/workspace/manifest
    bingo build -t personal -b openUBMC -bt release --stage rc --ccache -ucc

上述场景的最终 HPM 包位于 manifest/output/。其他打包文件和依赖锁定文件随构建目标、单板及配置变化,应按所选场景的构建日志和实际输出确认;它们不是默认 HPM 构建必须逐项检查的产物。

固件签名机制 ​

如果您希望控制可以升级到自己环境中的固件来源,例如防止误将其他公司或社区提供的通用 BMC 升级包刷入设备,可以使用固件签名机制。设备在升级时只会接受使用您所信任的私钥签名的 HPM 包,来源不受信任或被篡改的升级包将被拒绝。

openUBMC 固件通过签名保障完整性与来源可信。配置签名服务后,构建时 bingo build 会根据单板 manifest.yml 中的 signature 配置对镜像进行 CMS 签名,并指定签名算法:

  • signature_type: rsa4096(RSA-4096,默认)或 sm2,可通过 bingo build --signature_type <rsa4096|sm2> 指定。
  • 签名所用根证书、证书吊销列表(CRL)等由构建系统从单板 build/product/<board>/manifest.yml 的 signature.files 配置复制到产物中,如 rootca.der、rootca.crt、cms.crl。
  • 生成的签名文件(如 rootfs_BMC.img.cms)随 HPM 包一并发布,供设备侧校验。

默认构建的签名形态 ​

未配置签名服务时,构建产物为空白签名,升级是否受影响取决于所选 SupportE 编码(见下表):

  • rootfs_<board>.filelist.cms 为 0 字节空文件。
  • rootfs_<board>.hpm.signed 相比 .hpm 仅追加文件清单、占位 cms.crl 与打包信息,不包含签名数据。
  • 单板配置 signature.files 引用的证书文件为社区占位文件,不构成可信签名链。

SupportE 编码与签名属性 ​

-sc 参数选择单板 manifest.yml 中 tosupporte 段定义的编码,不同编码的验签行为不同(以 openUBMC 单板为例,其他单板可在各自 manifest.yml 中查看):

编码(-sc 值)package 配置升级时设备验签适用场景
default(缺省)community_sign_webvnc_1711验签需配合真实签名环境,参见签名替代方案
qemuqemu_1711不适用仿真验证

签名替代方案(本地/自建签名服务) ​

社区提供了本地自签名与自建签名服务器的 demo(见 bingo 仓库 demo/cms_sign 与 demo/ecc_sign),可用于功能演示与离线/白盒验证:

  • CMS 签名(demo/cms_sign):通过脚本自制 CA 根证书、签名证书、吊销列表与时间戳证书,并用 sign_server.py 在本地 8098 端口提供签名服务。签名与校验分别使用 bingo 提供的 hpm_signer 与 hpm_verify 工具。
  • ECC 签名(demo/ecc_sign):用于 EEPROM/设备描述 ECC 签名场景,通过脚本生成 ECC 密钥对 device_desc_pubkey.bin 与 private_key.pem,并运行简易签名服务器。

使用方式(以 CMS 为例):

bash
# 1. 准备待签名测试文件
dd if=/dev/random of=unsigned.img bs=1k count=1
# 2. 启动签名服务器(certs 为证书目录,abcd 为签名证书加密密码)
python3 sign_server.py -certs </xxx/yyy/certs> -sp abcd
# 3. 使用 bingo 简易签名命令对文件签名
bingo simple_sign -i unsigned.img -u http://localhost:8098/sign -s "abc-eg-h"

对已构建的 HPM 包,也可使用 bingo hpm_signer 进行外层 CMS 重签名(支持本地证书模式与 SignServer 模式)。

WARNING

签名涉及公私钥,私钥泄露存在严重安全风险,根证书私钥与加密密钥应离线分人保存。上述 demo 仅用于功能演示,生产环境请结合实际进行完善与安全加固。

NOTE

上述签名/重签名能力为可选的发布增强特性。注意:缺省 default 编码产物在设备侧仍会验签,升级前应配置与设备信任链匹配的签名服务;如需深入了解,请参考 bingo 仓库 docs/26.06/ 下的签名适配文档。

参数参考 ​

bingo build 参数说明 ​

在 manifest 仓库执行 bingo build --help 可查看完整参数列表,常用参数如下:

参数说明
-b, --board_name单板包,可选值为 `build/product/<Kunpeng
-bt, --build_type构建类型,可选:debug(调试包)、release(正式包)
--stage包类型,可选:dev(调试包)、rc(预发布包)、stable(发布包),默认 dev
-t, --target构建目标,支持:install_sdk(安装单板 SDK)、personal(个人 hpm 整包,默认)、app(应用包)、publish(发布包)。目标定义内置于 bingo 工具
-v, --version构建版本号,不指定时从 manifest.yml 读取
-ucc, --update_conan_cache全量更新本地 conan 缓存
-r, --remoteconan 仓别名,可用 conan remote list 查看已配置的 conan 仓
--ccache使用 ccache 加速 C/C++ 编译
-z, --zip_code0502 编码,可选值参考单板 manifest.yml/manufacture
-sc, --supporte_code待发布的 SupportE 编码,可选值参考单板 manifest.yml/tosupporte
--signature_type固件签名类型,可选:rsa4096、sm2
--debug_platform_path联调整包路径
--deploy将 hpm 包部署至 bmc 设备
--verbose使能 conan 构建详细日志打印