基础板卡内存信息疑问

我们自己开发了拓展板,当前已经完成了CSR文件等适配。设备目前可以正常运行上下电,但是现在发现OS上电后,BMC的Web页面依然显示内存不在位。换成华为原本的拓展板并上电后,内存在位正常,内存信息显示也正常。想请问一下BCU板卡的内存信息是如何获取的?是否需要拓展板CPLD适配还是需要做其他配置?

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

:white_check_mark: 六、总结与建议

项目 是否必须
配置 Memory 对象 :white_check_mark:
配置 MemorySilk 对象 :white_check_mark:
修改 FRU 中 UID/BOM :white_check_mark:
拓展板 CPLD 适配 :cross_mark: 否(除非有特殊控制需求)
加载 memory_xxx.sr 文件 :white_check_mark:

:white_check_mark: 建议操作:

  1. 对比原厂拓展板的 FRU 信息(UID/BOM)
  2. 确保您的 .sr 配置片段中包含完整的 MemoryMemorySilk 对象
  3. 使用 CSR Studio 工具校验配置完整性
  4. 验证日志中是否成功加载内存配置
点击此处查看详细分析解答

基础板卡(BCU)内存信息获取机制与问题排查

根据您提出的问题,即自研拓展板在系统上电后,BMC的Web界面显示内存不在位,而使用华为原厂拓展板则正常,以下是对BCU板卡内存信息获取机制的详细解析以及可能原因和解决方案。


:magnifying_glass_tilted_left: 一、BCU板卡内存信息是如何获取的?

在 openUBMC 架构中,内存信息并非由 BIOS 直接传递给 BMC,而是通过以下两个关键配置对象由 BMC 主动管理:

:white_check_mark: 1. Memory 对象

  • 功能:定义物理内存槽位的存在性、位置、容量、速率等属性。
  • 作用
    • 用于在 BMC 接口中展示“内存在位”状态。
    • 支持温度传感器、在位检测、故障告警等功能。
  • 数据来源:依赖于 CSR 文件中的 memory_xxx.sr 配置文件(如 memory_2p16ch16_0.sr),这些文件会被框架加载以生成实际的 Memory 实例。

:white_check_mark: 2. MemorySilk 对象

  • 功能:定义内存的“丝印信息”,即主板上标注的内存插槽标签(如 DIMM_A1、DIMM_B2)。
  • 作用
    • 实现带内(In-band)操作系统或 BIOS 所看到的内存槽位名称与 BMC 显示的一致。
    • 若配置错误会导致内存显示重复、顺序错乱或无法识别。

:pushpin: 重要结论
即使硬件上插有内存,如果未正确配置 MemoryMemorySilk 对象,BMC 将认为内存“不在位”,并无法在 Web 页面中显示相关信息。


:warning: 二、为什么更换为华为原拓展板后信息正常?

这说明:

  1. 主控板(BCU)的 BMC 固件和配置已支持该平台的内存管理
  2. 华为原拓展板相关的 CSR 配置完整且包含了正确的 MemoryMemorySilk 定义
  3. 您的自研拓展板虽然能完成上下电流程,但缺少对内存管理相关的对象配置

:puzzle_piece: 三、是否需要拓展板 CPLD 适配?

:cross_mark: 一般情况下,CPLD 不直接参与内存信息的上报

  • CPLD 主要负责:
    • 上下电逻辑控制
    • 在位检测(Presence)
    • 温度监控、电源管理信号切换
  • 内存槽位是否存在、内存是否在位等信息通常由 FRU EEPROM 或 CSR 配置决定,而不是由 CPLD 报告。

:white_check_mark: 例外情况:
如果您的拓展板上有独立的 MCU 或 CPLD 负责管理外扩内存子系统(如 NV-DIMM 控制器),才需要 CPLD 配合通信协议(如 SMBus)进行数据交互。但从描述看此场景不适用。


:hammer_and_wrench: 四、如何解决“BMC Web 显示内存不在位”的问题?

请按以下步骤进行排查和修复:

:white_check_mark: 步骤 1:确认是否加载了正确的 memory_xxx.sr 文件

检查是否在项目中引入了对应 CPU 架构和通道数的内存配置文件,例如:

# 典型路径(openUBMC/vpd)
vendor/Huawei/TianChi/BCU/memory_2p16ch16_0.sr

