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 字符串时强制输出 PSU1、PSU2,不再使用默认的硬件索引拼接。
- 该方法属于 平台级定制,不修改通用代码,风险可控且易于维护。
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、机箱丝印三者统一,问题已解决。
