OEE+AST2600构建指南
更新时间: 2026/06/11
在Gitcode上查看源码

1. 概述

本文档介绍如何使用 bingo 工具构建基于 OEE (OpenEuler Embedded) 和 AST2600 芯片的 BMC 固件。

SDK 工具包(oee_sdk.zip)由 Yocto 源码构建产出,包含交叉编译器、bootloader、kernel 和 rootfs 等文件。bingo 基于这份 SDK 进行 HPM 升级包和 EMMC 烧片包的组装。

1.1 前置条件

  • 操作系统:推荐 Ubuntu 22.04+ 或兼容 Linux 发行版
  • bingo 工具:尚未安装时,参考 bingo 构建系统文档 了解安装方式

bingo 默认已预装在 openUBMC 开发环境中,可跳过安装步骤直接使用;如使用自定义环境则需自行安装。

1.2 架构对比

对比项1711/1712 (RTOS)OEE+AST2600 (OEE)
系统架构RTOSLinux (OpenEuler Embedded)
源码构建工具内部构建系统oebuild + bitbake (Yocto)
打包工具gpp_header + catFirmwarePackager (Python)
配置格式hpm_header.confighpm_layout.yml (YAML)
Boot文件Hi1711_boot系列u-boot-spl + u-boot (组合为 mmc-bootarea.img)
RootfsRTOS文件系统OEE Linux rootfs (core-image-tiny-initramfs)
签名方式打包进固件外部 CMS 签名

1.3 SDK工具包结构

社区归档的SDK工具包由 Yocto 构建产物打包而成,结构如下:

text
oee_sdk.zip
├── oee_sdk/                    # Yocto 构建产物
│   ├── u-boot-spl.bin      # SPL bootloader
│   ├── u-boot.bin          # U-Boot
│   ├── u-boot-env.bin      # U-Boot环境配置(原始)
│   ├── u-boot-env.img      # U-Boot环境镜像(2M,由 u-boot-env.bin 制作)
│   ├── fitImage-obmc-phosphor-initramfs-evb-ast2600-evb-ast2600  # Linux kernel + initramfs (raw fitImage)
│   ├── fitImage.img        # ext4 格式的 boot 分区镜像(内含 fitImage)
│   └── oee_rootfs.tar.gz   # OEE rootfs 压缩包
└── oee_compiler/               # OEE专用编译器
    └── openeuler-x86_64-obmc-armv7a-ast2600-toolchain-24.03-LTS.sh

文件说明:

文件来源用途
u-boot-spl.binYocto 构建产物SPL bootloader
u-boot.binYocto 构建产物U-Boot
u-boot-env.binYocto 构建产物U-Boot 环境配置(原始)
u-boot-env.imgu-boot-env.bin 通过 truncate+dd 制作2M 固定大小,烧入 emmc 的 u-boot-env 分区
fitImage-obmc-phosphor-initramfs-${board}-${machine}Yocto 构建产物(raw fitImage)用于制作 boot 分区镜像 fitImage.img
fitImage.imgmkfs.ext4 将 raw fitImage 封装为 ext4 格式写入 emmc boot-a/boot-b 分区
oee_rootfs.tar.gzYocto 构建产物(rootfs)作为 HPM 升级包的 ROOTFS 分区
openeuler-x86_64-obmc-armv7a-ast2600-toolchain-24.03-LTS.sh预编译 OEE 交叉编译器安装到 /opt/oee-sdk

1.4 分区配置文件

构建过程涉及分区配置文件:

配置文件用途位置
hpm_layout.ymlHPM升级包分区布局${board_path}/hpm_layout.yml
emmc_layout.yml真机烧片包GPT分区布局${board_path}/emmc_layout.yml

配置文件差异:

特性hpm_layout.ymlemmc_layout.yml
格式YAML列表结构YAML字典结构
分区设计简化分区(3个)双备份分区(7个)
用途HPM在线升级包EMMC真机烧片包
分区类型type编号(0,32,1)类型字符串(raw, ext4)

1.5 产品仓说明

产品仓(Product Repository)是存放产品配置的 Git 仓库,包含 manifest.yml 等配置文件,地址为:

仓库目录结构如下(以 openUBMC_ast2600 产品为例):

text
manifest/
├── build/
│   ├── product/
│   │   └── BMC/
│   │       └── openUBMC_ast2600/    # 产品目录,即 ${product}/${board_path}
│   │           ├── hpm_layout.yml
│   │           ├── emmc_layout.yml
│   │           ├── ca/              # 签名证书目录
│   │           │   ├── rootca.crl
│   │           │   └── rootca.der
│   │           └── ...
│   └── ...
└── manifest.yml                      # 产品顶层配置文件
  • manifest.yml:产品顶层配置文件,位于仓库根目录
  • ${product}:指向 manifest/build/product/BMC/openUBMC_ast2600/
  • ${board_path}:与 ${product} 相同,指向板级配置目录

