构建你的BMC
更新时间: 2026/07/22
在AtomGit上查看源码

快速上手是openUBMC的特色之一,在接下来的章节中,您将会逐渐地接触如何开发一些openUBMC中常见的场景。我们推荐根据如下的学习路线开展您的openUBMC之旅。

在本篇文档中,你将学习如何构建一个属于自己的bmc软件版本。

WARNING

在上手之前,请务必完成《环境准备》章节中的准备工作,避免因为环境配置错误导致无法继续。

升级验证

openUBMC的固件运行在真实的服务器基板上,需要完成hpm构建和升级。

构建hpm包

hpm包是openUBMC的升级包格式,在manifest使用bingo工具可以自动化完成openUBMC的hpm整包构建。

NOTE

这里假设 manifest 仓位于 /home/workspace/manifest;若不在该路径,请 cd 到你的实际路径。

shell
cd /home/workspace/manifest
bingo build

查看manifest/output文件夹下存在rootfs_openUBMC.hpm即为整包构建成功。

bingo build 参数说明

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

参数说明
-b, --board_name单板包,可选值为 `build/product/<Kunpeng
-bt, --build_type构建类型,可选:debug(调试包)、release(正式包)
--stage包类型,可选:dev(调试包)、rc(预发布包)、stable(发布包),默认 dev
-t, --target构建目标,查看 build/target 目录,支持:install_sdkpersonalapppublish
-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固件签名类型,可选:rsa4096sm2
--debug_platform_path联调整包路径
--deploy将 hpm 包部署至 bmc 设备
--verbose使能 conan 构建详细日志打印

推荐构建参数示例

  • 日常开发构建个人 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

构建产物统一输出到 manifest/output/ 目录下(如 output/rootfs_openUBMC.hpmoutput/packet/<board>/*.zipoutput/package.lock)。

固件签名机制

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

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

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

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

  • CMS 签名demo/cms_sign):通过脚本自制 CA 根证书、签名证书、吊销列表与时间戳证书,并用 sign_server.py 在本地 8098 端口提供签名服务。签名与校验分别使用 bingo 提供的 hpm_signerhpm_verify 工具。
  • ECC 签名demo/ecc_sign):用于 EEPROM/设备描述 ECC 签名场景,通过脚本生成 ECC 密钥对 device_desc_pubkey.binprivate_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

上述签名/重签名能力为可选的发布增强特性,不影响基础整包构建与升级验证;如需深入了解,请参考 bingo 仓库 docs/26.06/ 下的签名适配文档。

升级hpm包

NOTE

本节演示 web 界面升级。openUBMC 也支持 CLI、Redfish、SNMP、IPMI 等升级方式,具体方法与参数见《固件升级》

你可能需要联系贵司的环境管理员,使用IP连接真实环境,以IP为192.168.2.100为例,输入账号密码;

登录后首页点击openUBMC管理->固件升级

点击固件更新->升级文件,上传升级包文件(生成目录为manifest/output/rootfs_openUBMC.hpm),点击开始升级

已完成升级;

升级显示完成后,会进入重启流程,稍后web端会断开连接,等待重新连接后,可查看版本号(openUBMC管理->版本信息,如下图)检查主备版本号是否一致,不一致则升级成功;

验证openUBMC功能

你可以在浏览器中学习和了解openUBMC的webui功能,也可以使用ssh登录环境操作cli接口,或者使用ipmitool工具连接环境调用ipmi命令。