9440-8i raid卡加载了sr文件却读不到任何值

描述

9440-8i直插PCIe槽,Connector_PCIE写死id和aux_id强制加载9440-8i sr,topo图看起来正常,内容如下(Chip_RaidChip):

I2c_7
├─VChip_I2c_7
└─Pca9545_i2c7_chip_0101
  ├─Channel_2
  │ ├─Eeprom_Cpu1PowerSMC_010101
  │ └─Chip_RaidChip_01010101
  └─Channel_3
    └─Eeprom_FanPower_0101

i2cdetect 7也能扫到raid卡器件地址0x01,我们硬件说我们没有hisport,就用i2c通讯就好,但是相关sensor读不到值,一键收集到的日志里搜索Chip_RaidChip也没有任何代码操作芯片和结果的log,社区的文档都跟hisport有关,请问要如何通过log或者其他手段排查这个问题。

null_null_19700102-0145.tar.gz (6.7 MB)

现状截图

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

:white_check_mark: 结论

当前问题是:RAID卡I2C物理链路正常,但BMC未启动对其的数据采集任务,原因极可能是:

:red_circle: SR文件中缺少Scanner或TypeId配置错误,导致storage模块未初始化该RAID卡的带外管理任务

:check_mark: 建议下一步操作:

  1. 检查SR文件中是否为 Chip_RaidChip 配置了 Scanner
  2. 设置正确的 TypeIdControllerType
  3. 添加 Accessor 并绑定到Sensor
  4. 重启BMC或重新加载SR,观察storage.log是否有控制器注册日志
  5. 若仍无日志,尝试手动i2cget验证读取能力

完成上述配置后,应可在日志中看到BMC主动读取RAID卡数据的行为,传感器值也将正常更新。

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

9440-8i RAID卡加载SR文件但无法读取传感器值的问题分析与排查

根据您提供的详细信息,系统中已正确识别到 Broadcom 9440-8i RAID卡,并通过 i2cdetect 可以扫描到其I2C地址(0x01),表明物理层通信链路基本正常。然而,RAID卡的传感器数据(如温度)无法获取,日志中无对 Chip_RaidChip 的操作记录,说明 RAID卡的带外管理功能未正确激活或驱动未启动