2. 工具链安装

2.1 manifest.yml 配置

2.1.1 SDK下载配置

在产品仓 manifest.yml(参见 1.5 节)中配置 SDK 和工具包下载:

yaml
bmc_sdk_download:
  url: "https://repo.openubmc.cn/26.03/oee_sdk/oee_sdk.zip"
  sha256: "b6b870d973e5a94625daf1947df228c184ad43d391b226f53be26535416c4a48"

packages_download:
  url: "https://repo.openubmc.cn/26.03/oee_sdk/packages.tar.xz"
  sha256: "<sha256校验值>"

2.1.2 工具安装配置

yaml
tools_install:
  build_tool:
    label: "local"
    work_path: "~/oee_compiler"
    verify: true
    install:
      mode: "oee"
      path: "/opt/oee-sdk"
  sdk_tool:
    label: "local"
    work_path: "~/oee_sdk"
    verify: true
    install:
      mode: "default"
      path: "${sdk_path}"

配置说明:

配置项说明
label: "local"使用本地已下载的工具,不执行远程下载
work_path工具存放路径,支持 ~ 路径
mode: "oee"OEE模式,安装到 /opt/oee-sdk
mode: "default"默认模式,直接复制到目标路径

2.1.3 平台配置

yaml
platform:
  conan: "oee_sdk/0.0.1@openubmc.dev/dev"
  options:
    rtos_version: "oee_ast2600"
    enable_haf: false

2.2 安装命令

执行以下命令安装工具链:

bash
bingo build -t install_sdk -b openUBMC_ast2600

安装内容:

内容安装位置说明
OEE编译器/opt/oee-sdkarm-openeuler-linux-gnueabi交叉编译工具链
SDK文件${sdk_path}u-boot、kernel、rootfs等
Conan制品缓存conan缓存目录平台组件编译包
Profile~/.conan2/profiles/profile_oee.ini构建配置文件

2.3 安装验证

bash
# 查看编译器版本
arm-openeuler-linux-gnueabi-gcc --version

# 查看SDK文件
ls ~/oee_sdk/

3. 组件适配

openUBMC 平台相关的 BMC 组件(如 libmcpp/1.2.128@openubmc/stable)支持使用 OEE 交叉编译工具链进行编译。以下说明组件适配流程。

3.1 Profile配置

OEE构建使用专用profile文件 profile_oee.ini(存放于产品仓根目录,参见 1.5 节),关键配置:

ini
[settings]
os=Linux
arch=armv7hf
compiler=gcc
compiler.version=12.3
compiler.libcxx=libstdc++11
build_type=Release

[buildenv]
# 编译器路径
CC=arm-openeuler-linux-gnueabi-gcc
CXX=arm-openeuler-linux-gnueabi-g++

# Sysroot路径
CONAN_CMAKE_SYSROOT=/opt/oee-sdk/sysroots/armv7a-vfp-openeuler-linux-gnueabi/

3.2 构建命令

bash
# 需在组件仓根目录(conanfile.py 所在目录)下执行
bingo build -pr profile_oee.ini

3.3 构件适配要点

以下编译参数需在 profile_oee.ini 中配置:

要点说明profile_oee.ini 配置示例
编译器使用 arm-openeuler-linux-gnueabi-gccCC=arm-openeuler-linux-gnueabi-gcc
Sysroot链接OEE sysroot库CONAN_CMAKE_SYSROOT=/opt/oee-sdk/sysroots/armv7a-vfp-openeuler-linux-gnueabi/
C标准使用 -std=gnu11CFLAGS=-std=gnu11
C++标准使用 -std=c++17CXXFLAGS=-std=c++17
ABI_GLIBCXX_USE_CXX11_ABI=0CXXFLAGS=-D_GLIBCXX_USE_CXX11_ABI=0

4. 产品构建

4.1 manifest.yml 完整配置

以下为构建配置中使用的变量说明:

变量含义默认值/示例
${sdk_path}SDK工具包安装路径~/oee_sdk(由 tools_install.sdk_tool.work_path 指定)
${work_out}构建输出目录由 bingo 自动设置,通常为构建工作区下的 output/ 目录
${product}产品配置目录manifest/build/product/BMC/openUBMC_ast2600/
${board_path}板级配置目录${product}(与 product 相同)
yaml
schema: /usr/share/bingo/schema/manifest.schema.json
platform:
  conan: "oee_sdk/0.0.1@openubmc.dev/dev"
  options:
    rtos_version: "oee_ast2600"

