答案内容由AI生成,仅供参考:
PSR升级失败问题分析与解决方案
问题概述
在使用OpenUBMC2509版本对PSR(Platform Service Record)进行固件升级时,出现升级失败的问题。关键错误日志显示:
general_hardware ERROR: sr_upg_service.lua(139): [SRUpgrade] upgrade path can not get file, file_name:00000001040302003182.bin
该错误在多个文件上重复出现,最终导致 Upgrade HWSR process failed, ret=-1,升级流程异常终止。
问题定位
关键日志分析
- 错误代码:
sr_upg_service.lua(139)报错提示无法获取升级所需文件。 - 报错类型:
upgrade path can not get file表明系统在尝试读取.bin升级数据文件时失败。 - 升级阶段:此错误发生在
PROCESS阶段(set_stage: COMMON_PREPARE → PROCESS),即执行实际写入操作前的数据准备阶段。 - 对比成功日志:
- 成功的升级日志中,尽管也出现类似“不能获取文件”的报错,但后续仍能执行:
[SRUpgrade] upgrade start with version 1.18 [SRUpgrade] write header completed [SRUpgrade] write data completed [SRUpgrade] read back data and check it successfully [SRUpgrade] write file to eeprom successfully - 表明系统具备容错机制,对部分缺失文件可跳过处理,而失败案例则直接阻断流程。
- 成功的升级日志中,尽管也出现类似“不能获取文件”的报错,但后续仍能执行:
问题本质
核心原因:固件包中的 SR 文件(HWSR 类型)解包后未能正确生成或定位所需的
.bin数据文件,sr_upg_service.lua脚本在查找升级文件路径时失败。
这可能由以下原因导致:
-
HPM 包制作不规范:
- 使用 BMC Studio 打包时,未正确包含所有二进制数据文件(
.bin)。 - 或者打包路径配置错误,导致运行时无法按预期路径检索文件。
- 使用 BMC Studio 打包时,未正确包含所有二进制数据文件(
-
PSR 固件内容不完整或损坏:
- 源
.sr文件缺失某些组件的固件段。 .bin文件未正确嵌入到 HPM 包中。
- 源
-
OpenUBMC2509 版本兼容性问题:
- 25.09 版本加强了对升级文件完整性的校验逻辑。
- 在旧版本中可忽略的“文件缺失”警告,在新版本中可能被升级为硬性失败条件。
-
文件系统或内存权限问题:
- 升级过程中临时目录
/dev/shm/upgrade/...中文件未被正确提取或访问受限。
- 升级过程中临时目录
解决方案建议
1. 检查并重新打包 HPM 文件
- 使用 BMC Studio 工具重新构建 HPM 包:
- 确保所有
.bin文件已正确导入项目。 - 核对
filelist.cfg或打包配置中声明的文件名与实际存在的一致。 - 参考文档:BMC Studio用户指南
- 确保所有
- 验证打包后的 HPM 是否包含必要的二进制资源:
hpmtool list PSR_package.hpm
2. 验证 PSR 配置完整性
- 对照硬件实际拓扑,确认 PSR 文件中定义了所有需要升级的模块(如 Riser、背板等)。
- 若某些模块物理上不存在(如多 CPU 配置只装一个),应在 SR 中移除对应升级项,避免尝试访问空路径。
参考:社区中存在因“社区 SR 文件默认配置双 CPU,但实际单 CPU”导致异常的问题(见鲲鹏模组适配约束FAQ)。
3. 升级前清理环境
# 清理临时升级目录
rm -rf /dev/shm/upgrade/*
# 检查 shm 空间是否充足
df -h /dev/shm
空间不足可能导致文件写入失败或截断。
4. 查看完整日志链
使用“一键收集”功能获取完整日志包,并检查:
/AppDump/sensor/app.log/AppDump/hwdiscovery/connectors.txt/logDump/general_hardware.log
搜索关键词:
sr_upg_serviceupgrade_subjectHWSRFileNotFoundError
5. 尝试命令行升级以获取更详细输出
# 使用 ipmcset 命令执行升级(可结合调试输出)
ipmcset -t firmwareupdate -d updatespt -v /tmp/PSR.hpm
或通过 Redfish API 手动触发,便于捕获精确返回码。
已知相关案例参考
| 问题 | 相似点 | 参考链接 |
|---|---|---|
| 自研RISER的SR升级失败 | 日志结构一致,报错 check header failed,最终失败 |
文档块 #3 |
| 固件升级机制及常见问题 | 说明了 HPM 解析、签名验证、路径匹配等机制 | 搜索结果 #9 |
| 鲲鹏模组适配FAQ | 强调 SR 配置需与硬件一致,否则功能异常 | 搜索结果 #6 |
临时规避建议(适用于测试环境)
若暂时无法解决打包问题,可尝试:
- 只升级必需组件:将 HPM 包拆分为独立模块,逐个升级。
- 使用已验证的金样 SR 文件:从官方获取经过认证的 PSR 配置模板进行修改。
- 回滚至稳定版本测试:确认是否为 OpenUBMC2509 引入的新限制。
总结
| 项目 | 内容 |
|---|---|
| 故障类型 | 固件升级失败(PSR/HWSR) |
| 根本原因 | 升级路径中缺少必要 .bin 文件或路径解析失败 |
| 所属系统 | OpenUBMC2509 + Ubuntu 24.04 |
| 关键日志 | sr_upg_service.lua(139): upgrade path can not get file |
| 解决方案优先级 | 1. 重新打包 HPM 2. 验证 SR 完整性 3. 检查 BMC Studio 配置 |
建议行动:请开发者使用正确的
prototype.py脚本和manifest.yml配置重建固件包,并确保所有固件段均被正确包含(参考构建工程文档)。
如有更多上下文或完整日志包,可进一步深入定位。
相关链接: