可用于装备测试项管理、路由分发及板卡版本信息获取。核心功能包括DFT装备测试项的查询、启动、结果获取,通过IPMI命令获取多种板卡版本,支持VGA前后使能及上下电次数设置。【此简介由AI生成】
当前访问频次受限,请登录后继续访问
1.功能简介
dft装备测试项管理、路由分发;提供一些通用能力,如获取部件版本
2.关键特性
1、dft装备测试项管理、路由分发
测试序列图

2、ipmi获取组件版本 用于装备脚本获取板卡的各种版本信息,包括mcu版本、pcb版本、cpld版本、vrd版本、csr版本、bmc版本等,关键目录:
├─lualib
│ └─external_interface
│ └─ function_get_version.lua # 用于从板卡对象、网卡对象、fru对象获取各种版本信息
└─ ipmi_cmd
└─ read_version_data.lua # ipmi接口的具体实现
具体见对外接口
3、关键目录结构分析
manufacture:
manufacture_manufacture_app.lua # 装备包裁剪部分的组件入口
src:
lualib:
device_chip: # vga接口的单独管理
external_interface: # 汇集其他组件信息提供统一获取接口
ipmi_cmd: # ipmi命令的具体实现
factory.lua # 全局对象句柄注册池
manufacture.lua # 组件入口,包含ipmi注册、rpc注册、对象分发、组件初始化、组件关键线程
manufacture_service.lua # 完成装备路由表的建立和查询接口的封装
3.对外接口
<1> 装备通用测试项ipmi
测试示例
| 测试类型 type | 测试类型 |
|---|---|
| 1 | 直接自检,由APP提供检验结果 |
| 2 | 需要人工干预的前提条件,比如需要接环回头、需要设置屏幕等,由各APP提供测试结果 |
| 3 | 拷机测试项 |
| 4 | 需要人工检查结果,比如LED灯需要人工查看是否正常,需要由装备人员确定检测结果 |
| 5 | 需要人工操作,如button 、LCD |
| 6 | 需要与装备进行交互,需要装备侧软件比对数据来确定测试结果 |
| 255 | 无效的测试项,不进行注册 |
①查询测试项数目
命令模板:0x30 0x90 0x40 type —— type来自上表

表示有 0x12 个自检项
②查询测试项的详细信息
查询方式为遍历查询 raw 0x30 0x90 0x41 0x00 0x20 type index
index 取值范围为 [1, 0x12]
查询结果举例:

举例说明某一次返回值的例子
解析方式为
第0个字节表示状态,通常成功,为00
第1个字节:是否打印完全标志位,00表示打印没有结束,80表示返回打印结束
第2个字节:dftid ,0b转为十六进制转换过来为11,表示对flash的测试
第3,4,5,6字节:slot
第7字节:device_num
第8到后面的字节:测试项描述,可以使用ascll转换工具查看信息

③启动测试 测试项的启动方式根据是否需要参数分为两类:
- 不带参数的测试项启动 (绝大多数测试项都属于此情形)
方式一:
raw 0x30 0x90 0x42 0x00 0x20 type 0x01 index
返回无报错即表明启动测试成功
方式二:
raw 0x30 0x90 0x42 0x00 0x20 type 0x01 dftid slot device_num
其中三元组{dftid,slot,device_num}对应 步骤②查询测试项的详细信息 响应字节[2, 7]
举例启动 Flash的测试:

80表示返回打印结束
- 带参数的测试项启动
方式一:
raw 0x30 0x90 0x42 0x00 0x20 type 0xa1 index param(参数长度一般为1)
方式二:
raw 0x30 0x90 0x42 0x00 0x20 type 0xe1 dftid slot device_num param(参数长度一般为1)
④查询测试项结果
方式一:
raw 0x30 0x90 0x43 0x00 0x20 type index
返回结果举例:

解析方式为
第1个字节:是否打印完全标志位,00表示打印没有结束,80表示返回打印结束
第2个字节:00表示自检结果成功,01表示失败,ff表示不涉及
第3个字节:dftid ,0b表示flash
第4,5,6,7字节:slot
第8字节:device_num
第9到后面的字节:测试项描述,可以使用ascll转换工具查看信息
方式二:
raw 0x30 0x90 0x43 0x00 0x20 type dftid slot device_num

与方式一结果相同
⑤停止测试
方式一:
raw 0x30 0x90 0x42 0x00 0x20 type 0x00 index
返回无报错即表明启动测试成功
方式二:
raw 0x30 0x90 0x42 0x00 0x20 type 0x00 dftid slot device_num
<2> 版本获取ipmi
命令格式: 0x30 0x90 0x08 {fruid} {type} 0x00 0xff
返回值:80/00 版本字符串的每一位的Ascii码
type取值范围:
| type | cmd |
|---|---|
| pcb version | 0x00 |
| bmc main version | 0x01 |
| cpld version | 0x02 |
| fpga version | 0x03 |
| 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 |
| psip version | 0x1C |
| coprocessor version | 0x1D |
| all version(fruid = 0) | 0xFF |
<3> vga 前后使能命令ipmi
0x30 0x90 0x52 0x42 0x00 0x01 0x00 0x00 0x00 0x01 ${Swich_cmd}
Swich_cmd取值范围 2:装备前置VGA
3:装备后置VGA
0:正常默认模式
<4>ipmi:设置上下电次数和ac
0x30 0x90 0x31 {type} {count}
type == 2 count == n 表示强制上下电n次
type == 3 表示ac
4.配置介绍
装备组件对测试项本身只提供路由转发功能,测试项由各个相关组件定义、配置以及实现功能调用
组件需要实现的接口:

该接口包含属性:
ItemName: 测试项名称
Type: 测试项类型
Id: 测试项id
Slot: 测试项所在槽位(分组)
DeviceNum: 设备数量
ProcessPeriod: 测试时长
PrompteReady: 测试前提示
PrompteFinish: 测试完成提示
Param: 测试参数
Status: 当前测试状态,取值"Complete","Testing","Unstart"
以及三个测试方法:
Start(): 启动测试
Stop(): 停止测试
GetResult(): 获取测试结果。返回值:两个字符串。第一个字符串必须为枚举{"Succeed","Failed","Non"}中一个。第二个字符串为任意长提示字符
组件使用时通常做三件事:
1. 定义测试项名称,实现 bmc.kepler.Manufacture 接口,并定义测试需要使用到的私有属性
2. 实现测试方法注册,有如下规则:
(1)Start/Stop 不需要返回值,通过维护Status状态来表示当前测试情况,启动测试时要将Status置为Testing或者Complete,结束测试时要置为Unstart
(2)GetResult 有两个返回值,第一个为字符串,限制为这三个{"Succeed","Failed","Non"},分别表示测试项成功、失败和不涉及结果查询。
第二个字符串为测试描述,可以返回提示语表示当前测试项的状况。
(3)Status和GetResult需要配合使用,GetResult只有在Status已经置为Complete时才可以被装备组件调用到。
3. 配置测试项CSR,除了Param属性外的所有属性通常都来自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"
}