2512版本如何设置libmgmt_protocol的编译选项

环境:2512+高可用组件环境

问题:9560-8i raid卡在存储管理不显示数据

问题定位:
查看app.log
registry controller失败


查看framework.log
缺少libsml_lsi.so

尝试解决:
manifest.yml,添加依赖

- conan: libmgmt_protocol
    options:
      storelib_enable: true

然后编译失败,task.log提示

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

RAID卡信息不显示问题分析与解决方案

问题现象

openUBMC 25.12 + 高可用组件环境 下,Broadcom 9560-8i RAID卡 在存储管理界面中无法正常显示数据。根据日志分析,核心问题是RAID控制器注册失败,导致无法获取控制器信息。


问题定位

1. 存储模块日志 (app.log)

storage ERROR: tasks.lua(92): task [Controller.register_controller.1] error: 
...bmc/apps/storage/lualib/controller/controller_object.lua:706: [Storage] Failed to add controller 1, ret: 4357
  • 错误代码 4357 表明控制器添加失败。
  • 控制器注册任务反复尝试但持续失败。

2. 框架模块日志 (framework.log)

framework ERROR: adapter.c(603): Failed to load lsi_sml_library /usr/lib64/libbsml_lsi.so 
for MegaRAID SAS Controller. error : /usr/lib64/libbsml_lsi.so: cannot open shared object file: No such file or directory
  • 关键问题暴露:libsml_lsi.so 动态库文件缺失
  • adapter.c 尝试加载 libsml_lsi.so 失败,导致 smlib : Add controller management 操作返回错误码 0x11d8

:warning: 注意:日志中libbsml_lsi.so应为libsml_lsi.so,很可能是拼写错误或路径配置问题。


根本原因分析

  1. 核心原因
    MegaRAID SAS Controller 依赖于 libsml_lsi.so 动态库进行通信和管理,而该库未包含在固件镜像中。

  2. 深层原因

    • libmgmt_protocol 组件负责管理此类存储协议依赖库。
    • storelib_enable 编译选项未启用,导致 libsml_lsi.so 未被正确打包进固件。
  3. 历史背景
    根据文档《[openUBMC RAID卡管理解耦特性设计说明书]》,openUBMC引入了 RAID卡管理解耦特性,通过 dlopen 机制实现动态加载,避免强耦合。此特性依赖 libmgmt_protocol.storelib_enable 配置项控制是否包含专有库文件。


解决方案

:white_check_mark: 正确配置 libmgmt_protocol 以启用 libsml_lsi.so 打包

manifest.yml 文件中添加如下配置:

- conan: libmgmt_protocol
  options:
    storelib_enable: true

确保格式正确:

dependencies:
  - conan: helloworld
    version: 1.100.11
  - conan: libmgmt_protocol
    options:
      storelib_enable: true

:warning: 重要提示:根据参考文档 [RAID卡适配指导] 和 [openUBMC RAID卡管理解耦特性设计说明书],这是解决 libsml_lsi.so 缺失的标准方法。


:wrench: 编译失败问题排查(KeyError: ‘pwd’)

您遇到的如下编译错误:

ERROR: KeyError: 'pwd'
[31mERROR: 执行命令 conan create ... 错误

此问题并非由 storelib_enable: true 直接引起,而是构建环境或 Conan 配置问题。

建议处理方式:

  1. 清理构建环境

    conan remove "*" --builds --force
    rm -rf ~/.conan2/p/*
    
  2. 检查 Conan Profile 配置
    确保 profile.iniprofile.dt.ini 文件正确配置,并包含必要的环境变量定义。

  3. 验证 Conan 是否支持 pwd 环境变量注入

    • 查看 .conan/profiles/your_profile 中是否有缺失字段。
    • 某些版本 Conan 在远程构建时会丢弃 pwd 等上下文信息。
  4. 尝试本地调试构建

    # 先单独构建 libmgmt_protocol 并观察输出
    conan create libmgmt_protocol/1.80.22@openUBMC.release/rc -o libmgmt_protocol:storelib_enable=True
    
  5. 参考成功案例

    • 在 [Document Chunk: 3] 中提到:“感谢各位大佬,问题已解决。解决方法:在manifest.yml中打开libmgmt_protocol的storelib_enable选项,libsml_lsi.so就可以被打包到固件中。”
    • 说明该方案已被验证有效,问题出在您的构建链非预期中断。

排查与验证步骤

1. 确认 CSR 配置包含 RAID 卡支持

确保 vpd 模块的 SR 文件中配置了正确的 PCIe 设备四元组信息(Vendor ID、Device ID、SubVendor ID、SubDevice ID),例如:

14140130_100010e2_10004010.sr

参见:[RAID卡适配指导]

2. 检查运行时是否存在动态库

系统启动后,执行:

ls /usr/lib64/libsml_lsi.so

若文件存在,则说明打包生效。

3. 查看是否成功加载控制器

成功日志应包含:

storage NOTICE: controller_object.lua(321): ctrl1 add_controller to link topo successfully
storage NOTICE: [Storage] Successfully added controller 1

4. 通过 D-Bus 查询 RAID 信息

busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers/Controller_*

预期输出应包括:

  • FirmwareVersion
  • Manufacturer (如 Broadcom)
  • SerialNumber
  • AssetName (如 MegaRAID 9560-8i 4GB)

补充说明

:pushpin: 为什么 Huawei BMC 能识别而 openUBMC 不能?

  • Huawei BMC:企业版通常已内置 libsml_lsi.so 或关闭了依赖检查。
  • openUBMC:社区版本默认不打包闭源驱动,需手动启用 storelib_enable

相关知识点:昆仑太科_刘涛 明确指出:“是只针对博通有效,目前是不开源的”。


结论

项目 内容
根本原因 libsml_lsi.so 动态库未打包进固件
直接原因 libmgmt_protocol.storelib_enable 未启用
解决方案 manifest.yml 中启用 storelib_enable: true
编译失败 为构建环境问题,非配置错误,需单独解决
验证方式 检查库文件是否存在、查看日志、D-Bus 查询 RAID 信息

:white_check_mark: 最终建议
修复 Conan 构建环境,重新构建并烧写固件,即可成功识别并管理 9560-8i RAID卡

相关链接:

  1. 【storage】【问题求助】9440-8i raid卡信息不显示,raid功能操作失败
  2. raid卡libsml_lsi.so动态库缺失
  3. 无法获取raid卡信息,报错1104,控制器初始化未完成
  4. 25.12社区版本,博通9560 16i raid卡信息获取异常
  5. 目录 | 文档中心 | openUBMC

https://discuss.openubmc.cn/t/topic/4307 参考

这个链接404了

联系PAE获取权限