ipmitool访问IPMB总线上的设备,无法获取值

ipmitool通过指令Get device id访问BMC是正常的,但是访问IPMB的设备一直无法访问;这个是硬件链接关系:

下图是IIC配置:

问题描述

通过busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore Request a{ss}yyyyyay 0 1 6 0x06 0 0x01 0x00指令访问MCU1,能正常通信,尝试用ipmitool 加参数-b 6 -t 134或者-b6 -t 0x86,都不能正常获取信息;

image

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2506]

  • 硬件配置:[如 CPU、内存等]

期望结果

预想的结果应该是该执行该指令后,返回MCU1的ID信息,与busctl执行的结果一致

实际结果

总线上都没有抓到数据,像是桥接指令没有正常发送出来

尝试过的解决方案

通过-vvv打印过程,并结合AI分析,给出的结论是

根因锁定:ipmi_core 的 LAN 命令层没有实现 Send Message(0x34) → IPMB 桥接。修这个要去 ipmi_core
的仓(不在当前工作区),有两个实现要点:

  1. 收到 0x34 后解析报文里的 channel=6、从机地址 0x86、内部 netfn/lun/cmd,走和 DBus Request 相同的内部路径,回包带回
    RMCP+ 会话。
  2. 有个映射坑:DBus Request 是用 host_id 定位从机的,而 Send Message 带的是从机地址 0x86——ipmi_core 内部得有
    channel+从机地址 → host 的反查(vpd 里已有这份配置,就是 appIpmbTarget TODO 2 说的那个配置域

由于没有找到ipmi_core组件源码,查看编译版本中,ipmi_core组件的版本信息为:

ipmi_core/1.70.39@openUBMC.release/rc

分析结论

请问这个应该怎么解决?可能是什么原因?

-vvv的完成显示见以下压缩文件:

ipmitool -vvv 显示.zip (1.7 KB)

答案内容由AI生成,仅供参考:
总结:您的问题极有可能是由 ipmitool 参数使用错误导致的。请优先尝试 -b 6 -t 134 的用法,这能解决大部分同类问题。如果仍无法解决,再深入检查 ipmi_core 组件对桥接命令的实现和配置。

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

根据您提供的描述,您在使用 ipmitool 通过 IPMB 总线访问设备时遇到问题,但通过 busctl 调用 bmc.kepler.ipmi_core 服务却能正常通信。这表明 IPMB 物理链路和底层通信是正常的,问题很可能出在 ipmitool 的命令参数配置上。

根据知识库中的信息,您的场景很可能是因为命令参数使用错误。

问题根因分析

  1. 参数混淆:在与该问题高度相似的案例(参考文档1)中,用户最初也遇到了相同的情况,即直接使用 ipmitool 访问失败,但通过 busctl 调用能够成功。该案例的最终解答明确指出:-b 和 -t 的参数写反了。

    • -b 是指定通道(Channel)
    • -t 是指定从机地址(Target Address)
    • 正确的参数应该是 -b 6 -t 134。您尝试的 -b 6 -t 134 或 -b6 -t 0x86 中,134 和 0x86 是十进制和十六进制表示,但核心在于参数的位置是否正确。您需要确保 -b 后面跟的是通道号(6),-t 后面跟的是设备地址(134 即 0x86)。
  2. 桥接功能依赖正确的配置:访问 IPMB 总线上的设备,需要依赖 IPMI 的桥接转发功能。根据知识库,ipmi_core 组件负责此功能,但通过标准命令(如 ipmitool)执行时,需要 IPMIChannel、ChannelID 和 ChanType 等配置正确。如果参数错误,桥接指令就无法正确发送。

  3. 软件实现层面:您的分析结论指出 ipmi_core 可能未实现 LAN 命令层的 Send Message(0x34) 桥接。虽然这可能是深层原因,但根据最直接的案例证据,首先应排查和纠正 ipmitool 的参数使用。

解决方案建议

第一步:修正 ipmitool 命令参数

根据参考文档1中的解决方案,请尝试使用以下命令格式访问您的 MCU1(地址 0x86):

ipmitool -H <BMC_IP> -I lanplus -U <用户名> -P <密码> -b 6 -t 134 mc info

请将 <BMC_IP>、<用户名>、<密码> 替换为您实际的数值。此命令通过通道6(IPMB)向地址为134(0x86)的设备发送指令。

第二步:如果参数修正后仍失败

如果上述参数修正后依然无法访问,则表明问题可能确实存在于软件实现层面。根据知识库中的经验分享(参考文档2),openubmc-ipmi-command-guide 技能可以快速查找 IPMI 命令的归属组件和使用指导。您可以:

  1. 查阅 ipmi_core 组件的详细文档(如 ipmi_core.md),确认它是否已完整支持标准的 IPMI 桥接转发(Send Message 命令)。
  2. 确认 IPMB 通道相关配置(如 IPMIChannel、ChanType 等)是否与您 ipmitool 命令中的参数一致。

总结: 您的问题极有可能是由 ipmitool 参数使用错误导致的。请优先尝试 -b 6 -t 134 的用法,这能解决大部分同类问题。如果仍无法解决,再深入检查 ipmi_core 组件对桥接命令的实现和配置。

通过系统端调用ipmitool指令进行信息获取,也不成功

490830c13fa9aaf010a936669d86dff5

业务OS侧发送命令,观测中断个数是否有增加(一次命令会增加4个中断):
cat /proc/interrupts |grep ipmi
time ipmitool raw 6 4
cat /proc/interrupts |grep ipmi

如果中断不增加,则标准桥接命令(依赖BT中断通信)会超时失败。
BT中断依赖BMC/BIOS/CPLD等模块,问题定位思路:1)分析OS侧 dmesg |grep ipmi信息,确认BMC是否开启中断;2)BT中断使能依赖涉及到BIOS/CPLD等修改,需要机型对应产品硬件主导定位。