快速新增一个产品
更新时间: 2026/08/11
在Gitcode上查看源码

概述

本文档帮助您快速体验从新增产品到整包构建的端到端流程。通过一个完整样例,您将学会:

  • 创建新产品配置
  • 配置基本字段和依赖组件
  • 引用整包简化依赖管理
  • 构建完整的BMC固件包

文档定位:本文档为快速体验教程,聚焦流程通跑,不深入解释属性原理和高级配置。原理部分请参考《新增产品》和《整包构建指导》详细文档。

前置条件:已完成开发环境搭建和初始化配置,具备基本的命令行操作能力。

第一步:创建产品目录

manifest/build/product目录下创建新产品目录:

bash
cd manifest/build/product
mkdir -p Myproducts/MyProduct
cd Myproducts/MyProduct

目录结构:

MyProduct/
├── manifest.yml           # 产品配置入口(必须)
├── archive.ini            # 发布路径配置
├── version.xml            # 版本信息
└── update_ext4.cfg        # 升级配置

说明:本样例不需要额外的 rootfs 目录,整包已包含必要组件。签名默认使用原仓库自带的证书文件(rootca.crlrootca.der),无需额外准备。如需自定义签名证书,可替换 ca/ 目录下的文件。

第二步:配置manifest.yml

创建manifest.yml文件,内容如下:

yaml
# 声明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}.hpm

2.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: 机架式服务器接口映射组件

完整配置示例:

yaml
dependencies:
  - conan: vpd/1.100.9@openubmc/stable
    options:
      board_name: openUBMC
  - conan: libyaml
  - conan: rackmount/1.110.99@openubmc/stable

2.3 签名配置

签名配置位于 base.signature,用于声明 HPM 固件包签名所需的证书和吊销列表文件:

yaml
base:
  signature:
    files:
      - file: ${product}/ca/rootca.crl
        dst: cms.crl
      - file: ${product}/ca/rootca.der
        dst: rootca.der

配置说明:

  • 默认使用原仓库自带的证书文件(rootca.crlrootca.der),无需额外准备
  • ${product} 变量指向当前产品目录
  • 如需自定义签名证书,替换产品目录下 ca/ 中的文件即可

2.4 gpp 分区配置

gpp 分区配置用于声明打包进 eMMC 镜像的分区文件及启动镜像:

yaml
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 压缩包,允许用户自定义打包文件:

yaml
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:发布包构建类型,发布包固定为 release
  • files:自定义打包文件列表,用户可按需添加任意文件
    • file:源文件路径,支持 ${board_path}${output_path} 等变量
    • dst(可选):打包后的目标文件名,不指定则保持原名

第三步:准备配置文件

3.1 archive.ini(发布路径)

ini
TOSUPPORT_PATH=openUBMC/ToSupportE/C
TOSUPPORT_NAME=MyProduct
SUPPORT_MODEL=openUBMC

3.2 version.xml(版本信息)

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(升级配置)

conf
#升级配置文件
[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软件许可协议》:

bash
# 方式1:设置环境变量自动同意(推荐)
export OPENUBMC_LICENSE=true

# 方式2:构建时手动输入Y同意

4.2 执行构建

bash
# 进入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 构建:

bash
# 发布包构建(固定 release 类型)
# -sc 指定 tosupporte 中的子配置名,对应 manifest.yml 中 tosupporte.default
bingo build -t publish -sc default -bt release -b MyProduct

4.4 查看构建产物

bash
# 最终产物(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目录下):

bash
# 查看整体日志
cat temp/log/task.log

# 或实时查看日志
tail -f temp/log/task.log

日志目录下还包含组件级日志:

bash
# 查看组件构建日志(以vpd为例)
cat temp/log/conan_Build_vpd.log

# 查看所有日志文件
ls temp/log/

组件级日志用于定位具体组件的构建错误。

常见问题

Q1: 整包下载失败?

错误信息

Failed to download bmc_sdk.tar.gz

解决方案

  1. 检查网络是否可访问 repo.openubmc.cn
  2. 确认sha256校验值正确
  3. 设置环境变量:export OPENUBMC_LICENSE=true

Q2: 组件版本冲突?

错误信息

ERROR: Version conflict: component version mismatch

解决方案

  • 使用整包引用,平台组件版本统一管理
  • 检查dependencies中是否重复声明整包内组件
  • 确认组件版本与整包兼容

Q3: gpp_header失败?

错误信息

执行命令 gpp_header hpm 失败

解决方案

  1. 检查构建产物是否完整
  2. 确认gpp.files配置正确
  3. 查看详细日志:cat temp/log/task.log

Q4: 如何添加更多组件?

在现有产品依赖基础上添加新组件:

yaml
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/stable

Q5: 如何修改组件版本?

两种方式声明组件版本:

yaml
dependencies:
  # 方式1:直接声明完整版本号
  - conan: vpd/1.110.0@openubmc/stable
    options:
      board_name: openUBMC

  # 方式2:使用lockfile版本号(版本号省略)
  - conan: libyaml

注意事项

  • 平台组件(整包中的组件)不允许定制版本
  • 产品组件可以自由修改版本
  • 开源软件修改后使用bingo lock -u更新lockfile:
bash
# 更新指定组件的lockfile
bingo lock -u <组件>

# 示例:更新vpd组件
bingo lock -u vpd

进阶配置

配置openubmc_sdk

openubmc_sdk提供openUBMC基础组件集合,在manifest.yml中配置:

yaml
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中配置:

yaml
base:
  version: "1.00.00.00.B001"
  customization: "customization/prototype.py"

定制化脚本需要实现Customization类,位于manifest/build/customization/目录下:

python
# manifest/build/customization/prototype.py

class Customization:
    def __init__(self, config):
        self.config = config

    def run(self):
        """执行定制化逻辑"""
        # 示例:修改配置文件
        # 示例:添加自定义文件
        # 示例:调整组件配置
        pass

常见定制化场景:

  • 修改默认配置文件
  • 添加产品特定文件
  • 调整组件运行参数
  • 自定义版本信息

添加rootfs目录(可选)

如需自定义配置文件,可创建rootfs目录:

bash
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

如需定制组件的编译选项:

yaml
dependencies:
  # 定制组件option
  - conan: vpd
    options:
      board_name: openUBMC

下一步

恭喜!您已完成一个完整的产品配置和构建流程。

接下来可以:

  • 阅读详细文档:《新增产品》《整包构建指导》
  • 定制组件配置:参考组件开发文档
  • 高级特性:传感器适配、冷却配置、多级定制等
  • 发布产品:参考发布流程文档

参考资料