答案内容由AI生成,仅供参考:
解决方案建议
1. 确认系统版本对应的签名算法
- 若当前系统版本为 V3,必须使用 PSS 填充算法签名;V2 可兼容 PKCS 和 PSS。
- 检查运行时日志
/var/log/app.log,确认是否有提示具体签名算法错误。
2. 简化 hpm_devkit.config
- 只保留 CPLD 固件的部件(即
upload_components = 0x80000000),移除 CONFIG、EEPROM 等额外部件。 - 参考已确认成功的 CPLD 包示例(如
KP_BCU_0x10_OPENUBMC.hpm)的配置文件结构。
3. 使用 bingo 工具链制作包
- 社区推荐使用
bingo集成工具(filesizecheck、crypto_tool、hpmimage等)来完成打包和签名,避免手动脚本遗漏关键步骤。 - 若仍需手动签名,请确保:
- 签名证书与当前系统信任的根证书一致(由
bingo生成的伙伴签名环境)。 image.filelist.cms中包含完整的摘要算法标识和签名值。
- 签名证书与当前系统信任的根证书一致(由
4. 对照社区已有讨论
- 您引用的帖子 CPLD场外打包疑问 中,回复者指明了 签名步骤的关键截图,建议核对是否完全按照该流程操作(尤其是签名标志位和证书配置)。
总结
当前失败根因是 固件包的数字签名部分不被系统正常解析,直接表现为 MdInit 参数缺失。常见原因包括签名算法不匹配、配置文件包含无关部件、或签名工具使用不当。请优先验证系统版本,采用标准的 PSS 签名,并确保 HPM 包内仅含 CPLD 固件部件。若仍无法解决,可通过查看完整日志(/var/log/app.log)定位更详细的错误码,并参考社区提供的 CPLD 包制作文档。
点击此处查看详细分析解答
问题分析
根据提供的日志,网页更新失败时关键错误为:
validate_sign.lua(234): bad argument #1 to 'MdInit' (number expected, got nil)
cms_verify_file_checksum fail
parse package(devkit.hpm) failed, ret:InvalidFirmwarePackage.
这表明在固件包的数字签名验证过程中,MdInit 函数收到的参数为 nil(应为数字),导致校验失败,最终包被判定为 无效固件包。
可能原因(基于上下文信息)
1. 签名算法不匹配
- 从社区答疑纪要可知:V2 支持 PKCS 和 PSS 填充算法签名,而 V3 只支持 PSS 填充算法签名。若制作的包使用了错误的算法(如 PKCS1),验证时就会出现数据解析错误。
- 另一位用户反映的类似问题日志中曾出现
add pss root certificate failed,提示根证书或签名算法相关问题。
2. HPM 配置文件包含多余部件
- 您提供的
hpm_devkit.config中包含了两个upload_action:CONFIG(部件 0x80000001)EEPROM(部件 0x80000000)
- 但 CPLD 固件包应只包含 CPLD 固件映像,额外的部件(如配置备份、EEPROM 数据)可能导致包结构不符合预期,解析时触发内部错误。
3. 打包/签名步骤不完整或不正确
- 社区经验指出:“报错信息显示 CPLD 包未被识别为社区包,猜测是这一步没对”(指签名步骤)。
- 制作 CPLD HPM 包的工具(如
filesizecheck、crypto_tool、hpmimage)由bingo安装,而您手动使用hpm_signer签名,可能因参数或工具链版本差异导致签名结果缺少必要信息(如摘要算法 OID 等),从而MdInit获取到nil。
4. 包缺少社区标记
- 有社区用户反馈,CPLD 包若未正确标记为社区包(如签名头信息缺失),系统会直接拒绝。
解决方案建议
1. 确认系统版本对应的签名算法
- 若当前系统版本为 V3,必须使用 PSS 填充算法签名;V2 可兼容 PKCS 和 PSS。
- 检查运行时日志
/var/log/app.log,确认是否有提示具体签名算法错误。
2. 简化 hpm_devkit.config
- 只保留 CPLD 固件的部件(即
upload_components = 0x80000000),移除 CONFIG、EEPROM 等额外部件。 - 参考已确认成功的 CPLD 包示例(如
KP_BCU_0x10_OPENUBMC.hpm)的配置文件结构。
3. 使用 bingo 工具链制作包
- 社区推荐使用
bingo集成工具(filesizecheck、crypto_tool、hpmimage等)来完成打包和签名,避免手动脚本遗漏关键步骤。 - 若仍需手动签名,请确保:
- 签名证书与当前系统信任的根证书一致(由
bingo生成的伙伴签名环境)。 image.filelist.cms中包含完整的摘要算法标识和签名值。
- 签名证书与当前系统信任的根证书一致(由
4. 对照社区已有讨论
- 您引用的帖子 CPLD场外打包疑问 中,回复者指明了 签名步骤的关键截图,建议核对是否完全按照该流程操作(尤其是签名标志位和证书配置)。
总结
当前失败根因是 固件包的数字签名部分不被系统正常解析,直接表现为 MdInit 参数缺失。常见原因包括签名算法不匹配、配置文件包含无关部件、或签名工具使用不当。请优先验证系统版本,采用标准的 PSS 签名,并确保 HPM 包内仅含 CPLD 固件部件。若仍无法解决,可通过查看完整日志(/var/log/app.log)定位更详细的错误码,并参考社区提供的 CPLD 包制作文档。