:magnifying_glass_tilted_left: 问题现象总结

  • :white_check_mark: RAID卡被系统识别(PCIe设备可见)
  • :white_check_mark: SR文件已强制加载,Topo拓扑结构显示正常
  • :white_check_mark: I2C链路物理连通(i2cdetect -y 7 能扫到0x01地址)
  • :cross_mark: 传感器数据无法获取(如“PCIe RAID0 Temp”显示为0或--
  • :cross_mark: 日志中没有对Chip_RaidChip的读写操作日志
  • :cross_mark: 一键收集日志未体现任何与RAID卡相关的数据采集行为
  • :pushpin: 用户强调无hisport机制,应仅通过标准I2C通信

:puzzle_piece: 根本原因分析

从上下文和知识库信息来看,虽然I2C链路物理通畅,但RAID卡的带外管理通道未成功建立,导致BMC无法通过I2C读取其传感器和状态信息

可能的根本原因如下:

原因 说明
1. RAID卡未支持带外管理(Out-of-Band Management)模式 某些RAID卡虽然存在I2C接口,但需固件或工作模式支持OOB管理协议(如MCTP over I2C或专有协议)。若未启用,则BMC无法主动查询数据。
2. TypeId 或 ControllerType 配置错误导致storage模块未初始化 storage组件依据TypeId判断是否启用RAID卡的带外管理。若未正确配置,即使SR加载成功,也不会启动RAID卡监控任务。
3. megaraid_sas 驱动未触发或未上报关键信息给BMC 虽然OS可通过megaraid_sas驱动访问RAID卡,但BMC的带外管理不依赖OS驱动,而是基于独立I2C通信。若此路径未配置,则无法获取数据。
4. SR文件中缺少Scanner或Accessor定义 若SR文件中未为Chip_RaidChip配置Scanner对象,则自发现服务不会主动轮询该设备,自然无读取日志。
5. I2C地址映射错误或访问协议不匹配 尽管i2cdetect可扫描到设备,但读写命令格式、寄存器偏移、命令字等可能与RAID卡内部协议不符,导致读值失败。

:hammer_and_wrench: 排查步骤建议

:white_check_mark: 步骤1:确认RAID卡是否支持带外管理

  • 查阅 9440-8i RAID卡规格书 是否支持“带外管理”、“I2C传感器接口”或“OOB监控”。
  • 在WebUI中查看RAID卡属性:

    是否显示“支持带外管理:是”?

  • 若不支持,则只能通过OS内核驱动获取信息,BMC无法独立读取传感器。

:white_check_mark: 知识库支持点:

  • “此页面的RAID控制器…信息依赖RAID卡的带外管理功能
  • “RAID Card supports out-of-band management capabilities”

:backhand_index_pointing_right: 结论:必须确认该卡固件和硬件支持带外管理。


:white_check_mark: 步骤2:检查SR文件中是否配置Scanner和Accessor

确保在 Chip_RaidChip_01010101 下定义了 ScannerAccessor,用于周期性读取温度等信息。

示例配置片段:

"Objects": {
  "Chip_RaidChip_01010101": {
    "Type": "Chip",
    "ChipType": "RAID",
    "ManagementTopology": {
      "I2c": {
        "Bus": "I2c_7",
        "Address": "0x01"
      }
    },
    "Scanners": {
      "TempScanner": {
        "Type": "I2c",
        "Reader": {
          "Command": 0x00,
          "Size": 2,
          "DataType": "Temperature"
        },
        "Interval": 10000
      }
    },
    "Accessors": {
      "TempAccessor": {
        "Type": "I2c",
        "Offset": 0x00,
        "Size": 2,
        "Mask": 0xFF,
        "DataType": "Temperature"
      }
    }
  }
}

:warning: 若缺失 ScannersBMC不会主动读取芯片数据,因此日志为空。


:white_check_mark: 步骤3:验证TypeId 和 ControllerType 配置正确

RAID卡的SR中必须设置正确的 TypeId,以便 storage 模块识别并加载管理逻辑。

  • 查看 /opt/bmc/sr/<your_sr_file>.sr
  • 确保 ControllerPCIeCard 对象中包含:
"TypeId": 8,  // 或其他对应RAID卡类型的值
"ControllerType": "RAID"

:white_check_mark: 参考知识库:

  • “RAID的sr文件是用来告诉openUBMC如何识别、管理RAID的说明书”
  • “带外管理:获取和设置RAID卡下的物理盘、逻辑盘等信息”

:backhand_index_pointing_right: TypeId 必须匹配 storage 组件中定义的 RAID 控制器类型,否则不会启动带外任务。


:white_check_mark: 步骤4:检查I2C通信参数是否正确

虽然i2cdetect能扫到0x01,但读操作仍可能失败。

使用 i2cget 手动读取:

i2cget -y 7 0x01 0x00 w

尝试不同寄存器地址(0x00, 0x01, 0x10等),观察是否返回有效数据。

若全部返回 0x00 或错误,说明:

  • 寄存器地址映射错误
  • 需发送特定命令才能激活响应
  • 卡处于低功耗或未初始化状态

:white_check_mark: 步骤5:确认storage模块是否启动RAID卡任务

查看日志关键词:

grep -i "controller" /var/log/storage.log
grep -i "register controller" /var/log/storage.log
grep -i "add controller" /var/log/storage.log

期望看到类似:

storage NOTICE: controller_object.lua(541): Controller_0, RefChip.Path:/bmc/kepler/Chip/Complex/Chip_RaidChip_01010101
storage NOTICE: tasks.lua(72): task [all ctrl loaded] start

若无任何controller注册日志,说明 storage 未识别该卡。


:white_check_mark: 步骤6:确认PCIeAddrInfo是否配置正确(影响带内识别)

即使使用带外管理,部分系统也需 PcieAddrInfo 辅助定位卡:

"Objects": {
  "PcieAddrInfo_SAS": {
    "Bus": 0x02,
    "Device": 0x00,
    "Function": 0,
    "PortID": 1,
    "SlotID": "PCIeCard1",
    "SocketID": 0,
    "ComponentType": "RAID",
    "ControllerType": "RAID"
  }
}

:white_check_mark: 来自知识库:

  • “在硬盘背板的SR文件中配置SAS/SATA盘的PcieAddrInfo对象”
  • “BMC根据BDF号向IMU查询四元组信息并加载对应SR”

:white_check_mark: 解决方案建议

方案 操作
1. 补全SR文件中的Scanner配置 增加Scanner对象,指定读取温度、状态等寄存器
2. 设置正确的TypeId 确保TypeId=8或其他RAID卡标准值
3. 使用i2cget/i2cset调试 手动测试能否读写RAID卡I2C寄存器
4. 检查storage日志是否加载controller 若无日志,则storage未响应,需修改SR触发
5. 确认RAID卡固件支持OOB管理 联系Broadcom确认9440-8i是否开放I2C管理接口
6. 添加Accessor定义并绑定Sensor 在Sensor配置中引用#/Chip_RaidChip/Temperature

:blue_book: 相关知识库参考

  • 带外管理依赖

    “此页面的RAID控制器…信息依赖RAID卡的带外管理功能,并且在系统引导完成后或安装并完全启动BMA 2.0才能显示。” —— Document Chunk 2

  • I2C通信必要性

    “I2C Link 是一种通信接口用于BMC与RAID卡之间数据交换,其失败将导致通信丢失。” —— KG Entity

  • SR文件作用

    “RAID的sr文件是用来告诉openUBMC如何识别、管理RAID的说明书。” —— Search Result #1

  • TypeId决定管理通道

    “TypeId属性用于配合storage组件确定带外管理通道类型(I2C或PCIE)” —— Search Result #1


:white_check_mark: 结论

当前问题是:RAID卡I2C物理链路正常,但BMC未启动对其的数据采集任务,原因极可能是:

:red_circle: SR文件中缺少Scanner或TypeId配置错误,导致storage模块未初始化该RAID卡的带外管理任务

:check_mark: 建议下一步操作:

  1. 检查SR文件中是否为 Chip_RaidChip 配置了 Scanner
  2. 设置正确的 TypeIdControllerType
  3. 添加 Accessor 并绑定到Sensor
  4. 重启BMC或重新加载SR,观察storage.log是否有控制器注册日志
  5. 若仍无日志,尝试手动i2cget验证读取能力

完成上述配置后,应可在日志中看到BMC主动读取RAID卡数据的行为,传感器值也将正常更新。

传感器并没有直接关联CSR中的Scanner,是在代码流程里更新的温度,看日志都没看到Raid卡初始化的流程,框架日志开了debug也找不到对应的报错了,你先看看能不能走进raid卡的init函数,第一行的打印在日志里就没搜到

    log:notice('controller init obj.Id = %s, object_id = %s, key = %s',
        self.obj.Id, CONTROLLER_ID, self.DeviceName)

应该是没有加载相应的so库导致init不成功,加了相应配置后,编译又失败了,这个帖子有解决办法,但是打不开:

2512版本如何设置libmgmt_protocol的编译选项 - 交流互助区 - openUBMC 论坛

你们能获取博通的so吗

2512加了这个编译项无法编译通过

后来在rootfs/ 下添加相应的so库解决了问题