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卡的硬盘,功能更完整:
- 获取硬盘基本信息(厂商、型号、序列号、固件版本等)
- 监控硬盘状态(温度、健康状态、寿命等)
- 读取SMART信息(读写次数、错误率等)
- 获取硬盘容量和使用情况
- 故障诊断和日志收集
代码仓地址:component_drivers:基于 openUBMC 的硬件设备驱动组件项目 - AtomGit
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的分类代码
详细流程参考: 硬盘驱动适配指南