openUBMC 特性级裁剪特性设计说明书
| 所属SIG组: | hardware SIG |
| 落入版本: | openUBMC 26.9.0 |
| 设计人员: | hardware SIG |
| 日期: | 2026-07-22 |
Copyright © 2026 openUBMC Community
您对"本文档"的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称"MulanPSL2")的约束。 为了方便用户理解,您可以通过访问https://license.coscl.org.cn/MulanPSL2了解MulanPSL2的概要 (但不是替代)。 MulanPSL2的完整协议内容您可以访问如下网址获取:https://license.coscl.org.cn/MulanPSL2。
改版记录
| 日期 | 修订版本 | 修订描述 | 作者 | 审核 |
|---|---|---|---|---|
| 2026-07-22 | 1.0 | 初版创建 | hardware SIG | 已审核 |
目录
- 特性概述
- 1.1 目的
- 1.2 范围
- 1.3 特性需求列表
- 需求场景分析
- 2.1 特性需求来源与价值概述
- 2.2 特性场景分析
- 2.3 特性影响分析
- 特性/功能实现原理
- 3.1 目标
- 3.2 总体方案
- Use Case一实现:组件特性裁剪
- 4.1 设计思路
- 4.2 约束条件
- 4.3 详细实现
- 4.4 关键接口
- Use Case二实现:资源协作接口裁剪
- 5.1 设计思路
- 5.2 约束条件
- 5.3 详细实现
- 5.4 关键接口
- Use Case三实现:装备定制化与配置导入导出裁剪
- 6.1 设计思路
- 6.2 约束条件
- 6.3 详细实现
- 6.4 关键接口
- Use Case四实现:北向接口裁剪
- 7.1 设计思路
- 7.2 约束条件
- 7.3 详细实现
- 7.4 关键接口
- Use Case五实现:options特性定义规则
- 8.1 设计思路
- 8.2 约束条件
- 8.3 详细实现
- 8.4 关键接口
- Use Case六实现:manifest出包可视化配置
- 9.1 设计思路
- 9.2 约束条件
- 9.3 详细实现
- 9.4 关键接口
- Use Case七实现:WEB-UI特性级裁剪
- 10.1 设计思路
- 10.2 约束条件
- 10.3 详细实现
- 10.4 关键接口
- Use Case八实现:高阶服务整体可裁剪
- 11.1 设计思路
- 11.2 约束条件
- 11.3 详细实现
- 11.4 关键接口
- 可靠性&可用性设计
- 12.1 冗余设计
- 12.2 故障管理
- 12.3 过载控制设计
- 安全&隐私&韧性设计
- 13.1 安全威胁分析及设计
- 13.2 隐私风险分析
- 特性非功能性质量属性相关设计
- 14.1 可测试性
- 14.2 可服务性
- 14.3 可演进性
- 14.4 兼容性
- 参考资料清单
表目录
- 表1:特性场景相关性分析
- 表2:特性需求列表(高优先级)
- 表3:特性需求列表(中优先级)
缩略语清单
| Abbreviations 缩略语 | Full spelling 英文全名 | Chinese explanation 中文解释 |
|---|---|---|
| BMC | Baseboard Management Controller | 基板管理控制器 |
| WEB-UI | Web User Interface | Web用户界面 |
| MDS | Management Data Schema | 管理数据模式/资源协作接口描述 |
| MulanPSL2 | Mulan Permissive Software License,Version 2 | 木兰宽松许可证第2版 |
1. 特性概述
openUBMC 特性级裁剪特性旨在支撑多芯片项目及低内存整机场景(如宝德 Aspeed 整机,BMC 内存约 1GB),通过对 WEB-UI 进行特性级裁剪、对基础平台差异化特性进行裁剪,并支持高阶服务整体可裁剪,避免前端页面因未裁剪特性残留导致报错,同时降低固件体积与运行时资源占用,满足多样化整机特性诉求。
本特性以统一的顶层 options(feature_xxx)定义为核心控制面,贯通组件编译/打包/加载、资源协作接口、装备定制化与配置导入导出、北向接口及 Studio 可视化出包配置,实现“一次定义、全链路联动裁剪”。
1.1 目的
本文档基于 openUBMC 特性级裁剪需求分析,对该特性的功能进行详细设计,明确总体裁剪策略、控制链路、接口规范与实现方案,作为后续软件开发人员、产品集成人员和测试人员的技术指导文档。
1.2 范围
特性级裁剪主要包含以下功能模块和适用场景:
核心功能模块:
- 组件特性裁剪:顶层特性
options定义,各组件共同用于控制代码的编译、打包及加载 - 资源协作接口裁剪:裁剪掉的特性相关资源协作接口同步裁剪
- 装备定制化与配置导入导出裁剪:裁剪掉的属性不再支持装备定制化和配置导入导出
- 北向接口裁剪:基于多层级定制语法,bingo 解析自动匹配接口裁剪文件,构建阶段执行裁剪
- options 特性定义规则:统一在
default_options下以feature_xxx命名 - manifest 出包可视化配置:openUBMC Studio 支持特性开关可视化配置并自动生成
manifest.yaml - WEB-UI 特性级裁剪:前端按特性开关裁剪页面/菜单/组件,避免低内存整机前端报错
- 高阶服务整体可裁剪:支持高阶服务按特性开关整体裁剪,满足基础平台差异化诉求
适用场景分析:
| 场景编号 | 场景1 | 场景2 | 场景3 | 场景4 |
|---|---|---|---|---|
| 场景名称 | 1GB内存整机裁剪 | 多芯片差异化出包 | 北向/前端联动裁剪 | Studio可视化出包 |
| 场景说明 | 裁剪高阶服务与WEB-UI非必要特性,保障低内存稳定运行 | 按整机诉求开关特性,生成差异化固件包 | 特性关闭后同步裁剪接口与页面 | 可视化配置特性开关并生成manifest |
| 特性是否相关 | √ | √ | √ | √ |
| 实现状态 | 设计中 | 设计中 | 设计中 | 设计中 |
1.3 特性需求列表
高优先级需求(P0):
| 需求编号 | 需求名称 | 特性描述 | 优先级 |
|---|---|---|---|
| FEAT-CLIP-001 | 组件特性裁剪 | 顶层 options 控制各组件编译、打包及加载 | P0 |
| FEAT-CLIP-002 | options 定义规则 | 在 default_options 下统一以 feature_xxx 命名 | P0 |
| FEAT-CLIP-003 | 资源协作接口裁剪 | 被裁剪特性关联的资源协作接口同步裁剪 | P0 |
| FEAT-CLIP-004 | 北向接口裁剪 | 多层级定制语法 + bingo 构建阶段自动匹配裁剪 | P0 |
| FEAT-CLIP-005 | WEB-UI 特性级裁剪 | 按特性开关裁剪前端,避免页面报错 | P0 |
中优先级需求(P1):
| 需求编号 | 需求名称 | 特性描述 | 优先级 |
|---|---|---|---|
| FEAT-CLIP-006 | 装备定制化与配置导入导出裁剪 | 裁剪属性不再支持装备定制化与配置导入导出 | P1 |
| FEAT-CLIP-007 | 高阶服务整体可裁剪 | 高阶服务可整体按特性开关裁剪 | P1 |
| FEAT-CLIP-008 | manifest 可视化出包配置 | Studio 可视化配置特性开关并生成 manifest.yaml | P1 |
2. 需求场景分析
2.1 特性需求来源与价值概述
需求来源背景:
openUBMC 社区要支撑多芯片项目,需要支持 BMC 在内存约 1GB 条件下运行良好(例如宝德 Aspeed 整机)。当前全量特性与前端页面在低内存、差异化整机上容易出现:
- 资源受限:全量服务与前端资源占用高,1GB 内存场景运行压力大
- 前端残留报错:后端特性已裁剪但 WEB-UI 未同步裁剪,导致页面访问异常
- 基础平台差异化不足:不同整机对高阶服务诉求不同,缺乏统一、可联动的裁剪闭环
- 出包配置效率低:特性开关分散,manifest 手工维护成本高、易出错
价值概述:
- 低内存可运行:通过 WEB-UI、高阶服务与组件级联动裁剪,降低运行时开销
- 前后端一致:特性关闭后,资源协作接口、北向接口、前端页面同步裁剪,避免残留入口
- 差异化交付:按整机诉求生成差异化固件包,满足多芯片/多产品诉求
- 可视化提效:Studio 特性开关页面自动生成
manifest.yaml,降低集成门槛
2.2 特性场景分析
| 使用者 | 时间/频率 | 关键场景/任务 |
|---|---|---|
| 产品集成人员 | 出包阶段 | 按整机配置特性开关,生成差异化固件包 |
| BMC 开发人员 | 开发阶段 | 为组件声明 feature_xxx,关联接口/前端裁剪配置 |
| WEB-UI 开发人员 | 开发/联调阶段 | 按特性开关裁剪菜单、路由、页面组件 |
| 测试人员 | 测试阶段 | 验证裁剪后无残留接口/页面,低内存场景稳定运行 |
| 工具链人员 | 持续迭代 | 维护 bingo 裁剪解析与 Studio 可视化能力 |
2.3 特性影响分析
2.3.1 硬件限制
面向低内存 BMC(约 1GB,如 Aspeed 整机)场景设计,需保证裁剪后基础管理能力可用。
2.3.2 技术限制
- 构建与裁剪依赖 bingo / Conan options 机制
- 北向接口裁剪复用多层级定制语法
- WEB-UI 裁剪需与前端工程构建流程打通
2.3.3 对 License 的影响分析
不涉及新增许可证约束,遵循 MulanPSL2。
2.3.4 对系统性能规格的影响分析
裁剪后预期降低固件包体积与运行时内存占用,提升 1GB 内存场景稳定性。
2.3.5 对系统可靠性规格的影响分析
要求裁剪后不残留悬空依赖、不出现前端访问已裁剪能力导致的页面报错。
2.3.6 对系统兼容性的影响分析
未裁剪产品保持现有全量行为;已裁剪产品对外仅暴露保留特性能力,需在发布说明中明确差异。
2.3.7 与其他重大特性的交互性、冲突性分析
与既有“北向接口裁剪”能力协同:本特性扩展为全链路特性级裁剪(组件/资源协作接口/装备定制/北向/WEB-UI/高阶服务/Studio),北向裁剪作为其中一环复用既有机制。
3. 特性/功能实现原理
3.1 目标
构建统一的特性级裁剪框架,实现:
- 以
default_options下的feature_xxx作为全链路裁剪总开关 - 组件编译、打包、加载受同一 options 控制
- 资源协作接口、装备定制化/配置导入导出、北向接口、WEB-UI、高阶服务随特性联动裁剪
- 构建阶段由 bingo 完成自动匹配与裁剪落地
- openUBMC Studio 可视化配置特性开关并生成
manifest.yaml
3.2 总体方案
系统概述:
特性级裁剪以顶层 feature_xxx options 为单一事实来源(Single Source of Truth)。产品层在 manifest 中声明特性开关;构建时 bingo 解析 options,驱动各组件编译/打包/加载裁剪,并匹配多层级接口裁剪配置;同时同步裁剪资源协作接口、装备定制化与配置导入导出相关属性;WEB-UI 与高阶服务按同一开关整体裁剪,最终形成面向不同整机的差异化固件包。
整体裁剪策略:
- 组件特性裁剪:顶层特性 options 定义,各组件共同用于控制代码的编译、打包及加载
- 资源协作接口裁剪:裁剪掉的特性相关资源协作接口被同时裁剪
- 装备定制化和配置导入导出裁剪:裁剪掉的属性不再支持装备定制化和配置导入导出
- 北向接口裁剪:特性裁剪配置文件语法采用多层级定制语法,bingo 解析自动匹配接口多层级定制裁剪文件,且在构建阶段执行特性裁剪,执行产品层定制后得到最终配置
- options 特性定义规则:定义在
default_options下面,各组件共同使用,命名格式为feature_xxx(xxx 是特性名称) - manifest 出包可视化配置:openUBMC Studio 支持可视化出包配置功能,新增特性开关配置页面,显示组件的所有可选特性开关,可视化配置特性开关之后自动生成
manifest.yaml文件
总体架构:
架构设计原则:
- 单一控制面:所有裁剪动作统一由
feature_xxxoptions 驱动 - 构建时落地:裁剪在构建阶段完成,不依赖运行时动态卸载
- 全链路一致:组件、接口、前端、高阶服务、装备定制保持同一开关语义
- 可复用语法:北向裁剪复用多层级定制语法,降低学习成本
- 可视化优先:Studio 降低 manifest 手工配置错误率
4. Use Case一实现:组件特性裁剪
4.1 设计思路
通过顶层特性 options 定义,各组件共同用于控制代码的编译、打包及加载。关闭某特性后,相关组件代码不参与编译、产物不打包、运行时不加载,从而降低固件体积与内存占用。
设计要点:
- 产品层在 manifest / Conan options 中声明特性开关
- 组件构建脚本读取同一
feature_xxx决定是否编译与打包 - 加载框架按特性开关决定是否加载对应模块/服务
4.2 约束条件
- 特性开关以构建期 options 为准,不支持运行时动态启停已裁剪代码
- 同一特性在各组件中的开关语义必须一致
- 裁剪后不得产生悬空依赖、编译错误或启动失败
4.3 详细实现
- 在组件
conanfile/ 构建脚本中读取feature_xxx feature_xxx=False时:- 跳过相关源码编译
- 不打包相关二进制、配置与资源文件
- 不注册对应加载项
feature_xxx=True时保持现有全量行为- 构建流水线增加裁剪编译门禁,验证关闭特性后包内无对应产物
4.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
feature_xxx | Conan/构建 option | 组件特性总开关,控制编译、打包及加载 |
5. Use Case二实现:资源协作接口裁剪
5.1 设计思路
特性被裁剪后,与其关联的资源协作接口(MDS/能力集接口)必须同步裁剪,避免北向或前端仍引用已不存在的资源协作能力。
5.2 约束条件
- 资源协作接口与特性的关联关系需可被构建系统识别
- 裁剪必须成对进行:特性关闭则关联接口不可残留
- 不得影响未关联特性的资源协作接口
5.3 详细实现
- 在 MDS / 接口描述中标注所属
feature_xxx - bingo 构建阶段根据 options 过滤被关闭特性关联的资源协作接口
- 生成最终设备树/接口注册清单时排除已裁剪接口
- 对残留引用做构建期检查,发现未裁剪干净则失败告警
5.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| 特性-资源协作接口关联表 | 构建元数据 | 描述 feature_xxx 与资源协作接口映射关系 |
6. Use Case三实现:装备定制化与配置导入导出裁剪
6.1 设计思路
被裁剪特性对应的属性,不再支持装备定制化和配置导入导出,避免低配/裁剪产品仍暴露不可用配置项,导致导入失败或定制结果无效。
6.2 约束条件
- 仅裁剪与关闭特性直接相关的属性
- 配置导入导出需对已裁剪属性做忽略或明确报错策略,并保持行为一致
- 装备定制化界面/模板不得再展示已裁剪属性
6.3 详细实现
- 属性定义中关联所属
feature_xxx - 特性关闭时:
- 装备定制化模板剔除对应属性
- 配置导出不包含对应属性
- 配置导入遇到已裁剪属性时按约定策略忽略或提示
- 增加导入导出兼容性测试,覆盖“全量包导出 → 裁剪包导入”场景
6.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| 属性-特性关联元数据 | 配置元数据 | 标识属性所属 feature_xxx |
7. Use Case四实现:北向接口裁剪
7.1 设计思路
特性裁剪配置文件语法采用多层级定制语法。bingo 解析自动匹配接口多层级定制裁剪文件,并在构建阶段执行特性裁剪;再叠加产品层定制后得到最终配置,实现 Redfish / Web REST / CLI / SNMP 等北向接口随特性同步裁剪。
7.2 约束条件
- 裁剪语法必须兼容既有多层级定制语法
- 裁剪动作仅在构建阶段执行
- 产品层定制在特性裁剪结果之上叠加,最终配置可复现
7.3 详细实现
- 为待裁剪特性准备多层级接口裁剪配置
- bingo 根据 options 自动匹配对应裁剪文件
- 构建阶段执行接口配置与 Schema(如适用)裁剪
- 执行产品层定制,生成最终北向配置并打入固件包
- 复用并扩展既有“北向接口裁剪”能力,保证与本特性 options 语义一致
7.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| 多层级接口裁剪配置 | 构建配置 | 按 feature_xxx 匹配的北向裁剪文件 |
| bingo 裁剪解析能力 | 构建工具 | 自动匹配并在构建阶段执行裁剪 |
8. Use Case五实现:options特性定义规则
8.1 设计思路
统一 options 定义位置与命名规则,保证各组件共同使用、语义一致,避免同义不同名导致裁剪失效。
规则:
- 定义位置:
default_options下 - 命名格式:
feature_xxx(xxx 为特性名称) - 使用范围:各组件共同使用,作为编译/打包/加载及联动裁剪的统一开关
8.2 约束条件
- 新增特性开关必须遵循
feature_xxx命名,禁止自定义其它前缀 - 同一特性仅允许一个全局 option 名
default_options中需给出明确默认值(建议默认开启,由产品层按需关闭)
8.3 详细实现
示例:
default_options = {
"feature_asu": True,
"feature_raid": True,
"feature_advanced_diag": False,
}- 在公共/组件
default_options中登记全部可选特性 - 文档与 Studio 以该清单为权威来源展示开关
- CI 校验 option 命名是否符合
feature_xxx规则
8.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
default_options.feature_xxx | 构建配置 | 统一特性开关定义入口 |
9. Use Case六实现:manifest出包可视化配置
9.1 设计思路
openUBMC Studio 支持可视化出包配置:新增特性开关配置页面,显示组件的所有可选特性开关;可视化配置后自动生成 manifest.yaml,降低手工编辑错误率,提升多芯片差异化出包效率。
9.2 约束条件
- 页面展示的开关清单必须来源于组件已声明的
feature_xxx - 生成的
manifest.yaml需可被 bingo 直接消费 - 可视化配置与手工编辑 manifest 需保持兼容(可回读、可再生成)
9.3 详细实现
- Studio 读取组件可选特性清单(来自
default_options/ 组件元数据) - 提供特性开关配置页面,支持按组件分组展示、批量开关
- 用户确认后自动生成/更新
manifest.yaml中的 options 段 - 支持导入已有 manifest 回显当前开关状态
- 生成结果提供校验:未知 option、冲突 option 提前提示
9.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| Studio 特性开关配置页 | 工具界面 | 可视化配置 feature_xxx |
manifest.yaml | 出包配置 | 承载产品层特性开关结果 |
10. Use Case七实现:WEB-UI特性级裁剪
10.1 设计思路
针对 1GB 内存等整机场景,对 WEB-UI 进行特性级裁剪:关闭特性后同步裁剪对应菜单、路由、页面与前端资源,避免访问已裁剪能力导致前端报错,并降低前端资源占用。
10.2 约束条件
- WEB-UI 裁剪必须与后端
feature_xxx保持一致 - 裁剪后不得残留可点击入口或可路由页面
- 基础运维页面(登录、系统信息、必要告警等)不可被误裁剪
10.3 详细实现
- 前端模块/路由/菜单项关联
feature_xxx - 构建时根据 options 排除对应前端资源打包
- 运行时导航与权限入口基于裁剪结果生成,不展示已关闭特性
- 增加前端访问测试:对已裁剪 URI/菜单验证不可达且无报错页
10.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| 前端特性模块映射表 | 前端构建配置 | 菜单/路由/页面对应 feature_xxx |
11. Use Case八实现:高阶服务整体可裁剪
11.1 设计思路
支持高阶服务按特性开关整体裁剪,满足基础平台差异化诉求。低内存或多芯片精简版可关闭高阶服务,仅保留基础管理能力。
11.2 约束条件
- 高阶服务需明确服务边界与依赖,支持“整体裁剪”
- 被依赖的基础服务不得随高阶服务误裁剪
- 裁剪后服务拉起清单、看门狗与自愈策略需同步调整
11.3 详细实现
- 将高阶服务集合映射到一个或多个
feature_xxx - 关闭开关后:
- 不编译/不打包对应服务
- 不写入启动配置与依赖拉起关系
- 启动框架仅拉起保留服务集合
- 提供“最小集”产品配置模板,便于 1GB 内存整机直接复用
11.4 关键接口
| 接口名称 | 类型 | 说明 |
|---|---|---|
| 高阶服务-特性映射表 | 服务配置元数据 | 描述可整体裁剪的高阶服务集合 |
12. 可靠性&可用性设计
12.1 冗余设计
裁剪配置(manifest / 多层级裁剪文件)纳入版本管理,支持回滚到上一可用出包配置。
12.2 故障管理
- 构建期发现未知 option、裁剪残留引用时失败退出
- 运行期对已裁剪接口访问返回明确不可用/不存在,避免前端异常堆栈
12.3 过载控制设计
通过裁剪高阶服务与 WEB-UI 非必要模块,降低 1GB 内存场景下的内存与 CPU 压力。
13. 安全&隐私&韧性设计
13.1 安全威胁分析及设计
- 防止通过残留北向接口访问已裁剪能力
- Studio 生成的 manifest 需校验合法性,避免注入非法 option
13.2 隐私风险分析
本特性不新增个人数据处理流程;配置导入导出裁剪需避免导出已关闭特性的敏感配置项。
14. 特性非功能性质量属性相关设计
14.1 可测试性
覆盖:全量开启、单特性关闭、多特性组合关闭、1GB 场景冒烟、前后端一致性、导入导出兼容性。
14.2 可服务性
裁剪差异需可追溯(manifest 版本、构建日志中的 option 生效记录)。
14.3 可演进性
新增特性只需新增 feature_xxx 并补齐关联裁剪配置,不改动裁剪框架主流程。
14.4 兼容性
- 与既有北向接口裁剪、多层级定制语法兼容
- 未配置裁剪的产品行为与历史全量版本保持一致
15. 参考资料清单
- openUBMC 北向接口裁剪特性设计说明书
- openUBMC 多层级定制开发指南
- openUBMC bingo / BMC Studio 工具文档
- Conan options / default_options 规范