问题描述
storage组件,读取VendorId加载南向CSR,硬盘Drive信息没有加载。
报错如下:
2026-10-28 10:24:15.686379 storage NOTICE: nvme_listen_callback.lua(134): [device_mgmt] initial SmBiosStatus=3
2026-10-28 10:24:15.703770 storage NOTICE: nvme_listen_callback.lua(56): [device_mgmt] sync_all_smbios_status smbios_status=3
2026-10-28 10:24:15.849032 storage NOTICE: nvme_mgmt.lua(292): [device_mgmt]on_add_device_obj start
2026-10-28 10:24:15.850135 storage NOTICE: comm_fun.lua(52): [device_mgmt] register add signal, path_prefix=/bmc/dev/Systems/1/PCIeNVMe iface=bmc.dev.PCIeDevice
2026-10-28 10:24:15.852206 storage NOTICE: nvme_mgmt.lua(356): [device_mgmt]on_del_device_obj start
2026-10-28 10:24:15.954713 storage NOTICE: nvme_mgmt.lua(428): [device_mgmt] existing PCIeNVMe device count: 0
2026-10-28 10:24:28.170156 storage NOTICE: drive_collection.lua(73): NVMe list is empty.
2026-10-28 10:24:28.291049 storage NOTICE: drive_collection.lua(73): NVMe list is empty.
2026-10-28 10:24:28.292352 storage NOTICE: nvme_listen_callback.lua(72): [device_mgmt] on_smbios_status_changed smbios_status=3
2026-10-28 10:24:38.844017 pcie_device NOTICE: biz_topo.lua(988): [BizTopo] Name=PcieAddrInfo_NVMe_7_010102, ContainerSlot=1, ContainerUnitType=SEU, ContainerUID=00000001030302057047
2026-10-28 10:24:38.930219 pcie_device NOTICE: biz_topo.lua(988): [BizTopo] Name=PcieAddrInfo_NVMe_6_010102, ContainerSlot=1, ContainerUnitType=SEU, ContainerUID=00000001030302057047
2026-10-28 10:24:38.988034 pcie_device NOTICE: biz_topo.lua(988): [BizTopo] Name=PcieAddrInfo_NVMe_5_010102, ContainerSlot=1, ContainerUnitType=SEU, ContainerUID=00000001030302057047
2026-10-28 10:24:39.055257 pcie_device NOTICE: biz_topo.lua(988): [BizTopo] Name=PcieAddrInfo_NVMe_8_010102, ContainerSlot=1, ContainerUnitType=SEU, ContainerUID=00000001030302057047
2026-10-28 10:24:44.563259 pcie_device NOTICE: biz_topo.lua(988): [BizTopo] Name=PcieAddrInfo_NVMe_7_010102, ContainerSlot=1, ContainerUnitType=SEU, ContainerUID=00000001030302057047
2026-10-28 10:25:00.686131 frudata NOTICE: manage.lua(158): read eeprom data, frudata(3) offset = 128, fru_file = [HuaweiBC83NHBD10265611393113020570470.00.00.00Description=Manufactured Board,TS200-2280H V2,BC83NHBD,82.5 SAS/SATA(compatible with 4 NVME) Bypass HardDisk Backplane,24IssueNumber=00CLEICode=BOM=Model=BC83NHBD]
2026-10-28 10:25:02.680366 devmon WARNING: device_driver.cpp(295): unexpected exception loading driver file /opt/bmc/drivers/libhw_nvme_pcie4.so
2026-10-28 10:25:02.681971 devmon ERROR: csr.cpp(45): load compatible driver hw_nvme_pcie4 failed, error: Failed to load driver: /opt/bmc/drivers/libhw_nvme_pcie4.so: cannot open shared object file: No such file or directory
2026-10-28 10:25:02.689092 devmon ERROR: dispatcher.cpp(235): Method call failed: AddDevice, bmc.dev, /bmc/dev, error: Driver not found: hw_nvme_pcie4
2026-10-28 10:25:02.690107 devmon WARNING: service_backend.cpp(100): service_backend dispatch error: bmc.kepler.devmon /bmc/dev bmc.dev.AddDevice: parse_error: Driver not found: hw_nvme_pcie4
2026-10-28 10:25:02.846257 devmon ERROR: csr.cpp(45): load compatible driver hw_nvme_pcie4 failed, error: Failed to load driver: /opt/bmc/drivers/libhw_nvme_pcie4.so: cannot open shared object file: No such file or directory
2026-10-28 10:25:02.850570 devmon ERROR: dispatcher.cpp(235): Method call failed: AddDevice, bmc.dev, /bmc/dev, error: Driver not found: hw_nvme_pcie4
2026-10-28 10:25:02.853286 devmon WARNING: service_backend.cpp(100): service_backend dispatch error: bmc.kepler.devmon /bmc/dev bmc.dev.AddDevice: parse_error: Driver not found: hw_nvme_pcie4
环境信息
-
软件版本:OpenUBMC2606
-
硬件配置:920B D4
重现步骤
- 上电必现
期望结果
请帮忙分析一下南向加载链路,请教一下缺少的libhw_nvme_pcie4.so怎么补上
尝试过的解决方案
删除南向CSR,让storage逻辑走原来update_connector那套,可以解决问题。
答案内容由AI生成,仅供参考:
结论
从日志看,你们当前遇到的问题属于南向 CSR 选择了 hw_nvme_pcie4 驱动,但出包中缺少对应的 libhw_nvme_pcie4.so,导致 devmon 加载驱动失败、AddDevice 失败,最终 PCIeNVMe 对象没有注册成功,storage 侧 NVMe list is empty,Web 上 NVMe 硬盘 Drive 信息无法加载。
现有资料中没有给出“手工把某个 .so 拷贝到 /opt/bmc/drivers/”的完整命令,但给出了两类可落地处理方式:开启 unidev 编译选项重新编包生成动态库,或删除南向 CSR 2.0 路径,让 storage 走原来的 update_connector 逻辑。后者已在类似场景中验证可以正常获取 NVMe 信息。
点击此处查看详细分析解答
结论
从日志看,你们当前遇到的问题属于南向 CSR 选择了 hw_nvme_pcie4 驱动,但出包中缺少对应的 libhw_nvme_pcie4.so,导致 devmon 加载驱动失败、AddDevice 失败,最终 PCIeNVMe 对象没有注册成功,storage 侧 NVMe list is empty,Web 上 NVMe 硬盘 Drive 信息无法加载。
现有资料中没有给出“手工把某个 .so 拷贝到 /opt/bmc/drivers/”的完整命令,但给出了两类可落地处理方式:开启 unidev 编译选项重新编包生成动态库,或删除南向 CSR 2.0 路径,让 storage 走原来的 update_connector 逻辑。后者已在类似场景中验证可以正常获取 NVMe 信息。
日志链路分析
结合日志,南向加载链路大致如下:
-
storage 侧注册 PCIeNVMe 设备监听
nvme_mgmt.lua 注册 /bmc/dev/Systems/1/PCIeNVMe 路径下 bmc.dev.PCIeDevice 的 add signal。
- 此时日志显示:
existing PCIeNVMe device count: 0
NVMe list is empty.
-
pcie_device 侧已经上报 PCIe 地址信息
- 后续日志中出现:
PcieAddrInfo_NVMe_7_010102
PcieAddrInfo_NVMe_6_010102
PcieAddrInfo_NVMe_5_010102
PcieAddrInfo_NVMe_8_010102
- 说明 PCIe 拓扑/地址信息已经出现,
PcieAddrInfo_NVMe_* 可用于标识 NVMe 设备的 PCIe 地址和物理位置。
- 但仅有
PcieAddrInfo 还不够,还需要 devmon 成功加载对应驱动并创建 PCIeNVMe 对象。
-
devmon 尝试加载 hw_nvme_pcie4 驱动失败
- 日志关键报错:
unexpected exception loading driver file /opt/bmc/drivers/libhw_nvme_pcie4.so
load compatible driver hw_nvme_pcie4 failed
Failed to load driver: /opt/bmc/drivers/libhw_nvme_pcie4.so: cannot open shared object file: No such file or directory
Method call failed: AddDevice, bmc.dev, /bmc/dev, error: Driver not found: hw_nvme_pcie4
-
AddDevice 失败导致 PCIeNVMe 对象未创建
PCIeNVMe Object 是注册在 /bmc/dev/Systems/:SystemId/PCIeNVMe/:Id 下的设备实例,代表已发现的 NVMe 磁盘。
- 由于驱动加载失败,
AddDevice 无法成功,PCIeNVMe 对象不会注册。
PCIeNVMe 对象承担 bmc.dev.NVMe、bmc.dev.NVMe.ProductInfo、bmc.dev.NVMe.Status 等 NVMe 信息接口的数据暴露;对象不存在,NVMe Drive 信息自然无法加载。
-
storage 侧最终表现为 NVMe 列表为空
drive_collection.lua 报 NVMe list is empty。
- Web 页面看不到 NVMe 盘信息,与“找不到 so,web 上 nvme 盘的信息都没有显示”的现象一致。
根因判断
根因可以归纳为:
- 南向 CSR 配置选择了
hw_nvme_pcie4 兼容驱动;
- 但当前出包中缺少
/opt/bmc/drivers/libhw_nvme_pcie4.so;
devmon 加载该驱动失败,报 Driver not found: hw_nvme_pcie4;
AddDevice 失败,PCIeNVMe 对象未创建;
storage 获取不到 NVMe 设备对象,最终 NVMe list is empty,NVMe Drive 信息不显示。
这与资料中提到的 Csr Unloading Issue 一致:NVMe 驱动 .so 文件在系统编译和运行阶段未能正确加载。同时,Csr2.0 Path 也被描述为会影响华为 NVMe 盘信息的正确检测和获取,是当前路径冲突的来源之一。
补齐或规避方案
方案 A:开启 unidev 编译选项后重新编包
资料中的处理方式:
- 有反馈指出:开启
unidev 编译选项后编包,会生成 libhw_nvme_pcie4.so 这个动态库文件。
- 社区最新代码的
manifest 中已经开启了该开关。
- 630 版本代码开启后也可以构建成功。
适用情况:
- 如果项目允许使用
unidev 编译选项,可以在 manifest 中配置开启后重新构建出包,使包内生成 libhw_nvme_pcie4.so,从而让 devmon 能加载 hw_nvme_pcie4 驱动。
注意:
- 资料中有人提到“我们需要商用,所以打开这个开关没意义”,说明是否可开启
unidev 需要结合项目商用要求确认。
- 现有资料没有给出具体的
manifest 配置字段和编译命令,无法从这里进一步给出精确操作步骤。
方案 B:删除南向 CSR 2.0 路径,让 storage 走原 update_connector 逻辑
这是资料中已现场验证有效的规避方式:
- 在
manifest 的 profile.txt 中删除对应的南向 CSR 文件:
14140224_protocol_19e5.sr
- 目的:不再走
csr2.0 路径,让 storage 走原来的 update_connector 信息获取逻辑。
- 反馈结果:
- 删除 CSR 后重新出包验证,已经可以正常获取 NVMe 信息。
- 相关讨论中也提到:
- “不然就只能把
profile.txt 里的 2.0 的 csr 删了”;
- “删掉 csr 后出包验证已经可以正常获取 nvme 信息了”。
适用情况:
- 项目对南向 CSR 2.0 能力要求不高;
- 商用场景下不方便开启
unidev;
- 希望快速恢复 NVMe 信息显示。
这与你们“删除南向 CSR,让 storage 逻辑走原来 update_connector 那套,可以解决问题”的尝试一致。
方案 C:检查 CSR 与硬件型号、Connector BomID 是否匹配
资料中还有一个相关案例:
- 部分 NVMe 硬盘缺少资源归属,排查发现:
- 正常显示资源归属的 NVMe 盘
ComponentType 为 2;
- 不能正常显示的硬盘
ComponentType 不为 2;
- 客户加载的 SR 文件
Component_PCIeCard_0101081009.sr 并非对应型号的 CSR;
- CSR 加载不正确导致 NVMe 信息加载出错。
- 处理方式:
- 将 Connector 对应的 BomID 配置为对应硬盘信息;
- 重新构建出包并升级后检查 Web 资源归属信息。
因此,如果走 VendorId 加载南向 CSR 的路径,建议同时核对:
- 当前硬件型号对应的 CSR 是否正确;
- Connector 的 BomID 是否与 NVMe 硬盘配置匹配;
ComponentType 等匹配字段是否一致,避免 CSR 选错导致 NVMe 信息加载异常。
方案 D:关注 VendorId 解析相关已知问题
资料中有一条“修复加载南向驱动规范 CSR 的 bug”的记录,提到:
- 避免重复加载散热配置;
- Samsung VendorId 解析有误,之前解析出来是
ffff。
如果当前问题是通过 VendorId 选择南向 CSR,建议检查 VendorId 解析结果是否正常,避免因 VendorId 解析异常导致 CSR 选择或加载不符合预期。
建议的处理优先级
- 如果允许改编译配置:开启
unidev 编译选项,重新编包,确认包内生成 /opt/bmc/drivers/libhw_nvme_pcie4.so。
- 如果不允许开启
unidev 或需要快速商用规避:按已验证方式删除 manifest/profile.txt 中的 14140224_protocol_19e5.sr,让 storage 走原 update_connector 逻辑,重新出包验证 NVMe 信息。
- 同时检查 CSR 匹配关系:确认当前 920B D4 环境使用的 CSR、Connector BomID、VendorId 解析和
ComponentType 是否匹配,避免 CSR 选错导致类似问题。
说明
现有资料能够确认的是:libhw_nvme_pcie4.so 缺失是 devmon 加载 hw_nvme_pcie4 失败的直接原因;可行的补齐方向是开启 unidev 编译选项重新编包生成该动态库,或删除南向 CSR 2.0 路径规避该加载链路。资料中没有提供直接手工编译或拷贝该 .so 的具体命令和路径操作步骤,因此无法进一步给出精确的“补文件”命令。