我们自己开发了拓展板,当前已经完成了CSR文件等适配。设备目前可以正常运行上下电,但是现在发现OS上电后,BMC的Web页面依然显示内存不在位。换成华为原本的拓展板并上电后,内存在位正常,内存信息显示也正常。想请问一下BCU板卡的内存信息是如何获取的?是否需要拓展板CPLD适配还是需要做其他配置?
答案内容由AI生成,仅供参考:
六、总结与建议
| 项目 | 是否必须 |
|---|---|
配置 Memory 对象 |
|
配置 MemorySilk 对象 |
|
| 修改 FRU 中 UID/BOM | |
| 拓展板 CPLD 适配 | |
加载 memory_xxx.sr 文件 |
建议操作:
- 对比原厂拓展板的 FRU 信息(UID/BOM)
- 确保您的
.sr配置片段中包含完整的Memory和MemorySilk对象 - 使用 CSR Studio 工具校验配置完整性
- 验证日志中是否成功加载内存配置
点击此处查看详细分析解答
基础板卡(BCU)内存信息获取机制与问题排查
根据您提出的问题,即自研拓展板在系统上电后,BMC的Web界面显示内存不在位,而使用华为原厂拓展板则正常,以下是对BCU板卡内存信息获取机制的详细解析以及可能原因和解决方案。
一、BCU板卡内存信息是如何获取的?
在 openUBMC 架构中,内存信息并非由 BIOS 直接传递给 BMC,而是通过以下两个关键配置对象由 BMC 主动管理:
1. Memory 对象
- 功能:定义物理内存槽位的存在性、位置、容量、速率等属性。
- 作用:
- 用于在 BMC 接口中展示“内存在位”状态。
- 支持温度传感器、在位检测、故障告警等功能。
- 数据来源:依赖于 CSR 文件中的
memory_xxx.sr配置文件(如memory_2p16ch16_0.sr),这些文件会被框架加载以生成实际的Memory实例。
2. MemorySilk 对象
- 功能:定义内存的“丝印信息”,即主板上标注的内存插槽标签(如 DIMM_A1、DIMM_B2)。
- 作用:
- 实现带内(In-band)操作系统或 BIOS 所看到的内存槽位名称与 BMC 显示的一致。
- 若配置错误会导致内存显示重复、顺序错乱或无法识别。
重要结论:
即使硬件上插有内存,如果未正确配置Memory和MemorySilk对象,BMC 将认为内存“不在位”,并无法在 Web 页面中显示相关信息。
二、为什么更换为华为原拓展板后信息正常?
这说明:
- 主控板(BCU)的 BMC 固件和配置已支持该平台的内存管理。
- 华为原拓展板相关的 CSR 配置完整且包含了正确的
Memory和MemorySilk定义。 - 您的自研拓展板虽然能完成上下电流程,但缺少对内存管理相关的对象配置。
三、是否需要拓展板 CPLD 适配?
一般情况下,CPLD 不直接参与内存信息的上报。
- CPLD 主要负责:
- 上下电逻辑控制
- 在位检测(Presence)
- 温度监控、电源管理信号切换
- 但内存槽位是否存在、内存是否在位等信息通常由 FRU EEPROM 或 CSR 配置决定,而不是由 CPLD 报告。
例外情况:
如果您的拓展板上有独立的 MCU 或 CPLD 负责管理外扩内存子系统(如 NV-DIMM 控制器),才需要 CPLD 配合通信协议(如 SMBus)进行数据交互。但从描述看此场景不适用。
四、如何解决“BMC Web 显示内存不在位”的问题?
请按以下步骤进行排查和修复:
步骤 1:确认是否加载了正确的 memory_xxx.sr 文件
检查是否在项目中引入了对应 CPU 架构和通道数的内存配置文件,例如:
# 典型路径(openUBMC/vpd)
vendor/Huawei/TianChi/BCU/memory_2p16ch16_0.sr
建议:可从 GitCode - openUBMC/vpd 获取标准模板,并根据您的拓扑修改。
步骤 2:验证 CSR 配置中是否包含 Memory 和 MemorySilk 对象
示例配置片段(.sr 文件中):
Object("Memory", "DIMM_A1") {
.Location = "A1",
.Slot = 0,
.Channel = 0,
.Controller = 0,
}
Object("MemorySilk", "Silk_DIMM_A1") {
.Location = "A1",
.SilkScreen = "DIMM_A1"
}
提示:可通过
CSR Studio工具可视化编辑并导出标准配置。
步骤 3:检查 FRU EEPROM 中的 UID 和 BOM 是否匹配
天池架构下,BMC 会根据以下信息自动加载对应 .sr 文件:
- UID:唯一标识板卡类型
- BOM ID:决定加载哪个版本的配置
请确保您的拓展板 FRU 中写入的 UID 和 BOM 与 CSR 配置中声明的相匹配,否则将加载错误或默认配置。
参考文档:板卡适配指南
步骤 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实例
五、相关参考资料
| 文档 | 说明 |
|---|---|
| 鲲鹏模组适配约束FAQ | 提到必须配置 Memory 和 MemorySilk 对象 |
| CSR配置字典之CpuBoard类 | 定义了 CpuBoard 与内存管理的关系 |
| 板卡适配指南 | 详解如何通过 EEPROM UID/BOM 加载 .sr 文件 |
| 硬盘背板开发指南 | 类似机制适用于其他扩展板卡 |
六、总结与建议
| 项目 | 是否必须 |
|---|---|
配置 Memory 对象 |
|
配置 MemorySilk 对象 |
|
| 修改 FRU 中 UID/BOM | |
| 拓展板 CPLD 适配 | |
加载 memory_xxx.sr 文件 |
建议操作:
- 对比原厂拓展板的 FRU 信息(UID/BOM)
- 确保您的
.sr文件中包含完整的Memory和MemorySilk对象 - 使用 CSR Studio 工具校验配置完整性
- 验证日志中是否成功加载内存配置
如仍存在问题,建议提供:
- 您当前使用的
.sr配置片段 fru print输出的板卡 FRU 信息- BMC 日志中关于 SR 加载的记录
以便进一步分析。
可以查看该文档先进行初步的排查
docs/docs/zh/development/faq/hardware/compute.md · openUBMC/docs - AtomGit | GitCode
感谢,我先排查一下
因为有其他的事情,我们还没处理。关键是我们没有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了


