新建soft.sr后,环境上的实际对象属性未发生变化。

CPU board Info
Name | Position | Manufacturer | Slot | Description | UID | SerialNum | PartNum | PCB Ver | CPLDVersion | HWSRVersion
BC83AMDHA | BCU1 | Huawei | 1 | CpuBoard | 00000001020302083825 | | 0302083826 | .A | 2.11 | 1.15

hw_stream.log产生如下报错
1970-01-01 00:00:36.405159 hwdiscovery NOTICE: init.lua(224): position: 010101, merge soft data from /opt/bmc/sr/14060876_00000001020302083825_soft.sr and hardware data form /data/opt/bmc/sr/backup/00000001020302083825_010101.bin successfully

1970-01-01 00:00:36.407057 hwdiscovery NOTICE: hwcomponent.lua(155): position:010101, merge customer data from /opt/bmc/extend/00_ff/sr/00000001020302083825.sr failed, error: Local file not found, open file failed: /opt/bmc/extend/00_ff/sr/00000001020302083825.sr, status: 4

1970-01-01 00:00:36.407933 hwdiscovery NOTICE: hwcomponent.lua(210): position: 010101, load sr data successfully, uptime: 37 s, cost: 3140ms

2026-02-25 12:49:59.740631 hwdiscovery NOTICE: dump.lua(99): dump connector: Connector_BCU_1_0101 csr file: /data/opt/bmc/sr/backup/00000001020302083825_010101.bin, to /dev/shm/dump_info_tmp/dump_info/AppDump/hwdiscovery/Connector_BCU_1_0101.bin successfully

但是一键收集的时候提示正常:
2026-02-25 12:49:59.746893 hwdiscovery NOTICE: dump.lua(106): dump connector:: Connector_BCU_1_0101 soft csr loading file: /opt/bmc/sr/14060876_00000001020302083825_soft.sr, to /dev/shm/dump_info_tmp/dump_info/AppDump/hwdiscovery/Connector_BCU_1_0101.bin
最终收下来的Connector_BCU_1_0101_soft.sr内容也符合预期,是我修改后的内容


环境上的掩码未发生变更。

环境上soft.sr存在,内容也符合预期。

一键收集:
KunLun2280V2_2102315PDK10S1100005_20260225-1249.txt (3.4 MB)

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

:pushpin: 总结

问题 原因 解法
soft.sr 修改未生效 csr_version.json 未标记 Merge=true 更新或删除该文件
属性仍为默认值 硬件 .sr 覆盖了 soft.sr 删除或修改硬件 .sr
动态更新无效 BMC 未重新加载对象 使用 mdbctl 强制 reload 或 reboot

:white_check_mark: 最终推荐操作顺序

  1. 删除 /opt/bmc/sr/csr_version.json
  2. 确保 14060876_..._soft.sr 内容正确
  3. 删除可能存在冲突的硬件 .sr 文件
  4. 执行 rebootmdbctl → hwdiscovery.reload()
  5. 使用 lsprop 验证属性是否更新

完成后,您的 Scanner 对象 Mask 应能正常生效为 65520

点击此处查看详细分析解答

新建 soft.sr 文件后对象属性未生效问题分析与解决方案

根据您提供的日志和环境信息,soft.sr 文件已正确创建并加载,但系统中实际对象的属性(如 Mask 值)并未更新。这表明配置未被正确应用。以下是详细分析及解决方法。


:magnifying_glass_tilted_left: 问题现象总结

  1. soft.sr 文件存在且内容正确

    • 已在 /opt/bmc/sr/ 路径下成功部署 14060876_00000001020302083825_soft.sr
    • 文件内容符合预期,包含修改后的 Mask=65520 配置。
  2. 日志显示加载成功

    • hw_stream.log 显示 merge soft data ... successfully
    • 一键收集也确认软配置文件被读取。
  3. 实际运行时属性未更新

    • 使用 lsprop Scanner_12v_010101 查询,Mask=65535(默认值),而非 65520
    • 表明 soft.sr 的配置 虽被加载但未生效

:puzzle_piece: 根本原因分析

结合知识图谱、搜索结果与日志信息,核心问题如下:

:white_check_mark: 1. CSR 软硬合并机制未触发或未生效

