【已评审】支持器件数据读取自定义调试命令

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属于敏感信息。
结论:通过寄存器偏移来访问对应的寄存器,这个是芯片的通用使用方式,并不属于敏感信息

1、背景补充历史版本的调试命令能力,用于与当前提供的命令能力做对比
2、bmc.kepler.Release.Chip.BlockIO接口命名不合理,调试接口要满足后续的扩展,不能约束只面向BlockIO场景,可以在方法中指定BlockRead的方式。