硬盘厂商如何接入openUBMC

1 接入RAID卡的SAS/SATA盘

适配重点是硬盘的SMART信息
代码仓地址:storage:基于 Lua 的存储组件管理项目 - AtomGit

RAID 卡 目录 是否存在 SMART 厂商适配全局变量
华为自研 RAID 卡 src/lualib-src/sml/sml_histore 有(hs_pd.c)
HRDT RAID 卡 src/lualib-src/sml/sml_hrdt 无
博通 RAID 卡 src/lualib-src/sml/sml_lsi 有(sl_pd_smart.c / sl_pd.c)
PMC RAID 卡 src/lualib-src/sml/sml_pmc 无

HRDT / PMC 两类卡的 SMART 数据由 RAID 卡厂商库直接返回(HRDT 经 hrdt_ll_get_pd_smart,PMC 经 pd_info->utilization),无需按硬盘厂商适配 Attribute ID,故其目录下不存在此类全局变量。


1.1 博通 RAID 卡(sml_lsi)

1.1.1 厂商识别辅助表(src/lualib-src/sml/sml_lsi/src/sl_pd.c)

变量 类型 用途
g_vendor_id_vendor_name static PD_VENDOR_ID_VENDOR_NAME_S [] SAS 盘 T10 Vendor ID → 厂商名映射(共 30 项:SEAGATE/WDC/HGST/SANDISK/TOSHIBA/INTEL×2/SAMSUNG/MICRON/LITE_ON/SMI/PHISON/SSSTC/HYNIX/HUAWEI×3/YANGTZE_MEMORY/RAMAXEL/UMIS/DERA/DATSSD/SAGE/HIKSEMI/INSPUR/INNOGRIT/SOLIDIGM/AL)
g_vendor_pn_vendor_name static PD_VENDOR_PN_VENDOR_NAME_S [] 特殊盘 Model Number → 厂商名映射(SMI M.2、HUADIAN H10I/IY 256G)
drive_info_list_lsi / drive_info_list_lsi_len DRIVE_VENDOR_INFO_EXTEND_S * / size_t 从 storage 层经 JSON(lsi_trans_drive_data)动态传入的厂商扩展映射(vendor_name/vendor_id/attr_id_wear);当 g_vendor_attr_id 静态表未命中时,由 GetAttrIdWearoutByVendorName() 兜底查询

1.1.2 SMART Attribute ID 适配表(src/lualib-src/sml/sml_lsi/src/sl_pd_smart.c)

类型均为 static PD_VENDOR_NAME_ATTR_ID_S [],以 {NULL} 结尾,通过 GetAttrIdByVendorName() 按硬盘 manufacturer / model 匹配厂商名后取对应的 SMART Attribute ID。

(1) g_vendor_attr_id —— SATA SSD 剩余磨损率 Attribute ID

使用位置:GetSATARemnantMediaWearOutByVendor()

厂商 Attribute ID
INTEL ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR
SAMSUNG ATA_SMART_ATTRIBUTE_ID_WEAR_LEVELING_COUNT
MICRON ATA_SMART_ATTRIBUTE_ID_PERCENT_LIFETIME_REMAINING
SANDISK ATA_SMART_ATTRIBUTE_ID_DRIVE_LIFETIME_REMAINNING
FUJITSU / SEAGATE / WDC / HGST 0(HDD,不支持)
SMI / LITE_ON_ER2 / LITE_ON_CVZ / PHISON / SSSTC / HYNIX / HUAWEI / RAMAXEL / UMIS ATA_SMART_ATTRIBUTE_ID_DRIVE_TEMPERATURE
LITE_ON_EGT / LITE_ON / YANGTZE_MEMORY ATA_SMART_ATTRIBUTE_ID_DRIVE_LIFETIME_REMAINNING
DERA ATA_SMART_ATTRIBUTE_ID_PERCENT_WEAROUT_REMAINING
DATSSD / SOLIDIGM ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR
HUADIAN ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE

(2) g_vendor_spare_block_attr_id —— 有效冗余块百分比 Attribute ID

使用位置:GetSATASpareBlockByVendor()

厂商 Attribute ID
INTEL ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE
SAMSUNG ATA_SMART_ATTRIBUTE_ID_UNUSED_RSVD_BLK_CNT_TOTAL
HUAWEI ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE

(3) g_vendor_nand_written_attr_id —— NAND 写入量 Attribute ID

