适配佰维 SATA SSD,搭配SP686C-M-16i时,厂商信息显示ATA。

问题描述

伙伴新适配佰维 SATA SSD,搭配SP686C-M-16i时,厂商信息显示ATA。

环境信息

  • 操作系统:windows11

  • BMC软件版本:伙伴基于OpenUBMC251230LTS版本增量开发

  • 服务器硬件配置:SP686C-M-16i + 佰维SATA SSD

重现步骤

  1. 登陆BMC web

  2. 进入 系统管理 - 存储管理界面

  3. 查看硬盘信息,重点检查厂商和剩余磨损率信息。

期望结果

厂商和剩余磨损率显示正常

实际结果

厂商仍显示为ATA

查看日志显示传输数据失败。test:打印是伙伴自己加的调试日志,证明佰维厂商信息已加入

尝试过的解决方案

同BMC版本搭配博通Raid卡时,厂商信息能正常显示

伙伴适配代码

诉求

搭配SP686C系列Raid卡时,厂商信息能够正常显示

答案内容由AI生成,仅供参考:

:bar_chart: 总结与结论

项目 当前状态
根本原因 SP686C-M-16i RAID 卡未能正确上报物理盘的 Manufacturer 信息,BMC 默认显示 ATA
驱动问题 trans drive data failed ret[0x10c2] 表明数据传输失败
代码问题 厂商 ID 冲突(F41532 重复)、名称拼写错误(BIMIN vs BITIN)导致匹配无效
根本解决路径 1. 修复厂商映射
2. 验证并修复 RAID 卡驱动上报能力
3. 加载必要 .sr 配置
4. 必要时启用 Model-based fallback
点击此处查看详细分析解答

佰维 SATA SSD 搭配 SP686C-M-16i RAID 卡厂商信息显示异常分析与解决方案

:pushpin: 问题概述

在基于 OpenUBMC 251230 LTS 开发的 BMC 系统中,使用 SP686C-M-16i RAID 卡佰维(BIWIN)SATA SSD 组合时,硬盘的 厂商信息显示为 ATA,而非预期的 “BIWIN” 或 “佰维”,且部分日志提示“传输数据失败”。尽管已尝试添加厂商适配代码,问题依然存在。


:magnifying_glass_tilted_left: 根究根本原因分析

1. 当前显示“ATA”的根本原因

  • ATA 是标准固件识别字段缺失时的默认占位符

  • 在 SATA 接口硬盘中,Manufacturer 字段若未被 RAID 控制器从硬盘的 VPD(Vital Product Data)或 ATA IDENTIFY DATA 中成功读取,BMC 层默认返回 "ATA" 作为厂商名称。

  • 根据知识库中的信息:

    bmc.dev.NVMe.ProductInfo 接口用于提供硬盘的 Model, SerialNumber, Manufacturer 等信息。
    GetIdentifyData 方法通过 NVMe-MI 或 ATA IDENTIFY 命令获取设备信息。

    因此,Manufacturer 数据来源于硬件识别协议(如 ATA Identify),且依赖 RAID 卡的带外管理能力将数据上报给 BMC。


2. SP686C-M-16i RAID 卡与博通卡的关键差异

从用户提供的对比图可以看出:

特性 SP686C-M-16i Broadcom 9560-8i
是否支持完整带外管理? :cross_mark: 不完全支持 :white_check_mark: 完全支持
是否能读取 Manufacturer :cross_mark: 无法读取 :white_check_mark: 可正常读取并显示 BIWIN
使用 SDK 支持情况 未知/非 BRCM SDK BRCM SDK 完善支持
是否属于 openUBMC 原生支持列表?

结论:SP686C-M-16i 可能并未像 Broadcom RAID 卡那样,完整实现带外(Out-of-Band)管理下的物理硬盘属性透传功能。这导致即使 BMC 层代码已适配 BIWIN 厂商,上游(RAID 卡)未提供正确的 VPD/Identify 数据,最终仍显示默认值 "ATA"