base:
  version: "26.06.00.01"
  customization: "customization/prototype.py"
  signature:
    files:
      - file: ${product}/ca/rootca.crl
        dst: cms.crl
  profile: "profile_oee.ini"

bmc_sdk_download:
  url: "https://repo.openubmc.cn/26.03/oee_sdk/oee_sdk.zip"
  sha256: "<sha256>"

tools_install:
  build_tool:
    label: "local"
    work_path: "~/oee_compiler"
    install:
      mode: "oee"
      path: "/opt/oee-sdk"
  sdk_tool:
    label: "local"
    work_path: "~/oee_sdk"
    install:
      mode: "default"
      path: "${sdk_path}"

gpp:
  gpt_config: "${board_path}/emmc_layout.yml"
  files:
    - file: ${sdk_path}/oee_rootfs.tar.gz
    - file: ${sdk_path}/fitImage-obmc-phosphor-initramfs-${board}-${machine}
      dst: kernel.bin
    - file: ${sdk_path}/u-boot-spl.bin
    - file: ${sdk_path}/u-boot.bin
    - file: ${sdk_path}/u-boot-env.img
    - file: ${sdk_path}/fitImage.img
    - file: ${work_out}/rootfs_BMC.img
    - file: ${work_out}/rootfs_BMC.tar.gz
    - file: ${work_out}/rootfs_BMC.img.cms
    - file: ${product}/ca/rootca.crl
      dst: cms.crl
    - file: ${product}/ca/rootca.der
      dst: rootca.der

dependencies:
  - conan: help

kernel.bin 使用 SDK 中的 raw fitImage 文件重命名而来,而非 fitImage.img

4.2 HPM包分区配置 (hpm_layout.yml)

HPM升级包的分区布局配置,位于 ${board_path}/hpm_layout.yml

yaml
firmwares:
  type: "hpm"
  top_header:
    size: 512              # Top Header大小(字节)
    reserved: ""           # 预留字段,最多15字节字符串
  partitions:
    - partition: BOOT
      file: mmc-bootarea.img
      type: 0              # 分区类型编号
      site: 0              # 分区偏移,0表示自动计算
      size: 0              # 分区大小,0表示按文件实际大小
    - partition: KERNEL
      file: kernel.bin
      type: 32
      site: 0
      size: 0
    - partition: ROOTFS
      file: rootfs_BMC.tar.gz
      type: 1
      site: 0
      size: 0

配置说明:

字段说明备注
type: "hpm"固件类型标识用于区分固件类型
top_header.sizeTop Header大小固定512字节
top_header.reserved预留字符串最多15字节,用于标识固件信息
partition分区名称用于日志和调试
file分区文件名相对于构建目录
type分区类型编号用于区分分区类型(BOOT=0, ROOTFS=1, KERNEL=32等)
site分区偏移(字节)0表示自动计算,强制512字节对齐
size分区大小(字节)0表示按文件实际大小

分区说明:

分区文件类型编号说明
BOOTmmc-bootarea.img0u-boot组合镜像(SPL + u-boot)
KERNELkernel.bin32Linux kernel + initramfs
ROOTFSrootfs_BMC.tar.gz1BMC rootfs压缩包

4.3 真机烧片包分区配置 (emmc_layout.yml)

真机EMMC烧片包的GPT分区布局配置,位于 ${board_path}/emmc_layout.yml

yaml
partitions:
  settings:
    sector_size: 512              # 扇区大小(字节),可选值: 512, 4096
    gpt_header_sectors: 34        # GPT头占用扇区数
    header_offset: 0x5000         # 数据头偏移(字节),首个分区起始位置
    alignment: 1                  # 分区对齐(扇区数),1表示不强制对齐
    total_size: auto              # 镜像总大小,auto自动计算,可指定如 512M
    power_of_two_align: true      # 镜像大小2次幂对齐
  partition:
    u-boot-env:
      size: 2M                    # 分区大小
      type: raw                   # 类型: raw, ext4
      file: u-boot-env.img        # 分区镜像文件名
    boot-a:
      size: 32M
      type: ext4
      file: fitImage.img
      label: boot-a              # 文件系统标签(可选)
    boot-b:
      size: 32M
      type: ext4
      file: fitImage.img
    rofs-a:
      size: 385028KB
      type: ext4
      file: rootfs_BMC.img
    rofs-b:
      size: 385028KB
      type: ext4
      file: rootfs_BMC.img
    rwfs:
      size: 200M
      type: ext4
      file: datafs.img
    pflash:
      size: 2M
      type: raw

Settings配置说明:

