无法读取nvme固态盘的固件信息

问题描述:在带内用相同偏移量可以获取到PM9D3a nvme 硬盘固件版本号,在bmc 测nvme-mi+相同偏移量获取到为空,请支撑解决。

SSD型号:Samsung PM9D3a

问题分析:通过打印storage组件版本获取流程可知,此ssd固件偏移量未适配


通过此固件手册可知固件偏移量为64

添加此固态对应偏移量后依旧无法读取

打印读出信息为空


读取偏移量相同的情况下对比os下读取的数据不相同

你好,建议查找盘加载对应的Chip
对象后,使用该命令直接读取数据为多少确定是软件实现问题还是硬件上报有误
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Complex/<Chip对象> bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 <读取数据长度>,在对应偏移找到预期的数据

e.g. Chip对象:Chip_Virtual_SSD_01010211

你好,请问盘加载对应的chip有什么方法可以确认吗?

使用mdbctl lsobj Drive和mdbctl lsobj Chip查找所有硬盘对象和Chip对象。然后通过mdbctl lsprop <对象名>的Name属性找到对应的disk几,再根据最后的路径匹配对应的Chip_Virtual_SSD对象,如:Drive_1_01010C匹配的是Chip_Virtual_SSD_01010C01

Drive如下


其下chip如下
image
读出数据如下
image
os如下
image

两边读取数据不符

能确定os命令读取的盘和bmc下是一个吗,我们是根据标准NVMe读取的VPD数据

可以确定是同一个盘

带内带外数据读取不一致需要咨询对应硬盘厂商:
1、确定带内os下的命令实现逻辑,是否为获取的VPD中的数据
2、带外管理中读取VPD的芯片的地址是否与标准协议一致

你好,再使用Chip_SSD对应位置读取一下偏移信息呢
带内读取后解析数据为LDD5302Q,这个是预期的固件版本吗

1.带内读取解析数据为预期固件版本
2.web下如图,框选区域均为目标适配盘


3.OS下如图


4.OS对应BMC

5.使用busctl
先确定为同一个盘

查看chip

(1)使用virtual chip

(2)使用chip

可以看到使用virtual chip读出的数据为76 84 45 48 48 66 48 55,按10进制转换为ASCII码,对应的数据为LT-00B07,看起来是符合你截图中带内的数据呢。建议该问题与硬盘厂家确认带外读取的偏移是否和带内一致,导致带内带外数据不一致的问题
image



已经问清楚三星硬盘厂商,他们这个盘不支持vpd 获取 firmware version 他们vpd 结构里没有固件版本信息,只支持Admin command (PCIe通道) 读固件版本信息,请问代码里该使用什么接口去读这个信息。

该盘如果支持nvme-mi协议,我们当前已支持带外通过mctp over pcie获取硬盘信息,可参考开源组件storage仓。并且identity command我们已实现部分,具体协议部分可参考src/lualib/nvme/nvme_mi_protocol文件夹下代码实现

通过identify命令获取版本成功