ocy
(wuzhou-ouchangyun)
1
问题描述
web界面上设置NVME定位状态或通过busctrl直接操作SMC,实际硬盘背板点灯失败,但是通过SMC进入装备模式,硬盘背板灯能全亮。
环境信息
-
软件版本:OpenUBMC2509
-
硬盘背板CPLD版本:3.07
-
硬盘背板型号:BC83NHBC
重现步骤
1.网页操作,点击确认后,提示操作成功,但实际点灯失败
期望结果
NVME定位点灯正常
实际结果
web界面显示定位状态设置成功,但是实际对应NVME灯没有点亮
尝试过的解决方案
1.使用busctl直接操作SMC
先获取硬盘状态,但是27 0对应SMC表中,NVME状态似乎不对,BMC复位硬盘状态寄存器显示的为执行复位硬盘
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100
2.执行设置
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04,灯无变化,同时在通过Read a{ss}uu 0 0x14000500 100读取,依旧对应的值没有发生变化还是27 0
1 个赞
答案内容由AI生成,仅供参考:
NVMe 定位点灯失败问题分析与解决方案
根据您提供的详细信息,该问题表现为在 OpenUBMC 2509 系统中,通过 Web 界面或 busctl 命令尝试点亮 NVMe 硬盘的定位灯(Locate LED)时操作返回成功,但实际硬件背板上的定位灯未点亮。同时,在 SMC 装备模式下,背板灯可被正常点亮,说明 LED 物理电路正常。以下基于知识库内容进行系统性分析与定位。
一、问题现象总结
| 项目 |
内容 |
| 问题类型 |
NVMe 定位灯控制失效 |
| 发生环境 |
OpenUBMC v25.09 |
| 硬件平台 |
BC83NHBC 型号硬盘背板,CPLD 版本 3.07 |
| 触发方式 |
Web 界面设置“定位状态” 或 使用 busctl 操作 SMC 寄存器 |
| 预期结果 |
对应 NVMe 插槽的定位灯闪烁 |
| 实际结果 |
操作返回成功,但灯未亮 |
| 特殊现象 |
SMC 装备模式可点亮所有灯 → 排除 LED 硬件故障 |
二、根本原因分析
1. 控制链路结构说明
从知识库信息可知,NVMe 定位灯的控制流程如下:
Web / IPMI → openUBMC (BMC) → SR配置文件 → Scanner/Accessor → SMC芯片 → CPLD → LED物理灯
其中:
SetLocateLed 属性用于触发定位灯。
Scanner_DriveXLocateAccessor 和 Accessor_DriveXLocateAccessor 是 SR 中定义的寄存器读写接口。
- SMC(System Management Controller) 作为中间控制器,通过 I2C 与 BMC 通信,并向 CPLD 发送命令。
- CPLD(复杂可编程逻辑器件) 直接驱动 LED,是最终执行单元。
见关系图:Hard Disk LED Lighting 影响 NVMe Disk
见文档 chunk 3:NVMe 定位灯功能通过向背板发送 SMC 命令 实现
2. 故障点排查结论
尽管上层指令执行成功(返回成功),但底层 LED 无反应,结合 busctl 操作无效和寄存器值未变的现象,可得出:
已排除的可能原因:
- 物理 LED 损坏:SMC 装备模式下灯能亮,证明 LED 与驱动电路正常。
- 网络或接口问题:Web 操作提示“成功”,说明命令已送达 BMC 并处理。
- 权限或认证问题:操作未报错。
疑似根本原因:
硬盘背板 CPLD 固件版本(3.07)存在 LED 控制逻辑缺陷,导致无法响应来自 SMC 的点灯指令。
支持该判断的关键证据包括:
-
历史案例完全一致
- 见 Document Chunk 1:之前有相同问题(通过 IPMI 设置故障灯失败)被定位为“硬盘背板 CPLD 存在问题”,解决方案为 升级硬盘背板固件。
- 结论原文:“问题排除,当前定位原因为硬盘背板的CPLD存在问题,解决方式为升级新的硬盘背板的固件版本。升级版本并且生效后可以通过ipmi正常查询故障灯状态。”
-
busctl 操作无效佐证底层通信失败
- 用户尝试使用
busctl 直接调用 SMC 的 BitIO Write 向地址 0x14000609 写入值 0x1b 0x04,但后续 Read 发现值未更新(仍为 27 0),说明:
- SMC 未正确接收或处理写入请求;
- 或 CPLD 忽略了该命令;
- 或状态同步机制异常。
- 结合“装备模式灯能亮”,说明只有在特殊测试模式下才绕过主控逻辑直接点亮,进一步表明日常管理模式存在指令拦截或解析错误。
-
CPLD 在 NVMe LED 控制中的核心作用
- 搜索结果提及:“CPLD点灯能力是否正常,可通过带内点灯进行交叉验证”
- 且
Scanner_DriveXFalutAccessor 等对象配置了 Offset、Mask、Size 等寄存器参数,若 CPLD 固件对寄存器映射不兼容,则无法执行动作。
三、解决方案建议
推荐措施:升级硬盘背板 CPLD 固件
步骤如下:
-
确认是否存在更高版本的 CPLD 固件
- 查询华为官方发布渠道或内部固件仓库,确认当前 BC83NHBC 背板是否有 高于 3.07 的 CPLD 版本。
- 示例文件:
ubmc_YunHe_920S_L1.hpm 正是用来升级 CPLD 的 HPM 格式固件包。
-
准备固件并上传
- 将新版本 CPLD 固件通过 Web 界面或 CLI 工具上传至 BMC。
-
执行升级操作
# 示例命令(实际路径根据系统而定)
ipmitool fw update start <filename.hpm>
或通过 Web 界面路径:
iBMC管理 → 固件升级 → 固件更新
-
重启并验证
- 固件升级完成后执行冷重启(断电生效)。
- 进入 Web 界面重新操作“定位灯”,观察是否正常点亮。
- 使用
busctl 再次读取寄存器值,确认已修改。
备选方案(临时调试)
如果暂无更高版本固件,可尝试以下调试手段定位:
1. 检查 SR 配置中定位灯寄存器定义是否正确
参考 CSR 字典配置:
"SetLocateLed": "#/Accessor_Drive3LocateAccessor.Value",
"LocateLed": "<=/Scanner_Drive3LocateAccessor.Value"
- 查看
/vendor/openUBMC/BC83NHBC_*.sr 文件中是否正确定义了:
Offset, Mask, Size, Chip(应为 #/Smc_EnclSMC)
- 可比对其他已知正常机型的 SR 文件。
2. 验证 SMC 命令是否被正确路由
# 先读初始状态
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100
# 再尝试写定位灯(以 slot 8 为例)
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04
# 再次读取,确认值是否改变
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100
若值始终不变,则基本可断定:CPLD 固件过滤或拒绝了该写入请求。
四、预防建议
| 建议项 |
说明 |
| 统一维护 CPLD 固件版本 |
建立硬件兼容性列表,确保背板 CPLD 与 openUBMC 版本匹配 |
| 发布前集成测试 |
在新版本 openUBMC 发布前,需覆盖点灯、状态读取等功能测试 |
| 保留装备模式入口 |
用于紧急场景下的硬件自检与诊断 |
五、总结
| 项目 |
结论 |
| 问题定位 |
硬盘背板 CPLD 固件版本 3.07 存在控制逻辑缺陷,无法响应 SMC 下发的 NVMe 定位灯指令 |
| 根本原因 |
CPLD 固件未正确处理来自 SMC 的 BitIO 写命令,导致 LED 无法触发 |
| 解决方法 |
升级硬盘背板 CPLD 至最新版本固件(>3.07) |
| 支撑证据 |
既有案例表明同类问题(LED 控制失效)通过升级 CPLD 解决;busctl 操作无效;装备模式灯可亮 |
最终建议行动:联系华为技术支持获取适用于 BC83NHBC 背板的最新 CPLD 固件包,并执行升级操作。
相关链接:
- 关于通过ipmi命令查询硬盘故障灯的问题
- web上无法更新BIOS、BMC等固件包
- V3 上适配nvme盘个人总结
- 点定位灯之后,硬盘信息消失
- 硬盘背板开发指南 | 文档中心 | openUBMC
ocy
(wuzhou-ouchangyun)
3
CPLD版本根据官网查询已经是最新版本
对storage组件中nvme_object.lua增加了部分日志打印,点击触发定位的app.log如下
2026-01-22 08:17:36.132146 storage NOTICE: rpc_service_drive.lua(59): [Storage]Start SetLocationIndicatorState of Disk8
2026-01-22 08:17:36.177102 storage NOTICE: rpc_service_drive.lua(78): [Storage]Successfully SetLocationIndicatorState of Disk8.
2026-01-22 08:17:41.565377 storage ERROR: nvme_object.lua(670): Starting update_res_id, ref_component: table: 0x7fd527586850
2026-01-22 08:17:41.565653 storage ERROR: nvme_object.lua(671): self.nvme_info: table: 0x7fd50f4ac5f8
2026-01-22 08:17:41.566782 storage ERROR: nvme_object.lua(672): ref_component.path: /bmc/kepler/Systems/1/Components/Component_PCIeCard1_0101020101
2026-01-22 08:17:41.567044 storage ERROR: nvme_object.lua(673): ref_component.Instance: nil
2026-01-22 08:17:41.567250 storage ERROR: nvme_object.lua(674): ref_component.Type: nil
2026-01-22 08:17:41.627901 storage ERROR: nvme_object.lua(689): Successfully got PcieAddrInfo list, count: 0
2026-01-22 08:17:41.630325 storage ERROR: nvme_object.lua(704): Successfully retrieved ref_component
2026-01-22 08:17:41.632635 storage ERROR: nvme_object.lua(706): ref_component.Instance=8, ref_component.Type=2
2026-01-22 08:17:41.633526 storage ERROR: nvme_object.lua(708): obj_list num: 0
2026-01-22 08:17:41.638393 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=10, ComponentType=2, SocketID=0
2026-01-22 08:17:41.643462 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=9, ComponentType=2, SocketID=0
2026-01-22 08:17:41.649925 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=11, ComponentType=2, SocketID=0
2026-01-22 08:17:41.654025 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=10, ComponentType=2, SocketID=0
2026-01-22 08:17:41.657932 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=11, ComponentType=2, SocketID=0
2026-01-22 08:17:41.661796 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=8, ComponentType=2, SocketID=0
2026-01-22 08:17:41.666129 storage ERROR: nvme_object.lua(720): addr_info.SocketID=0
2026-01-22 08:17:41.667333 storage ERROR: nvme_object.lua(728): ok SocketID, 0add1
2026-01-22 08:17:41.667689 storage ERROR: nvme_object.lua(743): Setting nvme_info.ResouceId to: 1
2026-01-22 08:17:41.667953 storage ERROR: nvme_object.lua(745): ResourceId update completed successfully
storage也是通过硬盘背板CSR里关联的SMC命令字ACCESSOR对象点灯的,如果通过
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04
无法点灯,需要找CPLD的同事看看命令字是否正确,还有CSR里 看是否跟硬盘背板的槽位有关,有的硬盘背板的槽位不同 Offset会有偏移
"Accessor_Drive0LocateAccessor": {
"Chip": "#/Smc_EnclSMC",
"Size": 2,
"Offset": "${Slot} |> expr($1 == 3 ? 335545881 : 335545883)",
"Mask": 3072,
"Type": 0,
"Value": 0
},
ocy
(wuzhou-ouchangyun)
5
目前只接了一个硬盘背板,CPLD相关代码有部分是封装的,请问华为方面CPLD需要找哪位同事呢?
lishuol
(李硕来)
6
为啥要点nvme的背板灯啊,哪个槽对哪个盘,还有SN对应不是都很明确了,手动写寄存器能点,但是通过bmc的接口点不了的话,看下csr里Drive.LocateLed关联的寄存器和你busctl写的寄存器是不是一个
ocy
(wuzhou-ouchangyun)
7
非装备模式下,手动写寄存器是失败的,而且有些奇怪的地方是获取硬盘状态27 0对应smc表,Get Disk info 是在执行复位硬盘,不清楚是否与这个有关
内部已对齐,是逻辑版本资源不够,没有支持点灯功能,需升级cpld
ocy
(wuzhou-ouchangyun)
11
3.10验证NVME能够正常点灯,但引出两个问题,第一个是点灯后,BMC硬盘界面,会丢失SATA盘,第二个是点击定位状态后,BMC未更新,需要刷新界面,状态才会更新,待确认后,重新发帖
你们的BMC是什么版本,看问题1的描述 感觉像是历史解决过的问题
ocy
(wuzhou-ouchangyun)
13
当前是基于2509版本
第一个问题,重新测试发现,如果在raid卡未加载上来前,进行点灯操作会导致BMC硬盘界面SATA盘丢失,raid卡加载上来后,再进行点灯则不会有该情况
第二个问题,对比华为原生机台也会有同样情况
ocy
(wuzhou-ouchangyun)
14
第一个问题参考该帖子
第二个问题定位原因为后端处理需要时间,而前端在设置点灯后,几乎立刻做查询动作,后端资源树还未更新,需要前端增加延时,或后端rackmount处修改设置点灯逻辑