SNMP查询不到MCU版本相关信息

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

SNMP无法查询到MCU版本相关信息的问题分析

问题描述

在使用SNMP协议通过snmpwalk命令(OID为 1.3.6.1.4.1.2011.2.235.1.1.11.50.1.1)查询设备固件版本信息时,可以正常获取到如下信息:

  • BIOS
  • BMC(主备)
  • U-Boot(主备)
  • CPLD(CpuBoard1、ExpBoard1、FanBoard1 等)
  • BMC SDK

但无法获取MCU(Microcontroller Unit)相关的版本信息,如 CpuBoard1_MCU、Riser_MCU 等。

环境信息:

  • BMC 版本:930 版本(可能对应 openUBMC 某个早期版本)
  • SNMP 协议版本:v3
  • 鉴权方式:SHA256 + AES 加密
  • 用户:Administrator

重现命令:

snmpwalk -v3 -l priv -a SHA256 -x AES -u Administrator -A Hkzy@8002 -X Hkzy@8002 10.0.6.110 1.3.6.1.4.1.2011.2.235.1.1.11.50.1.1

期望结果:查询结果中应包含 MCU 版本信息。
实际结果:SNMP 查询结果中缺失 MCU 信息。


原因分析

根据知识库内容及行业实践,结合 MCU信息采集机制SNMP接口实现原理,可能导致此问题的原因如下:

1. SNMP MIB 配置未启用或未覆盖 MCU 节点

  • Custom_MIBVersion 是控制 SNMP v1/v2 功能启用的核心参数,其值决定了是否开放特定硬件信息。
  • 当前系统可能将 Custom_MIBVersion 设置为了仅启用部分功能(如值为 01),并未完整启用所有 MIB 节点,导致 MCU 信息未被映射进 SNMP 输出树。
  • 相关实体
    • Custom_MIBVersion
    • value 0(禁用 SNMP v1 和 v2)
    • value 1(启用 SNMP v1,禁用 v2)

:magnifying_glass_tilted_left: 若 MIB 配置未开启完整固件查询能力,则 MCU 等非关键组件信息可能被过滤。


2. MCU 模块未被成功识别或未完成初始化

  • MCU 设备通常由 BMC 通过 I2C/SMBus 接口进行扫描和通信。

  • 如果 MCU 模块未响应、固件异常或总线访问失败,BMC 将无法读取其版本信息,自然无法通过 SNMP 上报。

  • 验证方法(需登录 BMC CLI):

    busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_0101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x00018500 7
    

    此命令用于直接读取指定 MCU 的版本信息。若该命令无返回或返回错误,则说明底层硬件访问失败。

  • 参考文档 [V3硬件访问错误排查指南] 中指出,MCU 处于“挂死”状态时,返回值不在正常范围(如 0.1.45~0.1.50),即表示异常。


3. SNMP 接口映射配置缺失 MCU 信息节点

  • openUBMC 的 SNMP 接口采用 接口映射配置方案,即需将底层资源(如 FRUInfo、PCLEDeviceProperty)显式映射到 SNMP OID 树中。

  • 若当前固件版本的 snmp 映射 JSON 配置文件中 缺少对 MCU 信息的映射条目,即使 BMC 内部能读取 MCU 数据,也不会通过 SNMP 暴露出去。

  • 相关实体

    • SNMP
    • FRUInfo
    • PCLEDeviceProperty

:pushpin: 根据知识库信息:“openUBMC社区的SNMP接口采用接口映射配置方案实现”,若未配置 MCU 路径的映射,必然无法查询。


4. 固件版本兼容性问题(930版本限制)

  • 在知识库中提及的 openUBMC 25.09 版本(见搜索结果5)才开始全面支持更多硬件部件(包括MCU、CPLD、VRD等)的信息管理与升级。
  • 用户当前使用的“930版本”可能是较早版本,尚未完整实现对 MCU 信息的采集与对外发布功能,尤其是通过 SNMP v3 这类标准接口。

解决方案建议

:white_check_mark: 方案一:检查并更新 SNMP MIB 配置

  1. 登录 BMC 的 Redfish 或 CLI 接口,查询当前 Custom_MIBVersion 设置:
    GET /redfish/v1/Managers/bmc/SnmpService/Configuration
    
  2. 确认是否启用了完整 MIB 支持。若未启用,请设置 Custom_MIBVersion = 3(全开模式)。
  3. 重启 SnmpService 或 BMC 观察是否生效。

:white_check_mark: 方案二:确认 MCU 是否可被 BMC 正常识别

  1. 使用 BMC CLI 执行以下命令,尝试手动读取 MCU 版本:

    busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_0101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x00018500 7
    

    :warning: 若返回为空或异常值,则说明硬件层存在问题。

  2. 检查对应 MCU 是否供电正常、I2C 地址是否正确、JTAG 切换是否到位(参考 [MCU、VRD、CSR、CPLD升级与板卡管理问题指南])。


:white_check_mark: 方案三:检查 SNMP 接口映射配置文件

  1. 进入 BMC 文件系统,定位 SNMP 配置目录:
    /etc/snmp/  或  /usr/share/snmp/mibs/
    
  2. 查找类似 snmp_mapper_config.json 的映射文件。
  3. 检查是否存在针对 Chip/SmcMCU 类型设备的 OID 映射规则。
  4. 如无,则需要按 openUBMC SNMP 接口映射规范添加 MCU 信息映射节点。

:white_check_mark: 方案四:升级 BMC 固件至支持完整 SNMP 输出的版本

  • 升级至 openUBMC 25.09 或更高版本(如知识库中提到的 25.12.00.01),以确保:
    • 全面支持 MCU/CPLD/VRD 等部件信息采集;
    • SNMP 接口已完善映射各类 FRU 信息;
    • 支持 Redfish 与 SNMP 同步输出一致数据。

总结

项目 内容
问题本质 SNMP 查询不到 MCU 信息,可能是配置、映射或固件层面的问题
根本原因 1. MIB 配置未启用
2. MCU 未被正常识别
3. SNMP 映射缺失
4. 固件版本过旧
推荐处理顺序 1. 使用 CLI 命令验证 MCU 是否可达 → 2. 检查 MIB 配置 → 3. 检查 SNMP 映射文件 → 4. 升级固件
预防措施 在新版本固件发布前,对 SNMP 输出进行全面验证,确保关键部件信息可查

:light_bulb: 提示:对于生产环境,建议将 SNMP 是否完整上报所有固件版本信息 作为版本发布的必测项(参见“内存泄漏测试”章节中的测试项设计)。

相关链接:

  1. 【iTestSmart】支持显示固件CSR和MCU信息,且BMC复位不丢失测试,关键字有误。
  2. snmp walk时,bmc安全日志里会产生一条库文件依赖报错
  3. 【iTestSmart 1.0.37】团体名的值为”Huawei112#$“,应为正确。
  4. openUBMC通用测试点分享
  5. SNMP接口映射配置指南 | 文档中心 | openUBMC