manufacture
版本信息
| 项目 | 内容 |
|---|---|
| 组件版本 | 1.90.3 |
| 首发版本 | openUBMC 25.3.0 |
| 文档作者 | dengshengang |
| 最后更新 | 2026-08-17 |
1. 组件概述
1.1 组件简介
manufacture 组件负责BMC的DFT装备测试项管理、路由分发。该组件提供统一的装备命令管理机制,具体的测试项功能在对应的业务组件中实现。
1.2 解决什么问题
manufacture 组件解决以下核心问题:
- 统一装备测试项的管理机制,屏蔽各业务组件测试逻辑的差异
- 提供统一的测试项查询、启动、停止与结果获取入口
- 支持获取部件版本信息
- 支持设置VGA前后使能命令
- 支持设置上下电次数和AC操作命令
1.3 核心功能
- 装备测试项管理与路由分发:建立装备测试项路由表,将装备命令路由到相关业务组件。
- 装备测试项IPMI接口:提供测试项数目查询、详细信息查询、测试启动/停止、结果查询等命令(0x30 0x90 0x40 ~ 0x43)。
- 版本获取IPMI接口:获取板卡各种版本信息(0x30 0x90 0x08)。
- VGA前后使能切换:VGA前置/后置/默认模式切换(0x30 0x90 0x52)。
- 上下电次数与AC设置:强制上下电次数与AC操作设置(0x30 0x90 0x31)。
1.4 关键术语表
| 术语 | 解释 |
|---|---|
| DFT | Design For Test,面向测试的设计,指硬件/固件在设计阶段为生产测试预留的能力 |
| 装备测试项 | 装备阶段触发的部件测试项目,有直接自检、拷机测试、人工检查、人工操作等类型 |
| 装备模式 | 单板所处的装备阶段状态,0表示FT阶段,1表示ST阶段或正常运行阶段 |
1.5 外部交互边界图
装备测试项执行时序图
2. API 使用说明与示例
2.1 资源协作接口概览
2.1.1 bmc.kepler.Manufacture
属性
| 属性名 | 类型 | 读写 | 取值范围 | 说明 |
|---|---|---|---|---|
| Type | U8 | RO | 1~6 | 装备测试项类型,1人工自检,2需要人工准备前置条件,3拷机测试,4人工检查结果,5人工操作测试,6与装备交互测试 |
| Id | U8 | RO | NA | 装备测试项id |
| Slot | U32 | RO | NA | 槽位号 |
| DeviceNum | U8 | RO | NA | 设备id |
| Param | U8[] | RW | NA | 测试项传入的参数 |
| ItemName | String | RO | NA | 测试项名称 |
| PrompteReady | String | RO | NA | 测试前交互提示 |
| PrompteFinish | String | RO | NA | 测试完成交互提示 |
| ProcessPeriod | U16 | RO | NA | 测试所需时间 |
| Status | String | RO | Complete、Testing、Unstart(默认值:Unstart) | 当前测试状态 |
方法
| 方法名 | 入参 | 出参 | 说明 |
|---|---|---|---|
| Start | 无 | 无 | 开始装备测试项 |
| Stop | 无 | 无 | 停止装备测试项 |
| GetResult | 无 | Status: String, Description: String | 获取装备测试项结果 |
备注:
Start、Stop无返回值,测试进展通过Status属性维护:启动测试时将Status置为Testing或Complete,停止测试时置为Unstart。GetResult的出参Status为枚举,取值为Succeed(测试成功)、Failed(测试失败)、Non(不涉及结果查询);出参Description为测试项描述字符串。Status属性与GetResult方法配合使用,只有Status为Complete时装备组件才会调用GetResult。
2.1.2 bmc.kepler.Manufacture.Status
装备模式状态接口,用于查询单板当前的装备模式与装备使能状态。
path: /bmc/kepler/Managers/:ManagerId/Manufacture
属性
| 属性名 | 类型 | 读写 | 取值范围 | 说明 |
|---|---|---|---|---|
| Mode | U8 | RO | 0、1 | 装备模式:0表示FT阶段,1表示ST阶段或者正常运行阶段 |
| Enabled | Boolean | RO | true、false | 装备使能:false表示未使能,true表示使能 |
2.1.3 bmc.kepler.Manufacture.Extension
装备扩展接口,用于Multihost场景下标识system编号。
属性
| 属性名 | 类型 | 读写 | 取值范围 | 说明 |
|---|---|---|---|---|
| SystemId | U16 | RO | NA(默认值:1) | Multihost环境下system编号 |
2.1.4 bmc.kepler.Manufacture.Simulate
属性
| 属性名 | 类型 | 读写 | 取值范围 | 说明 |
|---|---|---|---|---|
| VrdUpgradeSimulated | U8 | RW | 0、1(默认值:0) | 模拟VRD升级功能(0:正常升级,1:模拟升级) |
2.2 装备通用测试项IPMI命令
功能说明
通过IPMI命令对装备测试项进行查询、启动、停止与结果获取。测试类型(type)取值如下:
| 测试类型 type | 测试类型 |
|---|---|
| 1 | 直接自检,由APP提供检验结果 |
| 2 | 需要人工干预的前提条件,比如需要接环回头、需要设置屏幕等,由各APP提供测试结果 |
| 3 | 拷机测试项 |
| 4 | 需要人工检查结果,比如LED灯需要人工查看是否正常,需要由装备人员确定检测结果 |
| 5 | 需要人工操作,如button、LCD |
| 6 | 需要与装备进行交互,需要装备侧软件比对数据来确定测试结果 |
| 255 | 无效的测试项,不进行注册 |
首发版本
openUBMC 25.3.0
应用场景
装备测试项执行。
参数说明
| 命令 | 说明 |
|---|---|
| ipmitool raw 0x30 0x90 0x40 {type} | 查询测试项数目 |
| ipmitool raw 0x30 0x90 0x41 0x00 0x20 {type} {index} | 遍历查询测试项详细信息 |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x01 {index} | 按index启动测试项 |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x01 {dftid} {slot} {device_num} | 按dftid/slot/device_num启动测试项 |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0xa1 {index} {param} | 按index启动测试项(需传参,参数长度一般为1) |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0xe1 {dftid} {slot} {device_num} {param} | 按dftid/slot/device_num启动测试项(需传参,参数长度一般为1) |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x00 {index} | 按index停止测试项 |
| ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x00 {dftid} {slot} {device_num} | 按dftid/slot/device_num停止测试项 |
| ipmitool raw 0x30 0x90 0x43 0x00 0x20 {type} {index} | 查询测试项结果 |
| ipmitool raw 0x30 0x90 0x43 0x00 0x20 {type} {dftid} {slot} {device_num} | 查询测试项结果(按dftid方式) |
调试示例
① 查询测试项数目
命令模板:0x30 0x90 0x40 {type},type来自上文测试类型表。
> ipmicmd -k "f 0 30 90 40 01 " smi 0
0f 31 00 90 00 12
>返回 0x12,表示有0x12个自检项。
② 查询测试项的详细信息
命令格式:ipmitool raw 0x30 0x90 0x41 0x00 0x20 {type} {index},index取自0~0x12。
> ipmicmd -k "f 0 30 90 41 00 20 01 01" smi 0
0f 31 00 90 00 (第一个字节起始处) 00 0b 01 00 00 00 00 46 6c 61 73 68 20 54 65 73 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>解析方式:
- 第0个字节:状态,通常成功为00
- 第1个字节:是否打印完全标志位,00表示打印没有结束,80表示返回打印结束
- 第2个字节:dftid,0x0b转为十进制为11,表示对Flash的测试
- 第3~6字节:slot
- 第7字节:device_num
- 第8字节及以后:测试项描述,可以使用ASCII转换工具查看信息
③ 启动测试
方式一:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x01 {index},返回无报错即表明启动测试成功。
方式二:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x01 {dftid} {slot} {device_num},输入来源为②获取到的dftid/slot/device_num。
举例启动Flash的测试:
> ipmicmd -k "f 0 30 90 42 00 20 01 01 01" smi 0
0f 31 00 90 00 80
>返回 80 表示返回打印结束。
部分测试项需要传入参数(参数长度一般为1):
- 方式一:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0xa1 {index} {param}
- 方式二:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0xe1 {dftid} {slot} {device_num} {param}
④ 查询测试项结果
方式一:ipmitool raw 0x30 0x90 0x43 0x00 0x20 {type} {index}
> ipmicmd -k "f 0 30 90 43 00 20 01 01" smi 0
0f 31 00 90 00 (第一个字节起始处) 00 00 0b 01 00 00 00 00 46 6c 61 73 68 20 54 65 73 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>解析方式:
- 第1个字节:是否打印完全标志位,00表示打印没有结束,80表示返回打印结束
- 第2个字节:00表示自检结果成功,01表示失败,ff表示不涉及
- 第3个字节:dftid,0x0b表示Flash
- 第4~7字节:slot
- 第8字节:device_num
- 第9字节及以后:测试项描述,可以使用ASCII转换工具查看信息
方式二:ipmitool raw 0x30 0x90 0x43 0x00 0x20 {type} {dftid} {slot} {device_num}
> ipmicmd -k "f 0 30 90 43 00 20 01 0b 01 00 00 00 00" smi 0
0f 31 00 90 00 (第一个字节起始处) 00 00 0b 01 00 00 00 00 46 6c 61 73 68 20 54 65 73 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>与方式一结果相同。
⑤ 停止测试
- 方式一:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x00 {index},返回无报错即表明停止测试成功
- 方式二:ipmitool raw 0x30 0x90 0x42 0x00 0x20 {type} 0x00 {dftid} {slot} {device_num}
2.3 装备模式状态查询IPMI命令
功能说明
查询当前装备使能状态
首发版本
openUBMC 25.3.0
应用场景
判断单板当前是否处于装备模式及所处装备阶段,以决定可执行的装备操作。
参数说明
命令格式:ipmitool raw 0x30 0x90 0x1f
返回值与异常
| 字节顺序 | 域内容 |
|---|---|
| 1 | Completion Code |
| 2 | 是否使能状态命令: 0=Disable DFT Command. 1=Enable DFT Command. |
| 3 | 装备模式: 0=装备框,FT环节 1=产品框(用于BMC区分当时装备处于FT还是ST模式,由装备程序设置) |
调试示例
> ipmitool raw 0x30 0x90 0x1f
00 01
>2.4 版本获取IPMI命令
功能说明
用于装备脚本获取板卡的各种版本信息,包括MCU版本、PCB版本、CPLD版本、VRD版本、CSR版本、BMC版本等。
首发版本
openUBMC 25.3.0
应用场景
装备脚本查询板卡各部件版本信息,用于板卡识别与测试项选择。
参数说明
命令格式:ipmitool raw 0x30 0x90 0x08 {fruid} {type} 0x00 0xf5
| type | cmd |
|---|---|
| pcb version | 0x00 |
| bmc main version | 0x01 |
| cpld version | 0x02 |
| sdr version | 0x05 |
| bios version | 0x06 |
| uboot version | 0x08 |
| bmc backup version | 0x0C |
| uboot backup version | 0x10 |
| bmc available version | 0x18 |
| sr version | 0x19 |
| vrd version | 0x1A |
| mcu version | 0x1B |
| all version(fruid = 0) | 0xFF |
返回值与异常
| 字节顺序 | 域内容 |
|---|---|
| 1 | Completion Code |
| 2 | 表示数据是否结束: 80=结束. 00=未结束. |
| 3~N | 版本字符串各字节的ASCII码 |
调试示例
> ipmitool raw 0x30 0x90 0x08 0x00 0xff 0x00 0xf5
80 30 31
>2.5 VGA前后使能IPMI命令
功能说明
装备阶段切换VGA显示接口(前置VGA / 后置VGA / 正常默认模式)。
首发版本
openUBMC 25.3.0
应用场景
设置VGA前后使能
参数说明
命令格式:ipmitool raw 0x30 0x90 0x52 0x42 0x00 0x01 0x00 0x00 0x00 0x01 {Switch_cmd}
| Switch_cmd | 说明 |
|---|---|
| 0 | 正常默认模式 |
| 2 | 装备前置VGA |
| 3 | 装备后置VGA |
2.6 设置上下电次数和AC IPMI命令
功能说明
装备阶段设置强制上下电次数与AC操作。
参数说明
命令格式:ipmitool raw 0x30 0x90 0x31 {type} {count}
| 参数 | 说明 |
|---|---|
| type==2,count==n | 强制上下电n次 |
| type==3 | AC操作 |
3. 组件扩展案例
3.1 扩展能力概述
manufacture 组件对测试项本身只提供路由转发功能,测试项由各业务组件定义、配置并实现。业务组件通过实现 bmc.kepler.Manufacture 接口即可注册新的装备测试项,无需修改 manufacture 组件。
3.2 扩展点说明
业务组件需实现的接口结构如下图所示:
该接口包含的属性和方法详见 2.1.1 bmc.kepler.Manufacture。
3.3 二次开发指导
步骤一:定义测试项并配置CSR
以ADC电压测试项 Dft3V3Vlot 为例,除实现 bmc.kepler.Manufacture 外还需定义私有属性,CSR配置如下:
"Dft3V3Vlot_1": {
"ItemName": "VCC 3.3V Test",
"Type": 1,
"Id": 20,
"Slot": "${GroupId}",
"DeviceNum": 2,
"ProcessPeriod": 65535,
"PrompteReady": "",
"PrompteFinish": "",
"VoltValue": "#/Accessor_Adc4STBVlot.Value", # 关联到要测试的ADC寄存器
"PowOnStandValue": 2700, # 上电时电压的基准值
"PowOffStandValue": 0, # 下电时电压的基准值
"HystValue": 108, # 电压浮动阈值,实际测量值在 基准值±浮动阈值
"DevPowerStatus": "#/Accessor_PowerGd.Value" # 当前上下电状态
}步骤二:实现RPC方法
伪代码如下:
local result = "Non"
function Start(obj){
obj.Status = "Testing"
-- 电压值测试,假设测试结果为成功
result = "Succeed"
obj.Status = "Complete"
}
function Stop(obj){
obj.Status = "Unstart"
}
function GetResult(obj){
return result, "vlot test ok"
}验证方法
- 配置CSR并加载组件,确认测试项对象成功注册;
- 调用
Start启动测试,确认Status由Unstart变为Testing,测试完成后变为Complete; - 调用
GetResult获取结果,确认返回Succeed/Failed/Non及描述信息; - 调用
Stop停止测试,确认Status回到Unstart。
注意事项
- 只有
Status为Complete时,GetResult才会被 manufacture 组件调用; GetResult的第一个返回值必须是Succeed、Failed、Non三者之一;- CSR中除
Param外的属性通常都来自CSR配置。
4. 日志说明
4.1 一键日志收集
4.2 关键日志信息
| 日志片段 | 日志级别 | 含义解读 | 建议处理动作 |
|---|---|---|---|
| type_list is nil | ERROR | manufacture组件未获取全局测试项句柄 | 根据测试时序图,在manufacture组件初始化后执行一次查询装备测试项个数,确保组件获取到全局测试项句柄 |
5. 问题定界指南
5.1 典型问题定界
| 现象描述 | 是否为本组件问题 | 判断依据 | 关键证据收集方法 |
|---|---|---|---|
启动装备测试项报错 Invalid data field in request | 否 | 原因一:DFT对象未上资源树、index未匹配到正确对象 原因二:组件装备能力被裁剪 | (1)查看manufacture组件app.log是否出现type_list is nil;(2)检查DFT对象是否上资源树及属性是否匹配; (3)检查当前装备模式 |
| 装备测试项测试结果获取异常 | 否 | 测试项由各业务组件实现 | 查看装备测试项对象是否上资源树;确认测试项 Status 是否为 Complete |
读取部件版本只返回 80 | 是 | 版本获取由manufacture组件的 read_version_data.lua 实现,80表示读取到版本号为空串 | 检查FruId、VerType与资源树对象的匹配关系;对比BMC升级/重启前后FruId是否发生变化 |
5.2 错误码速查表
不涉及
5.3 调试方法
开启调试日志
busctl --user call bmc.kepler.manufacture /bmc/kepler/manufacture/MicroComponent bmc.kepler.MicroComponent.Debug SetDlogLevel a{ss}sy 0 debug 2
调试命令
接口方法调试见文档 2. API 使用说明与示例
6. 常见问题解答
Q1:启动装备测试项报错
问题描述:
启动测试项时报错,如 Invalid data field in request。
处理方法:
- 查看manufacture组件调试日志是否出现
type_list is nil错误日志,若出现说明组件未获取到全局测试项句柄 - (index方式启动场景)检查index是否匹配到正确的DFT对象
- 检查DFT对象是否上资源树,属性是否匹配
- 检查BMC装备能力是否被裁剪
Q2:装备测试项获取结果异常
问题描述:
装备测试项获取结果失败,或数据不符合预期。
处理方法:
- 确认测试项
Status已为Complete,且GetResult第一个返回值为Succeed/Failed/Non之一。
Q3:装备模式状态查询异常
问题描述:
装备模式状态查询失败。
处理方法:
- 确认对象路径
/bmc/kepler/Managers/:ManagerId/Manufacture是否存在及服务是否正常。
Q4:读取部件版本为空
问题描述:
IPMI命令读取部件版本,只返回80。
处理方法:
- 读取到部件版本号为空串,通常是因为未能根据FruId、VerType匹配到资源树对象。常见情况是某个对象的FruId经过BMC升级/重启等操作后发生改变,导致此前能查询成功的命令只返回空串。
附录
附录A 参考资料
附录B 修订记录
| 版本 | 日期 | 修订人 | 修订内容 |
|---|---|---|---|
| v1.0 | 2026-08-17 | dengshengang | 修改文档格式,补充API、日志说明、常见问题解答 |