字段说明默认值
sector_size扇区大小(字节)512
gpt_header_sectorsGPT头占用扇区数34
header_offset数据区起始偏移(字节)0(从GPT头后开始)
alignment分区对齐(扇区数)1(不强制对齐)
total_size镜像总大小auto(自动计算)
power_of_two_align镜像大小2次幂对齐true

分区说明:

分区大小类型文件说明
u-boot-env2Mrawu-boot-env.imgU-Boot环境变量分区
boot-a32Mext4fitImage.imgA分区kernel镜像
boot-b32Mext4fitImage.imgB分区kernel镜像(双备份)
rofs-a385028KBext4rootfs_BMC.imgA分区rootfs镜像
rofs-b385028KBext4rootfs_BMC.imgB分区rootfs镜像(双备份)
rwfs200Mext4datafs.img可读写数据分区
pflash2Mraw-保留分区(无文件)

4.4 构建命令

bash
# 默认构建,生成 HPM 升级包、真机 emmc 烧片包 (.wic) 和 qemu 仿真包 (.img)
bingo build -b openUBMC_ast2600

4.5 构建产物

产物文件说明
rootfs_openUBMC_ast2600.hpmHPM升级包
openUBMC_ast2600_real.wic真机emmc烧片包
openUBMC_ast2600_real.imgqemu仿真包

5. 其他配置

5.1 签名配置

OEE 固件包支持 CMS 签名,用于升级包的完整性校验。签名流程由 bingo 自动完成:构建时若环境存在 signatrust-client,则根据 manifest.yml 中配置的签名策略自动调用签名服务,对 rootfs_BMC.img 进行 CMS 分离签名,生成 rootfs_BMC.img.cms

产品仓中 base.signature 仅配置证书吊销列表的分发:

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

证书文件(rootca.derrootca.crl)通过 gpp.files 打包进固件:

yaml
gpp:
  files:
    # rootfs_BMC.img的cms签名文件
    - file: ${work_out}/rootfs_BMC.img.cms
    # 签名文件的证书吊销列表
    - file: ${product}/ca/rootca.crl
      dst: cms.crl
    # 签名的根证书
    - file: ${product}/ca/rootca.der
      dst: rootca.der

签名相关文件说明:

文件格式用途
rootfs_BMC.img.cmsCMSrootfs 签名文件(由 bingo 自动生成)
rootca.derDER根证书,用于验签
rootca.crlDER证书吊销列表

更详细的签名说明参考:


6. 常见问题

6.1 SDK下载许可协议

首次下载SDK需要同意许可协议:

bash
# 设置环境变量自动同意
export OPENUBMC_LICENSE=true

# 或交互式确认
bingo build -t install_sdk -b openUBMC_ast2600
# 输入 Y 同意协议

6.2 编译器路径问题

如果 ~/oee_compiler 路径不正确,检查:

bash
# 确认编译器位置
ls ~/oee_compiler/

6.3 GPT镜像文件大小不足

GPT镜像构建时,文件小于分区大小会自动补0填充:

text
分区 ROOTFS 文件大小不足,补0填充: 实际 50000000 字节 -> 目标 134217728 字节

6.4 分区配置文件位置

分区配置文件默认位置:

配置文件默认位置说明
hpm_layout.yml${board_path}/hpm_layout.ymlHPM升级包分区配置
emmc_layout.yml${board_path}/emmc_layout.yml真机烧片包分区配置

${board_path} 变量指向产品仓(参见 1.5 节)内的板级配置目录。

6.5 自定义分区配置

如需自定义分区配置:

  1. HPM包分区:复制并修改 hpm_layout.yml
  2. 真机烧片包:复制并修改 emmc_layout.yml,并通过 gpt_config 指定新路径
yaml
gpp:
  gpt_config: "${board_path}/custom_emmc_layout.yml"

6.6 分区偏移自动计算

HPM包和真机烧片包的分区偏移均可自动计算:

  • HPM包:在 hpm_layout.yml 中设置 site: 0,系统自动计算并强制512字节对齐
  • 真机烧片包:在 emmc_layout.yml 中设置 start: null 或不配置,系统自动计算偏移

7. QEMU 仿真验证

7.1 安装 QEMU

bash
wget https://download.qemu.org/qemu-11.0.0.tar.xz
tar xvJf qemu-11.0.0.tar.xz
cd qemu-11.0.0
./configure
make -j8
make install

7.2 启动仿真

bash
cd manifest/output
qemu-system-arm -M ast2600-evb,boot-emmc=true \
  -drive file=openUBMC_ast2600_real.img,format=raw,if=sd,index=2 \
  -nographic

8. 参考文档