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 关键术语表

术语解释
DFTDesign For Test,面向测试的设计,指硬件/固件在设计阶段为生产测试预留的能力
装备测试项装备阶段触发的部件测试项目,有直接自检、拷机测试、人工检查、人工操作等类型
装备模式单板所处的装备阶段状态,0表示FT阶段,1表示ST阶段或正常运行阶段

1.5 外部交互边界图

装备测试项执行时序图

2. API 使用说明与示例

2.1 资源协作接口概览

2.1.1 bmc.kepler.Manufacture

属性

属性名类型读写取值范围说明
TypeU8RO1~6装备测试项类型,1人工自检,2需要人工准备前置条件,3拷机测试,4人工检查结果,5人工操作测试,6与装备交互测试
IdU8RONA装备测试项id
SlotU32RONA槽位号
DeviceNumU8RONA设备id
ParamU8[]RWNA测试项传入的参数
ItemNameStringRONA测试项名称
PrompteReadyStringRONA测试前交互提示
PrompteFinishStringRONA测试完成交互提示
ProcessPeriodU16RONA测试所需时间
StatusStringROComplete、Testing、Unstart(默认值:Unstart)当前测试状态

方法

方法名入参出参说明
Start开始装备测试项
Stop停止装备测试项
GetResultStatus: String, Description: String获取装备测试项结果

备注:

  • StartStop 无返回值,测试进展通过 Status 属性维护:启动测试时将 Status 置为 TestingComplete,停止测试时置为 Unstart
  • GetResult 的出参 Status 为枚举,取值为 Succeed(测试成功)、Failed(测试失败)、Non(不涉及结果查询);出参 Description 为测试项描述字符串。
  • Status 属性与 GetResult 方法配合使用,只有 StatusComplete 时装备组件才会调用 GetResult

2.1.2 bmc.kepler.Manufacture.Status

装备模式状态接口,用于查询单板当前的装备模式与装备使能状态。

path: /bmc/kepler/Managers/:ManagerId/Manufacture

属性

属性名类型读写取值范围说明
ModeU8RO0、1装备模式:0表示FT阶段,1表示ST阶段或者正常运行阶段
EnabledBooleanROtrue、false装备使能:false表示未使能,true表示使能

2.1.3 bmc.kepler.Manufacture.Extension

装备扩展接口,用于Multihost场景下标识system编号。

属性

属性名类型读写取值范围说明
SystemIdU16RONA(默认值:1)Multihost环境下system编号

2.1.4 bmc.kepler.Manufacture.Simulate

属性

属性名类型读写取值范围说明
VrdUpgradeSimulatedU8RW0、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来自上文测试类型表。

bash
> 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。

bash
> 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的测试:

bash
> 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}

bash
> 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}

bash
> 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

返回值与异常

字节顺序域内容
1Completion Code
2是否使能状态命令:
0=Disable DFT Command.
1=Enable DFT Command.
3装备模式:
0=装备框,FT环节
1=产品框(用于BMC区分当时装备处于FT还是ST模式,由装备程序设置)

调试示例

bash
> 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

typecmd
pcb version0x00
bmc main version0x01
cpld version0x02
sdr version0x05
bios version0x06
uboot version0x08
bmc backup version0x0C
uboot backup version0x10
bmc available version0x18
sr version0x19
vrd version0x1A
mcu version0x1B
all version(fruid = 0)0xFF

返回值与异常

字节顺序域内容
1Completion Code
2表示数据是否结束:
80=结束.
00=未结束.
3~N版本字符串各字节的ASCII码

调试示例

bash
> 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==3AC操作

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配置如下:

json
"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方法

伪代码如下:

lua
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"
}

验证方法

  1. 配置CSR并加载组件,确认测试项对象成功注册;
  2. 调用 Start 启动测试,确认 StatusUnstart 变为 Testing,测试完成后变为 Complete
  3. 调用 GetResult 获取结果,确认返回 Succeed/Failed/Non 及描述信息;
  4. 调用 Stop 停止测试,确认 Status 回到 Unstart

注意事项

  • 只有 StatusComplete 时,GetResult 才会被 manufacture 组件调用;
  • GetResult 的第一个返回值必须是 SucceedFailedNon 三者之一;
  • CSR中除 Param 外的属性通常都来自CSR配置。

4. 日志说明

4.1 一键日志收集

4.2 关键日志信息

日志片段日志级别含义解读建议处理动作
type_list is nilERRORmanufacture组件未获取全局测试项句柄根据测试时序图,在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.02026-08-17dengshengang修改文档格式,补充API、日志说明、常见问题解答