Debug篇-1

今天做了一个debug,是bmc、机箱丝印和smbios显示不同的问题

思路

1.刚开始想通过这个bmc web的psu去对齐smbios type39的psu,之后了解到bmc、机箱的psu显示 和 bios的smbios type显示的psu用的不是一套系统,×

2.尝试修改具体项目的sdl文件 用token覆盖的方式去修改smbios显示,发现与源文件宏定义冲突,×

3.尝试修改源文件 在smbiostype39.c里修改代码逻辑,加if判断 针对单个项目做定制,被经理否定,×

后面继续尝试token覆盖的方式,将psu1 psu2改成psu_1,psu_2,避免宏定义冲突,对

后面选对ami版本 编译代码 生成bin文件后 去jenkins平台生成hpm文件 烧录进机器 进入os 执行dmidecode -t 39 显示psu_1和psu_2 debug成功

问题

SMBIOS Type39 电源位置显示与 BMC、机箱丝印不一致。

现象

  • SMBIOS Type39 Location 显示:PSU_0、PSU_1
  • BMC Web 显示:PSU1、PSU2
  • 机箱丝印为:PSU1、PSU2→ 三处命名不统一,违反规格要求。

根因

BIOS 在填充 SMBIOS Type39 的 Location 字段时,直接使用了 0‑based 硬件索引(如 CPLD/PMBus 逻辑编号 0、1),未做 +1 偏移 以匹配物理丝印和 BMC 的 1‑based 用户视图,导致写成 PSU_0/PSU_1

解决方案

在 SG7767A 项目专属的 SG7767A.sdl 文件中编写 Token 覆盖,使 BIOS 在生成 Location 字符串时强制输出 PSU1PSU2,不再使用默认的硬件索引拼接。

  • 该方法属于 平台级定制,不修改通用代码,风险可控且易于维护。

Token 覆盖原理

AMI Aptio 体系中,SMBIOS 字段常由 Setup Token 或平台钩子函数动态生成。本项目在 SG7767A.sdl 中覆盖了与 PSU Location 相关的 Token,干预了 Type39 Location 字符串的构建逻辑,使输出固定为 PSU1/PSU2,覆盖了原本的 PSU_%d 拼接。该覆盖仅作用于 SG7767A 平台,保证了 BIOS 侧命名与 BMC Web、物理丝印完全一致。

验证要点

  • 单 PSU 在位、双 PSU 交换、热插拔后,SMBIOS Type39 Location 始终显示 PSU1、PSU2。
  • 管理软件仍能通过其他字段(如 Device ID、Serial)正确关联电源状态,不因 Location 名称变化而错乱。
  • 其他 SKU 或未来 CPLD 版本不受该 Token 覆盖影响。

结论

通过 SG7767A 专用的 SG7767A.sdl Token 覆盖,修正了 SMBIOS Location 的命名偏差,使 BIOS、BMC、机箱丝印三者统一,问题已解决。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务