本文介绍其他单板、构建类型、发布配置和固件签名。首次生成默认 HPM 包,请参考《构建你的 BMC》。以下内容按实际需求选用,无需逐项执行。
命令均在已完成初始化的 manifest 仓库内执行,示例路径为 /home/workspace/manifest,请按实际位置调整。
其他构建场景(按需选择)
以下场景是默认构建的替代选择,不是需要依次执行的后续步骤。仅在需要其他单板、构建类型或发布配置时选择对应场景;默认构建成功后,无需逐项重复构建。详细参数请参考本文的bingo build 参数说明。
若需要指定单板型号出包,则需要在进行整包构建之前先安装单板指定的sdk,即执行以下指令(以Hi3095为例):
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 包:
shellcd /home/workspace/manifest bingo build -t personal -b openUBMC -bt release --stage rc构建发布包:
shellcd /home/workspace/manifest bingo build -t publish -b openUBMC -bt release --stage stable构建 debug 版本用于调试:
shellcd /home/workspace/manifest bingo build -t personal -b openUBMC -bt debug --stage rc使用 ccache 加速编译并全量更新 conan 缓存:
shellcd /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 | 验签 | 需配合真实签名环境,参见签名替代方案 |
qemu | qemu_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 为例):
# 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, --remote | conan 仓别名,可用 conan remote list 查看已配置的 conan 仓 |
--ccache | 使用 ccache 加速 C/C++ 编译 |
-z, --zip_code | 0502 编码,可选值参考单板 manifest.yml/manufacture |
-sc, --supporte_code | 待发布的 SupportE 编码,可选值参考单板 manifest.yml/tosupporte |
--signature_type | 固件签名类型,可选:rsa4096、sm2 |
--debug_platform_path | 联调整包路径 |
--deploy | 将 hpm 包部署至 bmc 设备 |
--verbose | 使能 conan 构建详细日志打印 |