3. 适配代码分析与潜在缺陷

用户已尝试在 Lua 层添加如下代码:

PD_VENDOR_ID_BIWIN = 0xF41532,
PD_VENDOR_NAME_BIWIN = 'BIWIN'

并在 DRIVE_VENDOR_TABLE 中加入:

[vendor_name = pd_vendor_name.PD_VENDOR_NAME_BITIN, vendor_id = pd_vendor_id.PD_VENDOR_ID_BITIN,
 attr_id_wear = pd_attrid_id.wear.ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR],

存在的问题:

  1. 厂商 ID 重复冲突

    • F41532 这个 Vendor ID 同时赋予了两个厂商:PETAIOBIWIN
    • 严重错误:相同 ID 映射多个厂商,系统无法区分,会导致匹配失败或随机匹配。
  2. 拼写错误影响匹配

    • 日志显示:
      test:vendor is 50C6BE, vendor name is BIMIN
      
    • 而代码中写的是:
      PD_VENDOR_NAME_BITIN = 'BITIN'
      
    • “BITIN” ≠ “BIMIN”名称不一致导致无法匹配生效
  3. RAID 卡未正确上报 Vendor ID

    • 即使 BMC 配置正确,若 RAID 卡驱动未从 ATA IDENTIFY DATA 的第 10~19 Word 或串行号中提取出有效厂商标识,该字段直接为空或为默认值 "ATA"
    • 日志中关键报错证实此路径异常:
      sml_pd trans drive data: trans drive data failed ret[0x10c2]
      
      说明:RAID 卡驱动在传输物理盘数据时失败(错误码 0x10c2),意味着底层通信未成功完成,数据无法送达 BMC。

:white_check_mark: 解决方案建议

:white_check_mark: 1. 修正适配代码中的逻辑错误

修改建议(修正重复ID和名称):

-- 为 BIWIN 分配唯一、正确的 Vendor ID(需从其硬盘实际 ATA Identify 中获取)
local pd_vendor_id = {
    ...
    PD_VENDOR_ID_BIWIN = 0x50C6BE,  -- 依据日志中的 'BIMIN' 实际对应 ID
}

local pd_vendor_name = {
    ...
    PD_VENDOR_NAME_BIWIN = 'BIWIN',
}

并更新映射表:

DRIVE_VENDOR_TABLE = {
    ...
    [vendor_name = pd_vendor_name.PD_VENDOR_NAME_BIWIN, 
     vendor_id = pd_vendor_id.PD_VENDOR_ID_BIWIN,
     attr_id_wear = pd_attrid_id.wear.ATA_SMART_ATTRIBUTE_ID_MEDIA_WEAROUT_INDICATOR],
}

:warning: 关键点:确保 vendor_id 是从实际硬盘的 IDENTIFY DEVICE 数据中提取的 Word 10-23(Manufacturer String),或通过 GetIdentifyData 获取的唯一标识。


:white_check_mark: 2. 验证并修复 RAID 卡驱动数据上报问题

分析错误日志:

storage ERROR: sml_ctrl.c(984): sml_pd trans drive data: trans drive data failed ret[0x10c2]
  • 0x10c2 通常是厂商自定义错误码,表示 RAID 卡固件未能成功执行命令,可能原因包括:
    • I2C/SMBus 通信问题
    • RAID 控制器未完成初始化
    • 协议不兼容(如不支持 ATA IDENTIFY DEVICE 命令下发)

