概述
本文档帮助您快速体验从新增产品到整包构建的端到端流程。通过一个完整样例,您将学会:
- 创建新产品配置
- 配置基本字段和依赖组件
- 引用整包简化依赖管理
- 构建完整的BMC固件包
文档定位:本文档为快速体验教程,聚焦流程通跑,不深入解释属性原理和高级配置。原理部分请参考《新增产品》和《整包构建指导》详细文档。
前置条件:已完成开发环境搭建和初始化配置,具备基本的命令行操作能力。
第一步:创建产品目录
在manifest/build/product目录下创建新产品目录:
cd manifest/build/product
mkdir -p Myproducts/MyProduct
cd Myproducts/MyProduct目录结构:
MyProduct/
├── manifest.yml # 产品配置入口(必须)
├── archive.ini # 发布路径配置
├── version.xml # 版本信息
└── update_ext4.cfg # 升级配置说明:本样例不需要额外的 rootfs 目录,整包已包含必要组件。签名默认使用原仓库自带的证书文件(
rootca.crl、rootca.der),无需额外准备。如需自定义签名证书,可替换ca/目录下的文件。
第二步:配置manifest.yml
创建manifest.yml文件,内容如下:
# 声明schema文件位置(VSCode可自动补全)
schema: /usr/share/bingo/schema/manifest.schema.json
# 1. 引用整包(推荐,简化依赖管理)
bmc_sdk_download:
url: https://repo.openubmc.cn/26.06/sdk/bmc_sdk.tar.gz
sha256: 1a83c0aad37377471e50901f0a54c6d728365a963f7bcf6343bb8da395fa78ef
platform:
conan: "ibmc_sdk/5.14.00.01.b001@openubmc/stable"
options:
rtos_version: rtos_v2
enable_haf: false
package: community_unsign_webvnc_1711
# 2. 基础配置
base:
version: "1.00.00.00.B001"
customization: "customization/prototype.py"
dependency_buildtools: dependency/dependency_buildtools.xml
signature:
files:
- file: ${product}/ca/rootca.crl
dst: cms.crl
- file: ${product}/ca/rootca.der
dst: rootca.der
# 3. 产品依赖组件
dependencies:
# vpd组件:产品数据管理
- conan: vpd/1.100.9@openubmc/stable
options:
board_name: openUBMC
# libyaml组件:YAML解析库
- conan: libyaml/0.2.5.b002@openubmc/stable
# rackmount组件:机架式服务器接口映射
- conan: rackmount/1.110.99@openubmc/stable
# 4. 构建gpp包配置
gpp:
files:
- file: ${work_out}/rootfs_BMC.img
- file: ${work_out}/rootfs_BMC.tar.gz
- file: ${work_out}/rootfs_BMC.img.cms
# 签名文件(从board_path复制)
- file: ${board_path}/cms.crl
dst: cms.crl
- file: ${board_path}/rootca.der
dst: rootca.der
# uboot + pmode
- file: ${sdk_path}/Hi1711_boot_4096_debug.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: debug
- file: ${sdk_path}/Hi1711_boot_pmode_debug.bin
dst: Hi1711_boot_pmode.bin
condition:
build_type: debug
- file: ${sdk_path}/Hi1711_boot_4096.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: release
- file: ${sdk_path}/Hi1711_boot_pmode.bin
dst: Hi1711_boot_pmode.bin
condition:
build_type: release
# 5. 发布包配置
tosupporte:
default:
package_name: "openUBMC/MyProduct_${version}.zip"
build_type: release
files:
- file: ${board_path}/version.xml
- file: "${output_path}/rootfs_${board_name}.hpm"
dst: MyProduct_${version}.hpm2.1 整包配置(核心)
引用整包可以简化依赖管理,避免版本冲突:
bmc_sdk_download.url: 整包下载地址(社区提供)bmc_sdk_download.sha256: SHA256校验值(用于验证文件完整性)platform.conan: 指定SDK版本platform.package: 指定整包配置名称(如community_unsign_webvnc_1711)
2.2 依赖组件配置
产品依赖组件包括:
- vpd: 产品数据管理组件,需要配置
board_name选项 - libyaml: YAML解析库,C语言组件
- rackmount: 机架式服务器接口映射组件
完整配置示例:
dependencies:
- conan: vpd/1.100.9@openubmc/stable
options:
board_name: openUBMC
- conan: libyaml
- conan: rackmount/1.110.99@openubmc/stable2.3 签名配置
签名配置位于 base.signature,用于声明 HPM 固件包签名所需的证书和吊销列表文件:
base:
signature:
files:
- file: ${product}/ca/rootca.crl
dst: cms.crl
- file: ${product}/ca/rootca.der
dst: rootca.der配置说明:
- 默认使用原仓库自带的证书文件(
rootca.crl、rootca.der),无需额外准备 ${product}变量指向当前产品目录- 如需自定义签名证书,替换产品目录下
ca/中的文件即可
2.4 gpp 分区配置
gpp 分区配置用于声明打包进 eMMC 镜像的分区文件及启动镜像:
gpp:
files:
- file: ${work_out}/rootfs_BMC.img
- file: ${work_out}/rootfs_BMC.tar.gz
- file: ${work_out}/rootfs_BMC.img.cms
- file: ${board_path}/cms.crl
dst: cms.crl
- file: ${board_path}/rootca.der
dst: rootca.der
- file: ${sdk_path}/Hi1711_boot_4096_debug.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: debug
- file: ${sdk_path}/Hi1711_boot_pmode_debug.bin
dst: Hi1711_boot_pmode.bin
condition:
build_type: debug
- file: ${sdk_path}/Hi1711_boot_4096.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: release
- file: ${sdk_path}/Hi1711_boot_pmode.bin
dst: Hi1711_boot_pmode.bin
condition:
build_type: release配置说明:
rootfs_BMC.img/rootfs_BMC.tar.gz/rootfs_BMC.img.cms:构建产出的 rootfs 镜像、压缩包及签名文件cms.crl/rootca.der:签名验证所需的吊销列表和根证书Hi1711_boot_4096.bin:uboot 启动镜像,通过condition.build_type区分 debug/release 版本Hi1711_boot_pmode.bin:pmode 启动镜像,同样按构建类型区分
2.5 发布包配置
发布包配置(tosupporte)用于定义最终交付的 zip 压缩包,允许用户自定义打包文件:
tosupporte:
default:
package_name: "openUBMC/MyProduct_${version}.zip"
build_type: release
files:
- file: ${board_path}/version.xml
- file: "${output_path}/rootfs_${board_name}.hpm"
dst: MyProduct_${version}.hpm配置说明:
package_name:发布包名称,${version}自动替换为base.version的值build_type:发布包构建类型,发布包固定为releasefiles:自定义打包文件列表,用户可按需添加任意文件file:源文件路径,支持${board_path}、${output_path}等变量dst(可选):打包后的目标文件名,不指定则保持原名
第三步:准备配置文件
3.1 archive.ini(发布路径)
TOSUPPORT_PATH=openUBMC/ToSupportE/C
TOSUPPORT_NAME=MyProduct
SUPPORT_MODEL=openUBMC3.2 version.xml(版本信息)
<?xml version="1.0" encoding="utf-8"?>
<FirmwarePackage version="V1.2">
<Package>
<FileName>MyProduct_1.00.00.00.B001.hpm</FileName>
<Module>OPENUBMC</Module>
<Vendor>Huawei Technology Co.</Vendor>
<Version>1.00.00.00.B001</Version>
<ActiveMode>Immediately</ActiveMode>
<SupportModel>;OPENUBMC (Model 2280 V2)</SupportModel>
<SupportModelUID>0x000000010307BF00;0x000000010307BF03</SupportModelUID>
<PackageName>MyProduct_1.00.00.00.B001</PackageName>
<UpgradeAgent>BMC</UpgradeAgent>
<VersionPattern>(\d+)\.(\d+)\s*$</VersionPattern>
<FileType>Firmware</FileType>
<UpgradeTime>600</UpgradeTime>
<MaxUpgradeTime>900</MaxUpgradeTime>
<ActiveEffect>BMC</ActiveEffect>
<ActiveTime>150</ActiveTime>
<MaxActivetime>360</MaxActivetime>
<UpgradeMode>AUTO</UpgradeMode>
<Size>66314761</Size>
<OldVersion>N/A</OldVersion>
<ActiveTimes>2</ActiveTimes>
<RpmName>OPENUBMC-Firmware</RpmName>
<Summary>OPENUBMC-Firmware for Huawei Server.</Summary>
<Description>OPENUBMC-Firmware for Huawei Server.</Description>
</Package>
</FirmwarePackage>3.3 update_ext4.cfg(升级配置)
#升级配置文件
[Basic]
Version=1.0
Revision=20
[Firmware]
FileNum=2
[Firmware0]
ProductID=0
ComponentID=0
FRUID=0
DllLen=0
Updatefile=libupgrade_0.so
BoardID=255
ProductUIDList=0x0207be00,0x0207be0a,0x0207be01,0x0207be0b,0x020abe00,0x020abe0a,0x10307bf00,0x10307bf03,0x1030abf00
[Firmware1]
ProductID=0
ComponentID=25
FRUID=0
DllLen=0
Updatefile=libupgrade_25.so
BoardID=255
ProductUIDList=0x0207be00,0x0207be0a,0x0207be01,0x0207be0b,0x020abe00,0x020abe0a,0x10307bf00,0x10307bf03,0x1030abf00第四步:整包构建
4.1 同意许可协议
首次构建需要同意《BMC软件许可协议》:
# 方式1:设置环境变量自动同意(推荐)
export OPENUBMC_LICENSE=true
# 方式2:构建时手动输入Y同意4.2 执行构建
# 进入manifest目录
cd /path/to/manifest
# Debug版本构建
bingo build -t personal -b MyProduct -bt debug --stage dev
# Release版本构建
bingo build -t personal -b MyProduct -bt release --stage dev参数说明:
-t TARGET: 构建目标,可选install_sdk/publish/personal/app,构建 hpm 包使用personal-b BOARD_NAME: 单板名称(对应产品目录名)-bt BUILD_TYPE, --build_type BUILD_TYPE: 构建类型debug: 调试包release: 正式包
--stage STAGE: 包类型dev: 调试包rc: 预发布包stable: 发布包
4.3 构建发布包
如需生成包含 HPM 和版本文件的 zip 发布包(需配置 tosupporte),使用 -t publish 构建:
# 发布包构建(固定 release 类型)
# -sc 指定 tosupporte 中的子配置名,对应 manifest.yml 中 tosupporte.default
bingo build -t publish -sc default -bt release -b MyProduct4.4 查看构建产物
# 最终产物(HPM 固件包)
ls -lh output/
# 发布包产物(-t publish 构建时生成)
ls -lh output/packet/
# 中间产物(rootfs 镜像、压缩包、签名文件)
ls -lh temp/build_MyProduct_release_dev/output/构建产物分布:
output/rootfs_MyProduct.hpm: HPM 固件包(约 56MB)output/packet/MyProduct_${version}.zip: 发布包(-t publish构建时生成)temp/build_MyProduct_*/output/rootfs_BMC.img: rootfs 镜像文件temp/build_MyProduct_*/output/rootfs_BMC.tar.gz: rootfs 压缩文件temp/build_MyProduct_*/output/rootfs_MyProduct.hpm.signed: 已签名 HPM 包
第五步:验证构建结果
5.1 检查构建日志
构建日志位置(manifest目录下):
# 查看整体日志
cat temp/log/task.log
# 或实时查看日志
tail -f temp/log/task.log日志目录下还包含组件级日志:
# 查看组件构建日志(以vpd为例)
cat temp/log/conan_Build_vpd.log
# 查看所有日志文件
ls temp/log/组件级日志用于定位具体组件的构建错误。
常见问题
Q1: 整包下载失败?
错误信息:
Failed to download bmc_sdk.tar.gz解决方案:
- 检查网络是否可访问
repo.openubmc.cn - 确认sha256校验值正确
- 设置环境变量:
export OPENUBMC_LICENSE=true
Q2: 组件版本冲突?
错误信息:
ERROR: Version conflict: component version mismatch解决方案:
- 使用整包引用,平台组件版本统一管理
- 检查dependencies中是否重复声明整包内组件
- 确认组件版本与整包兼容
Q3: gpp_header失败?
错误信息:
执行命令 gpp_header hpm 失败解决方案:
- 检查构建产物是否完整
- 确认gpp.files配置正确
- 查看详细日志:
cat temp/log/task.log
Q4: 如何添加更多组件?
在现有产品依赖基础上添加新组件:
dependencies:
# 已有的产品依赖
- conan: vpd/1.100.9@openubmc/stable
options:
board_name: openUBMC
- conan: libyaml/0.2.5.b002@openubmc/stable
- conan: rackmount/1.110.99@openubmc/stable
# 新增组件
- conan: sensor/1.50.0@openubmc/stable
- conan: cooling/1.30.0@openubmc/stableQ5: 如何修改组件版本?
两种方式声明组件版本:
dependencies:
# 方式1:直接声明完整版本号
- conan: vpd/1.110.0@openubmc/stable
options:
board_name: openUBMC
# 方式2:使用lockfile版本号(版本号省略)
- conan: libyaml注意事项:
- 平台组件(整包中的组件)不允许定制版本
- 产品组件可以自由修改版本
- 开源软件修改后使用
bingo lock -u更新lockfile:
# 更新指定组件的lockfile
bingo lock -u <组件名>
# 示例:更新vpd组件
bingo lock -u vpd进阶配置
配置openubmc_sdk
openubmc_sdk提供openUBMC基础组件集合,在manifest.yml中配置:
openubmc_sdk:
conan: "openubmc_sdk/latest@openubmc/stable"配置说明:
openubmc_sdk.conan: SDK组件名及版本,默认使用build/sdk/openubmc_sdk.lock中的组件版本latest: 使用最新版本,也可指定具体版本号(如1.50.0)
openubmc_sdk包含:
- 默认配置
- 公共依赖:开源公共组件,一键引用版本号
优先级:产品 > openubmc_sdk > platform
产品定制化脚本
产品定制化脚本用于在构建过程中执行自定义逻辑,在manifest.yml中配置:
base:
version: "1.00.00.00.B001"
customization: "customization/prototype.py"定制化脚本需要实现Customization类,位于manifest/build/customization/目录下:
# manifest/build/customization/prototype.py
class Customization:
def __init__(self, config):
self.config = config
def run(self):
"""执行定制化逻辑"""
# 示例:修改配置文件
# 示例:添加自定义文件
# 示例:调整组件配置
pass常见定制化场景:
- 修改默认配置文件
- 添加产品特定文件
- 调整组件运行参数
- 自定义版本信息
添加rootfs目录(可选)
如需自定义配置文件,可创建rootfs目录:
mkdir -p rootfs/etc/pam.d
mkdir -p rootfs/opt/bmc/conf典型配置文件:
rootfs/etc/pam.d/sshd: SSH认证配置rootfs/etc/version.json: 版本信息rootfs/opt/bmc/conf/launch_control.json: 组件运行配置
定制组件option
如需定制组件的编译选项:
dependencies:
# 定制组件option
- conan: vpd
options:
board_name: openUBMC下一步
恭喜!您已完成一个完整的产品配置和构建流程。
接下来可以:
- 阅读详细文档:《新增产品》《整包构建指导》
- 定制组件配置:参考组件开发文档
- 高级特性:传感器适配、冷却配置、多级定制等
- 发布产品:参考发布流程文档