无法获取到CPU的温度,电压等健康信息

问题描述

1.无法获取CPU的温度,电压,功率等健康信息

2.S920S08模组启动CPU有大量报错信息BT read byte failed,是BMC与鲲鹏模组S920S08的通讯异常导致的吗?

3.社区中的bmc_sdk.zip与鲲鹏BMC管理软件提供的二进制开发包iBMC300_5.12.0.7.tar.gz使用方法一样吗?硬件信息是鲲鹏S920S08模组+Hi1711BMC模组,应该使用那个SDK开发包bmc_sdk.zip还是iBMC300_5.12.0.7.tar.gz

4.按照社区新增硬件文档添加一个Lm75温度传感器温度上传正常,添加三个后温度显示均为0,三个温度传感器的地址分别是0x90,0x92,0x96可以正常识别到。vpd/vendor/Huawei/Server/Kunpeng/openUBMC/root.sr文件我上传到附件中

root.txt (12.2 KB)

环境信息,96

  • 操作系统: Ubuntu 24.04]

    软件版本:OpenUBMC2512

  • 硬件配置:CPU鲲鹏S920S08模组,BMC是Hi1711模组,

期望结果

1.可以获取到鲲鹏S920S08模组的健康信息。

2.BMC与鲲鹏S920S08的通讯正常。

3.三个温度传感器都可以采集到信息

问题中的第4条已经解决,root.sr配置有问题

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

:white_check_mark: 总结

问题 解决方案
1. 无法获取CPU健康信息 修复IPMB通信,确保BIOS与BMC握手正常
2. BT read byte failed 检查I²C链路、地址冲突、Entity定义缺失
3. SDK选择 使用华为官方包 iBMC300_5.12.0.7.tar.gz
4. LM75多传感器读数为0 修改SR文件,为每个传感器单独配置Scanner和Sensor对象

:green_circle: 最终目标:通过规范的SR配置、使用官方SDK、确保IPMB通信正常,使BMC能够稳定采集S920S08模组的CPU温度、电压、功率及外部传感器信息。

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

针对鲲鹏S920S08模组无法获取CPU健康信息等问题的综合分析与建议

根据您提供的详细问题描述、系统环境和日志信息,以下是围绕 S920S08模组无法获取CPU温度、电压等健康信息 的全面分析与解决建议。


:wrench: 一、问题核心总结

问题 现象描述 初步判断
1. 无法获取CPU温度/电压/功率 传感器无有效读数、系统报错频繁 BMC与主控通信异常或IPMB链路故障
2. BT报错:BT read byte failed 启动时大量出现此错误 表明BMC与CPU模组之间的IPMB通信异常
3. 开发包选择混乱 不清楚应使用 bmc_sdk.zip 还是 iBMC300_5.12.0.7.tar.gz 涉及适配平台差异
4. 多个LM75传感器读数为0 地址可识别,但多个添加后均显示0℃ SR文件配置或数据映射问题

:white_check_mark: 二、逐项分析与解决方案

1. 无法获取CPU温度、电压、功率健康信息