根据 《硬件自发现CSR选择策略》(文档 #8

软硬件 SR 合并的前提是:

  • SR 格式版本 ≥ 3.00 且 < 5.00
  • 环境存在 soft.sr 文件

合并逻辑:

  • 不同名对象:直接合并
  • 同名对象不同属性:合并属性
  • 同名对象同属性:优先使用硬件 SR 的配置

:red_exclamation_mark:关键点:属性冲突时,“硬件优先”原则可能导致 soft.sr 被覆盖

尽管 soft.sr 被加载,但如果以下任一情况成立,其配置将被忽略:

  • 硬件 .sr 或 EEPROM 中已有 Scanner_12v 对象定义,并包含 Mask 属性;
  • 合并流程中 Mask 属性来自硬件源,且保留优先级更高。

:white_check_mark: 2. csr_version.json 未同步导致 Merge 状态异常

根据 KG 实体关系

Soft.SR File 必须与 csr_version.jsonMerge 字段保持同步。

如果 csr_version.json 未更新 Merge 标志,系统可能:

  • 忽略软配置变更;
  • 认为合并已完成,不重新加载;
  • 使用缓存或备份版本。

即使 soft.sr 文件存在,若未通过版本控制系统标记为“待合并”,则不会触发配置更新。


:white_check_mark: 3. 系统运行时未触发对象重加载

根据日志:

load sr data successfully, uptime: 37 s, cost: 3140ms

表明在系统启动初期已完成加载。
动态替换 soft.sr 文件不会自动触发对象重建或属性刷新。

除非:

  • 重启 hwdiscovery 或 BMC;
  • 手动触发 sr 重载命令;
  • 发送模型重加载信号(如 via mdbctl);

否则,内存中的对象仍基于旧数据实例化。


:white_check_mark: 解决方案

:white_check_mark: 方案一:确保 csr_version.json 正确更新(推荐优先执行)

依据Soft.SR File 需与 csr_version.jsonMerge 字段同步。

操作步骤:

  1. 编辑或检查文件路径:

    /opt/bmc/sr/csr_version.json
    
  2. 查找对应 SR 文件条目,确保其 Merge 字段设置为 true

    {
      "Files": [
        {
          "FileName": "14060876_00000001020302083825_soft.sr",
          "FormatVersion": "3.00",
          "DataVersion": "3.13",
          "Merge": true
        }
      ]
    }
    
  3. 若文件不存在或无该条目,请创建并设为 Merge: true

:white_check_mark: 说明:此设置能强制系统在下次初始化或 reboot 时进行软硬合并。


:white_check_mark: 方案二:删除 csr_version.json 强制重新合并(适用于调试)

依据:文档 #8 提示:

“需要同步修改 csr_version.json 文件对应 SR 的 Merge 字段,或者直接删除该文件。”

操作步骤:

rm /opt/bmc/sr/csr_version.json
reboot

系统重启后会重新生成该文件,并尝试重新合并所有 .srsoft.sr


:white_check_mark: 方案三:验证是否存在硬件 .sr 文件覆盖软配置

检查硬件源是否已定义 Mask

  1. 检查是否有同名 .sr 文件存在于:

    /opt/bmc/sr/14060876_00000001020302083825.sr
    

    若存在,用 cat 查看是否已定义 Scanner_12v 且包含 Mask=65535

  2. 若存在,修改或删除该文件(或移出目录)以避免覆盖。

:light_bulb: 建议:仅保留 soft.sr,或将硬件 .sr 中的 Mask 显式删除,使 soft.sr 成为唯一来源。


:white_check_mark: 方案四:强制刷新内存对象(无需重启)

使用 mdbctl 工具强制重新加载配置。

操作步骤:

  1. 登录 BMC:

    ssh root@bmc-ip
    
  2. 进入调试终端:

    mdbctl
    
  3. 重新加载硬件发现模块:

    hwdiscovery.reload()
    

    manager:reload("hwdiscovery")
    
  4. 查看日志是否重新打印 merge soft data ...

  5. 再次检查:

    lsprop Scanner_12v_010101
    

:white_check_mark: 预防建议

措施 说明
始终同步 csr_version.json 所有 soft.sr 修改后都应更新该文件的 Merge 字段为 true
命名规范一致 soft.sr 文件名必须与硬件 .srBOM + GUID 模式匹配
避免属性冗余定义 同一属性不要在硬件 .srsoft.sr 中都定义,防止“硬件优先”覆盖
开发阶段定期清理缓存 删除 csr_version.json/data/opt/bmc/sr/backup/ 下的 bin 文件

:pushpin: 总结

问题 原因 解法
soft.sr 修改未生效 csr_version.json 未标记 Merge=true 更新或删除该文件
属性仍为默认值 硬件 .sr 覆盖了 soft.sr 删除或修改硬件 .sr
动态更新无效 BMC 未重新加载对象 使用 mdbctl 强制 reload 或 reboot

:white_check_mark: 最终推荐操作顺序

  1. 删除 /opt/bmc/sr/csr_version.json
  2. 确保 14060876_..._soft.sr 内容正确
  3. 删除可能存在冲突的硬件 .sr 文件
  4. 执行 rebootmdbctl → hwdiscovery.reload()
  5. 使用 lsprop 验证属性是否更新

完成后,您的 Scanner 对象 Mask 应能正常生效为 65520

1970-01-01 00:00:36.405159 hwdiscovery NOTICE: init.lua(224): position: 010101, merge soft data from /opt/bmc/sr/14060876_00000001020302083825_soft.sr and hardware data form /data/opt/bmc/sr/backup/00000001020302083825_010101.bin successfully
从这行日志看已经合并了sr和soft.sr,是否是sr内有同名属性定义,sr和soft sr存在同名对象同名属性时优先使用sr内的。

有办法调整优先级吗?这样不是没法做到修改硬件SR了?有个问题是在硬件SR里配置的,我想通过soft.sr进行覆盖替换,从而达到最终功能正常的效果.

另外社区上有soft.sr\定制sr\硬件sr,三者合并的规则介绍吗?

优先级无法调整,优先级合并规则是有的
docs/docs/zh/development/design_reference/key_feature/hwdiscovery_csr_selection.md · openUBMC/docs - AtomGit | GitCode