issue链接
背景
在release版本下,BMC缺乏直接读取器件数据的手段,无法获取到实时硬件数据,定界定位问题困难,期望添加相关调试查询手段。
历史版本有调试命令i2cread,功能类似i2ctool,可以向i2c总线指定地址、偏移读取指定长度数据
解决方案
提供在线调试命令功能,支持组件自定义命令读取硬件数据,便于快速定界定位问题。参数参考bmc.kepler.Chip.BlockIO接口下的Read方法。
流程图
sequenceDiagram
participant User as mdbctl
participant hwproxy as hwproxy
participant hardware as 硬件
Note over User,hardware: 运行阶段
User->>hwproxy: 硬件数据读取命令
hwproxy->>hardware: 读取硬件数据
hardware-->>hwproxy: 返回硬件读取数据
hwproxy-->>User: 返回硬件读取数据
决策点
1、在如下资源协作路径下新增接口bmc.kepler.Release.Chip,并新增方法Read
/bmc/kepler/Chip/Eeprom/:Id
/bmc/kepler/Chip/Smc/:Id
/bmc/kepler/Chip/Complex/:Id
/bmc/kepler/Chip/CpldChip/:Id
/bmc/kepler/Chip/Vrd/:Id
/bmc/kepler/Chip/Cpld/:Id
/bmc/kepler/Chip/CanbusChip/:Id
/bmc/kepler/Chip/Rtc/:Id
/bmc/kepler/Chip/PowerMeter/Ina/:Id
2、hwproxy组件新增mdbctl自定义命令read
详细描述
1、新增资源协作接口bmc.kepler.Release.Chip及方法
| 方法名称 | 变化类型 | 请求签名 | 响应签名 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|
| Read | 新增方法 | uu | ay | DiagnoseMgmt | NA | NA | 请求参数:· Offset:读取的offset,偏移位置· Length:读取长度响应参数:· OutData:读取的结果 | NA |
2、新增组件调测命令
Usage: read <ObjectName> <Offset> <Length>
读取器件指定偏移、长度的数据.
| 参数名称 | 参数签名 | 参数说明 |
|---|---|---|
| ObjectName | s | 器件对象名. |
| Offset | u | 器件偏移 |
| Length | u | 读取的数据长度 |
组件命令效果:
mds配置
{
"Eeprom": {
"path": "/bmc/kepler/Chip/Eeprom/:Id",
"interfaces": {
"bmc.kepler.Release.Chip": {
"methods": {
"Read": {
"cmdName": "read",
"req": {
"Offset": {
"baseType": "U32",
"displayDescription": "The register's byte offset relative to the device base address."
},
"Length": {
"baseType": "U32",
"displayDescription": "The length of data to be read ."
}
},
"rsp": {
"OutData": {
"baseType": "U8[]",
"displayDescription": "Data read from chip."
}
},
"displayDescription": "Read the specified length of content from the offset position of the chip by byte."
}
}
}
}
}
}
其他器件接口配置和示例相同,仅路径不同。
评审结论
1、同意在支持块读的器件路径下新增接口bmc.kepler.Release.Chip,并新增方法Read,用于读取指定器件数据,请求签名为uu,响应签名为ay,权限DiagnoseMgmt;
2、同意hwproxy组件新增mdbctl自定义命令read, 参数说明参考详细描述。
遗留问题及确认结论
1、可定位性应该优先通过一键收集提供
结论:一键收集有提供最近十次错误日志的收集能力。但自定义命令也是需要的,自定义命令方便在线调试,提升定位效率,可以实时读取到硬件寄存器内的数据。而且日志收集也不会收集正常读写的数据,在读取正常但数据异常的场景不会收集,增加收集能力会提升日志大小。因此,既要做一键收集,也要做自定义命令。
2、确认参数中需不需要传入对象名称
结论:资源协作接口方法不需要对象名作为参数,组件调测命令需要对象名作为参数。
3、暴露Read接口可能存在安全风险,需要确认下,公司有要求不让用户指定偏移去作读写,芯片offset属于敏感信息。
结论:通过寄存器偏移来访问对应的寄存器,这个是芯片的通用使用方式,并不属于敏感信息