:pushpin: 根本原因分析:

  • 在知识库中,“BMC”作为独立的管理控制器,通过 IPMB总线(基于I²C)从CPU、电源、风扇等部件获取传感器数据。
  • IPMB消息传输失败 时,将导致:
    • :cross_mark: CPU温度无法获取(实体:CPU Temperature
    • :cross_mark: 内存温度无法获取(实体:Memory Temperature
    • :cross_mark: 核心温度缺失(实体:Core Temperature
  • 您提到的“大量 BT read byte failed”错误,正是 IPMB通信失败的典型表现,常见于以下场景:
    • I²C线路物理连接不良
    • 地址冲突或波特率不匹配
    • CPLD或BIOS未正确初始化IPMB接口
    • BMC固件未适配该硬件模组

:white_check_mark: 解决建议:

  1. 检查IPMB物理链路状态

    • 使用命令(如ipmitool mc info)确认BMC是否正常运行。
    • 检查I²C总线是否存在干扰或断路(可通过示波器检测SCL/SDA信号质量)。
  2. 排查BT read byte failed错误来源

    • “BT”指 Bridge Type 接口,是IPMI标准中用于带外通信的一种方式。
    • 此失败表明BMC与Host处理器之间通信异常。
    • 可能原因
      • S920S08模组与Hi1711 BMC之间的I²C电平不匹配
      • 需要在SR文件中显式声明Entity及IPMB路径
      • 固件未加载正确的Entity定义或IpmiEntity对象
  3. 确认BMC固件是否适配S920S08模组

    • OpenUBMC 25.12 是否正式支持 S920S08 + Hi1711组合
    • 若非官方支持列表内硬件,请考虑:
      • 定制化移植SR配置
      • 升级至官方发布的兼容版本(如华为内部v3.x系列iBMC)
  4. 建议操作

    # 查询MC状态(需在BMC侧执行)
    ipmitool mc info
    
    # 查看SDR传感器列表
    ipmitool sdr list
    
    # 检查是否有CPU相关传感器存在但状态异常
    ipmitool sensor list | grep -i temp
    

2. BT read byte failed 是否由BMC与S920S08通讯异常引起?

:white_check_mark: 明确答案:是的,基本可以确认是IPMB通信异常所致

:magnifying_glass_tilted_left: 依据来自知识图谱:

  • BMC failed to obtain CPU temperature data, indicating a communication or hardware issue.
  • 描述明确指出:当BMC无法获取CPU温度时,根本原因在于通信或硬件问题
  • “BT read byte failed” 是底层I²C/IPMB协议栈的读取失败,表明:
    • BMC已发起请求
    • 对方(S920S08)未响应或响应超时

:white_check_mark: 建议排查步骤:

  1. 验证I²C地址分配

    • S920S08作为Slave设备,是否在I²C总线上分配了正确地址?
    • 可通过:
      i2cdetect -y <bus_id>  # 扫描指定I²C总线
      
      确认目标地址是否在线。
  2. 确认BIOS是否启动并暴露IPMI接口

    • 若BIOS未完成初始化,则Host不响应BMC请求。
    • 检查日志中是否有 Host is ready for IPMI 类似信息。
  3. 检查CSR配置中是否注册了该模组的Entity

    • root.sr或其他.sr配置文件中,必须包含类似:
      entity S920S08_CPU : Entity {
          EntityId = 32;        // 符合IPMI规范
          EntityInstance = 1;
          IpmiEntity = true;
      }
      
    • 并绑定其传感器路径。

3. SDK选择问题:bmc_sdk.zip vs iBMC300_5.12.0.7.tar.gz

对比项 bmc_sdk.zip(社区版) iBMC300_5.12.0.7.tar.gz(华为官方)
来源 社区开源项目(可能为OpenUBMC分支) 华为官方提供(闭源+签名)
适用平台 通用型BMC开发,适合学习和原型 专用于华为iBMC平台
功能完整性 部分接口开放,依赖社区维护 包含完整驱动、工具链、文档
签名与验证 无强制要求 包含hpm_signer签名,需验证后升级
调试支持 有限 提供完整调试工具(ipmcset, clp_commands)
兼容性 不一定适配Hi1711+BMC组合 明确支持Kunpeng系列模组

:white_check_mark: 结论与建议:

在鲲鹏S920S08 + Hi1711 BMC模组的开发中,应优先使用华为提供的 iBMC300_5.12.0.7.tar.gz 开发包。

原因如下:

  • Hi1711是华为自研BMC芯片,其底层寄存器、驱动、I²C mux控制等均为私有实现;
  • 社区bmc_sdk.zip通常基于openBMC标准,可能缺少对HiSilicon芯片组的适配;
  • 官方开发包包含:
    • 正确的板级支持包(BSP)
    • 修订过的I²C地址映射
    • 已验证的GPIO/CPLD控制逻辑
    • 专用的HPM升级工具(hpm_signer)

:pushpin: 建议

  • 联系华为技术支持获取完整SDK文档;
  • 使用官方工具构建HPM升级包,避免手动打包引发签名错误。

4. 多个LM75传感器读数为0的问题分析

:pushpin: 当前现象:

  • 使用12cdetect -a 11扫描到地址 0x48, 0x49, 0x4b(即十进制72, 73, 75)——注意:您提到传感器地址为0x90/0x92/0x96,这应是7位地址左移后的写地址,对应7位地址为0x48, 0x49, 0x4B)
  • 添加多个LM75后,仅第一个能正常读取,其余显示为0℃

:cross_mark: 常见错误原因:

  1. SR文件中传感器配置错误

    • 所有LM75共用同一个Scanner读取,而未区分Slave地址;
    • 示例错误配置:
      scanner LM75_Scanner {
          Driver = "lm75";
          I2cBus = "i2c_11";
          I2cAddr = 0x48;  // 固定写死,只能读一个
      }
      
  2. 未为每个传感器创建独立的ThresholdSensor对象

  3. 没有正确映射ReadingValue到实际读数路径

  4. 未设置合理的MBRBExp参数进行数值转换

:white_check_mark: 正确配置方法(建议修改root.sr):

// 定义三个独立的I2C设备
device LM75_CPU : Lm75TempSensor {
    I2cBus = "i2c_11";
    I2cAddr = 0x48;  // 对应您说的0x90
    Entity = "/Entities/CpuBoard1";
}

device LM75_BMC_Z : Lm75TempSensor {
    I2cBus = "i2c_11";
    I2cAddr = 0x49;  // 0x92
    Entity = "/Entities/BmcModule";
}

device LM75_PWR : Lm75TempSensor {
    I2cBus = "i2c_11";
    I2cAddr = 0x4b;  // 0x96
    Entity = "/Entities/PowerBoard";
}

// 分别创建Scanner
scanner LM75_CPU_Scanner {
    Device = "LM75_CPU";
}

scanner LM75_BMC_Z_Scanner {
    Device = "LM75_BMC_Z";
}

scanner LM75_PWR_Scanner {
    Device = "LM75_PWR";
}

// 创建ThresholdSensor
object ThresholdSensor_CPU_Temp {
    OwnerId = 32;
    EntityId = 32;
    EntityInstance = 1;
    SensorType = 1;
    Initialization = 127;
    Reading = "<= /Scanner/LM75_CPU_Scanner.Value";
    SensorName = "CPU_Z Temperature Sensor (°C)";
    Unit = 128;
    NominalReading = 25;
    NormalMaximum = 85;
    MaximumReading = 125;
    MinimumReading = 0;
    UpperThreshold = [90, 105];  // 轻微,严重
}
// 其他两个类似配置...

:white_check_mark: 验证命令:

# 登录BMC后查看传感器
ipmcget -t sensor -d list

# 或使用Redfish API(若启用)
curl -k https://<bmc_ip>/redfish/v1/Chassis/1/Thermal

:books: 三、推荐配置与最佳实践

:white_check_mark: 推荐工作流程:

  1. 使用iBMC300_5.12.0.7.tar.gz SDK进行开发
  2. 确保SR文件中正确定义Entity和Sensor结构
  3. 编译HPM升级包时使用hpm_signer签名
  4. 升级前确保时间同步,否则可能导致升级失败
  5. 通过ipmitool和Web界面双重验证传感器状态

:white_check_mark: 关键配置点:

项目 建议值
I²C总线编号 根据硬件设计确定(如i2c_11
Sensor类型 ThresholdSensor
数据源 <= /Scanner/xxx.Value
温度单位 128(有符号摄氏度)
读数转换 设置M=1, B=0, RBExp=0用于直接读取
实体归属 明确指向CpuBoard1BmcModule

:telephone_receiver: 四、延伸建议

  1. 联系华为技术支持

    • 提供完整的root.sr文件和日志;
    • 请求适配S920S08的参考设计案例;
    • 获取Hi1711芯片的I²C时序与上拉电阻建议。
  2. 启用BMC日志追踪

    # 查看BMC系统日志
    journalctl -u sensor-manager
    
    # 捕获IPMI错误
    dmesg | grep -i ipmi
    
  3. 参考文档


:white_check_mark: 总结

问题 解决方案
1. 无法获取CPU健康信息 修复IPMB通信,确保BIOS与BMC握手正常
2. BT read byte failed 检查I²C链路、地址冲突、Entity定义缺失
3. SDK选择 使用华为官方包 iBMC300_5.12.0.7.tar.gz
4. LM75多传感器读数为0 修改SR文件,为每个传感器单独配置Scanner和Sensor对象

:green_circle: 最终目标:通过规范的SR配置、使用官方SDK、确保IPMB通信正常,使BMC能够稳定采集S920S08模组的CPU温度、电压、功率及外部传感器信息。

如需进一步协助,请提供 root.sr 文件内容及完整的启动日志输出,以便深入诊断。

1、无法获取 CPU 相关信息,确认是否为 ipmb 通道通信异常,可在 bmc 侧通过以下命令验证,若无法正常回复,则可能是 bmc 侧的 ipmb 服务异常或对端响应异常

-- 获取 CPU 温度
busctl --user call bmc.kepler.ipmi_core /bmc/kepler/IpmiCore bmc.kepler.IpmiCore Request a{ss}yyyyyay 0 1 0 0x30 0x00 0x98 5 0xdb 0x07 0x00 0x01 0x00

2、大量 BT read byte failed 报错,确认是否 BT 通道通信异常,可开启 trace 南向追踪后再重启 OS,观测追踪结果确认 bmc 侧是否收到系统侧发送的消息,以及是否正常回复

mdbctl traceipmi start file bt

追踪结果收集在 /tmp/ipmi.txt,若未生成该文件则表示 BMC 完全未收到消息

1.正常吗?

2.重启OS后/tmp/目录下无ipmit.txt,是与BMC的root.sr的文件配置有关吗?

1、busctl 命令执行成功,说明 ipmb 通信无问题,再确认下 CPU 相关信息无法获取吗?若还无法获取请明确下是哪些传感器信息异常
2、重启后多等待一些时间,等进入 bios 启动阶段后 bios 会向 bmc 发消息,若 3 分钟内都无 ipmi.txt 生成,则说明 bmc 未接收到 BT 通道的消息。问题可能发生在 ① bios 未正常发送消息;② 中间链路消息传输异常(主要是 cpld);③ bmc 侧 bt 驱动功能异常。若有问题请一键收集日志并提供至 wanghaozhou2@huawei.com

1.我修改了BMC的root.sr文件,配置了14100513_EXU_0.sr后,BMC可以获取的CPU的传感器,由于BMC显示CPU是下电状态,导致CPU的传感器值没有获取到。CPU的上下电状态时是配置那个sr文件,是fructrl组件中的文件吗?

2.修改BMC的root.sr文件,配置了14100513_EXU_0.sr后,CPU启动不会报错BT read byte failed,可以获取到日志ipmi.txt

ipmi.txt (1.4 MB)

14100513_EXU_0.sr 文件中是否包含一个 DFT 对象?
这样问的原因是 DFT 是 ipmi_core 组件的一个对象,并且在 ipmi_core 启动阶段会依赖几个必要对象都分发注册后才可以启动核心处理,比如 ipmb 通道的初始化;而 DFT 则是其中一个必要对象