建议行动:

  1. 确认 SP686C-M-16i 是否支持带外物理盘信息采集

    • 联系 SP686C-M-16i 的厂商,确认其是否支持 OOB(带外)方式读取 SATA 盘的 IDENTIFY DATA
    • 若不支持,则无法通过现有方式获取厂商信息,必须依赖 Host Agent 代理或固件升级。
  2. 检查是否需加载特定 SR 文件(Secure Registry)

    • 类似于以下文件缺失会引起驱动无法识别:

      vendor/Broadcom/Raid/14140130_100000e6_10004060.sr — Broadcum RAID 驱动所需 SR 文件

    • 检查是否有对应 SP686C-M-16i.sr 文件未包含在镜像中。
  3. 尝试通过 Host Agent 上报数据

    • 若 RAID 卡无法独立完成上报,可由 host agent 采集 ATA Identify 数据并通过 REST API 或 MCTP 上传至 BMC。
    • BMC 端可通过 /redfish/v1/Systems/1/Storage 接口获取,并覆盖默认 "ATA"

:white_check_mark: 3. 启用 Fallback 机制:手动绑定 Manufacturer

作为一种临时或过渡方案,可实现 基于 Serial Number 前缀/Model 匹配 的 fallback 厂商识别逻辑。

示例 Lua 代码增强:

function get_vendor_by_model(model)
    if string.find(model, "CSE25Y8BA10") then
        return "BIWIN"
    end
    return "ATA"
end

-- 替代默认“ATA”返回
drive.Manufacturer = get_vendor_by_model(drive.Model) or "ATA"
  • 优点:绕过 RAID 卡限制,实现基本显示。
  • 缺点:非标准做法,不利于大规模部署和自动化。

:white_check_mark: 4. 升级或替换 RAID 卡驱动(长期推荐)

方案 描述
方案A:推动 SP686C-M-16i 厂商支持 OOB VPD 上报 请求提供完整 DDK/SDK 并支持 ATA Identify 命令下发
方案B:替换为博通系列 RAID 卡(如 9560-16i) 已验证兼容 openUBMC 且支持完整带外管理
方案C:等待 openUBMC 南向驱动框架统一支持 根据计划,2026年将完成南向驱动框架对各类 RAID 卡的统一支持

:bar_chart: 总结与结论

项目 当前状态
根本原因 SP686C-M-16i RAID 卡未能正确上报物理盘的 Manufacturer 信息,BMC 默认显示 ATA
驱动问题 trans drive data failed ret[0x10c2] 表明数据传输失败
代码问题 厂商 ID 冲突(F41532 重复)、名称拼写错误(BIMIN vs BITIN)导致匹配无效
根本解决路径 1. 修复厂商映射
2. 验证并修复 RAID 卡驱动上报能力
3. 加载必要 .sr 配置
4. 必要时启用 Model-based fallback

:memo: 最终建议

:white_check_mark: 推荐路径:

  1. 立即:修正代码中厂商 ID 和名称,确保唯一性,避免冲突;
  2. 同步:联系 SP686C-M-16i 厂商技术支持,确认是否支持 ATA IDENTIFY DEVICE 命令的带外执行;
  3. 验证:检查是否缺少 .sr 配置文件或私有协议支持;
  4. 备选:如短期无法支持,可在 BMC 实现基于 Model 的 Manufacturer fallback 显示;
  5. 长期:评估切换为已完全支持的 Broadcom RAID 卡 或等待 2026 年 openUBMC 南向驱动框架统一支持。

:yellow_circle: 提示"ATA" 是标准协议下的“未定义厂商”占位符,不代表 BMC 配置错误,而是上游设备未提供有效数据。应视为 RAID 卡兼容性问题,非 BMC 本身 Bug。


:white_check_mark: 目标可达性判断在 SP686C-M-16i 支持 OOB 前提下,可通过驱动修复实现正常显示;否则需依赖 Host Agent 或 fallback 方案。

应该是已知问题,图中0x10c2 错误码对应SML_ERR_NULL_INFTERFACE表示没有对应接口,参考下面的PR修改
【修改描述】头文件变更同步-storage-AtomGit | GitCode

// gint32 his_trans_drive_data(const char* json_raw_data)
gint32 histore_trans_drive_data(const char* json_raw_data)
1 个赞

感谢,修改后问题解决。需要注意构建时打开sml_open参数。

1 个赞