NVME定位点灯失败问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:NA;
- 软件版本:openUBMC 25.09;
- 涉及功能:NVME定位点灯;
- 硬盘背板型号:BC83NHBC
- 硬盘背板CPLD版本:3.07
- 触发条件:web界面上设置NVME定位状态或通过busctrl直接操作SMC,实际硬盘背板点灯失败,但是通过SMC进入装备模式,硬盘背板灯能全亮。
- 业务表现:预期可以正常点灯;实际网页操作,点击确认后,提示操作成功,但实际点灯失败。
问题复现步骤
在 openUBMC 25.09 系统中,通过 Web 界面或 busctl 命令尝试点亮 NVMe 硬盘的定位灯(Locate LED)时操作返回成功,但实际硬件背板上的定位灯未点亮。
关键日志信息
点击触发定位灯的app.log如下
text
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定位过程
控制链路结构说明
从知识库信息可知,NVMe 定位灯的控制流程如下:
textWeb / IPMI → openUBMC (BMC) → SR配置文件 → Scanner/Accessor → SMC芯片 → CPLD → LED物理灯其中:
- SetLocateLed 属性用于触发定位灯。
- Scanner_DriveXLocateAccessor 和 Accessor_DriveXLocateAccessor 是 SR 中定义的寄存器读写接口。
- SMC(System Management Controller) 作为中间控制器,通过 I2C 与 BMC 通信,并向 CPLD 发送命令。
- CPLD(复杂可编程逻辑器件) 直接驱动 LED,是最终执行单元。
故障点排查结论
根据app.log可以确认上层指令执行成功(返回成功),但底层 LED 无反应, 验证 SMC 命令是否被正确路由:
- 先读初始状态
textbusctl --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 为例)
textbusctl --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- 再次读取,确认值是否改变
textbusctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100结合 busctl 操作无效和寄存器值未变的现象,可得出:
已排除的可能原因:
- 物理LED损坏:SMC装备模式下灯能亮,证明LED与驱动电路正常。
- 网络或接口问题:Web操作提示“成功”,说明命令已送达BMC并处理。
- 权限或认证问题:操作未报错。
基本可断定:CPLD固件过滤或拒绝了该写入请求
问题原因
CPLD固件未正确处理来自SMC的BitIO写命令,导致LED无法触发。
解决方案
升级硬盘背板 CPLD 至最新版本固件(>3.07)
步骤如下:
确认是否存在更高版本的 CPLD 固件
- 查询华为官方发布渠道或内部固件仓库,确认当前 BC83NHBC 背板是否有 高于 3.07 的 CPLD 版本。
- 示例文件:ubmc_YunHe_920S_L1.hpm 正是用来升级 CPLD 的 HPM 格式固件包。
准备固件并上传
- 将新版本 CPLD 固件通过 Web 界面或 CLI 工具上传至 BMC。
执行升级操作
- 示例命令(实际路径根据系统而定)
bashipmitool fw update start <filename.hpm>- 通过 Web 界面路径:
textiBMC管理 → 固件升级 → 固件更新重启并验证
- 固件升级完成后执行冷重启(断电生效)。
- 进入 Web 界面重新操作“定位灯”,观察是否正常点亮。
- 使用 busctl 再次读取寄存器值,确认已修改。