:white_check_mark: 建议:可从 GitCode - openUBMC/vpd 获取标准模板,并根据您的拓扑修改。


:white_check_mark: 步骤 2:验证 CSR 配置中是否包含 MemoryMemorySilk 对象

示例配置片段(.sr 文件中):

Object("Memory", "DIMM_A1") {
    .Location = "A1",
    .Slot = 0,
    .Channel = 0,
    .Controller = 0,
}

Object("MemorySilk", "Silk_DIMM_A1") {
    .Location = "A1",
    .SilkScreen = "DIMM_A1"
}

:magnifying_glass_tilted_left: 提示:可通过 CSR Studio 工具可视化编辑并导出标准配置。


:white_check_mark: 步骤 3:检查 FRU EEPROM 中的 UID 和 BOM 是否匹配

天池架构下,BMC 会根据以下信息自动加载对应 .sr 文件:

  • UID:唯一标识板卡类型
  • BOM ID:决定加载哪个版本的配置

请确保您的拓展板 FRU 中写入的 UIDBOM 与 CSR 配置中声明的相匹配,否则将加载错误或默认配置。

:light_bulb: 参考文档:板卡适配指南


:white_check_mark: 步骤 4:查看日志确认 SR 加载状态

运行以下命令检查是否有加载失败日志:

# 查看 CSR 加载日志
journalctl -u cpuboard.service | grep -i memory
dmesg | grep -i sr

常见错误:

  • Failed to load memory_xxx.sr: 路径错误或格式不合法
  • No memory objects found: 没有定义 Memory 实例

:books: 五、相关参考资料

文档 说明
鲲鹏模组适配约束FAQ 提到必须配置 MemoryMemorySilk 对象
CSR配置字典之CpuBoard类 定义了 CpuBoard 与内存管理的关系
板卡适配指南 详解如何通过 EEPROM UID/BOM 加载 .sr 文件
硬盘背板开发指南 类似机制适用于其他扩展板卡

:white_check_mark: 六、总结与建议

项目 是否必须
配置 Memory 对象 :white_check_mark:
配置 MemorySilk 对象 :white_check_mark:
修改 FRU 中 UID/BOM :white_check_mark:
拓展板 CPLD 适配 :cross_mark: 否(除非有特殊控制需求)
加载 memory_xxx.sr 文件 :white_check_mark:

:white_check_mark: 建议操作:

  1. 对比原厂拓展板的 FRU 信息(UID/BOM)
  2. 确保您的 .sr 文件中包含完整的 MemoryMemorySilk 对象
  3. 使用 CSR Studio 工具校验配置完整性
  4. 验证日志中是否成功加载内存配置

如仍存在问题,建议提供:

  • 您当前使用的 .sr 配置片段
  • fru print 输出的板卡 FRU 信息
  • BMC 日志中关于 SR 加载的记录

以便进一步分析。

可以查看该文档先进行初步的排查
docs/docs/zh/development/faq/hardware/compute.md · openUBMC/docs - AtomGit | GitCode

感谢,我先排查一下

你好,请教下你这个内存信息额显示问题解决了没有啊? 我这边也碰到类似的,

只显示了一半的内存在位信息,如下所示,

sr中的配置信息如下:

因为有其他的事情,我们还没处理。关键是我们没有BCU的sr文件

vpd组件里有些现成的BCU的sr文件

哪些BCU和我们现在使用的UID对不上,只能作为参考

嗯嗯,我试了下,主要是配置Memory和MemorySilk对象,我刚把这个在位数量显示的问题搞定了,ChannelID和DIMM 编号 要和CPU上dmidecode -t memory看到要保持一致。希望对你有所帮助

这个配置是在BCU的csr文件里面?如果是的话我们没有BCU的csr,还没发改动

嗯,我是用的openUBMC里面的 BCU/目录下的sr文件

我这边不是走的天池架构的加载模式,所以是用的自定义sr的方式加载的BCU sr这块的文件

因为我们是自己研发了拓展版,用华为的拓展版+基础班内存能正常显示,变成我们自研拓展版内存就不能显示了。同时由于没有BCU的SR文件,所有关注点更多的是拓展版这边。不过看到你这么说,搞不好我们要处理一下BCU的CS了