使用位置:GetSATANandFlashWrittenByVendor()

厂商 Attribute ID
INTEL ATA_SMART_ATTRIBUTE_ID_NAND_WRITTEN
SAMSUNG ATA_SMART_ATTRIBUTE_ID_FLASH_WRITTEN_OP_COUNT
HUAWEI ATA_SMART_ATTRIBUTE_ID_DRIVE_LIFETIME_REMAINNING

(4) g_vendor_host_written_attr_id —— Host 写入量 Attribute ID

使用位置:GetSATAHostWrittenByVendor()

厂商 Attribute ID
INTEL / SAMSUNG / HUAWEI ATA_SMART_ATTRIBUTE_ID_TOTAL_LBAS_WRITTEN

1.2 华为自研 RAID 卡(sml_histore)

src/lualib-src/sml/sml_histore/src/hs_pd.c

1.2.1 厂商识别表

变量 类型 用途
g_vendor_id_2_vendor_name static PD_VENDOR_ID_VENDOR_NAME_S [] T10 Vendor ID → 厂商名映射(共 30 项,比 LSI 表多 PD_VENDOR_ID_UMIS_2 → UMIS、PD_VENDOR_ID_DAPUSTOR → DAPUSTOR)

1.2.2 SMART Attribute ID 适配表(类型均为 static PD_VENDOR_NAME_ATTR_ID_S [])

(1) g_vendor_name_2_spare_block_id —— 有效冗余块百分比 Attribute ID

厂商 Attribute ID
INTEL ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE
SAMSUNG ATA_SMART_ATTRIBUTE_ID_UNUSED_RSVD_BLK_CNT_TOTAL
HUAWEI ATA_SMART_ATTRIBUTE_ID_AVAILABLE_RESERVED_SPACE

(2) g_vendor_nand_written_attr_id —— NAND 写入量 Attribute ID

厂商 Attribute ID
INTEL ATA_SMART_ATTRIBUTE_ID_NAND_WRITTEN
SAMSUNG ATA_SMART_ATTRIBUTE_ID_FLASH_WRITTEN_OP_COUNT
HUAWEI ATA_SMART_ATTRIBUTE_ID_DRIVE_LIFETIME_REMAINNING

(3) g_vendor_host_written_attr_id —— Host 写入量 Attribute ID

厂商 Attribute ID
INTEL / SAMSUNG / HUAWEI ATA_SMART_ATTRIBUTE_ID_TOTAL_LBAS_WRITTEN

1.2.3 动态厂商扩展表

变量 类型 用途
drive_info_list_his / drive_info_list_his_len DRIVE_VENDOR_INFO_EXTEND_S * / size_t 从 storage 层经 JSON 动态传入的厂商扩展映射(vendor_name/vendor_id/attr_id_wear),extern 声明于 hs_pd.h

说明:histore 的 SSD 磨损率不依赖静态 g_vendor_attr_id 表——SATA 盘优先从华为自定义 SMART(0x5C/0x69/0x4E/0x4F)获取(get_pd_wearout_by_hw_defined),否则直接取 RAID 库返回的 pd_info->wearout(get_pd_wearout_by_pd_info)。


1.3 HRDT RAID 卡(sml_hrdt)

无此类全局变量。SATA 盘 SMART 数据通过 HRDT 厂商库命令 HRDT_LIB_CMD_TYPE_GET_PD_SMART 整体获取(hrdt_ll_get_pd_smart,hr_pd.c),磨损率等信息由库侧解析,BMC 侧无需按硬盘厂商适配 Attribute ID。

1.4 PMC RAID 卡(sml_pmc)

无此类全局变量。SSD 剩余磨损率直接取自 PMC 库返回的 pd_info->utilization(sc_pd.c),BMC 侧无需按硬盘厂商适配 Attribute ID。

2 不接入RAID卡的NVMe盘

相比接入RAID卡的硬盘,功能更完整:

2.1 精简流程

(1)在component_drivers\drivers\pcie_nvme目录下新增一个以厂商名称命名的目录
(2)由于绝大部分NVMe硬盘均遵守标准协议,可以拷贝一份已有的厂商驱动进行差异化修改
(3)csr目录下的文件命名规则:

格式:14140224_PROTOCOL_[VID].dds
示例:14140224_PROTOCOL_19e5.dds
说明:VID=0x19e5,14140224是PCIe NVMe的分类代码

详细流程参考: 硬盘驱动适配指南