制作的CPLD更新包网页更新失败

答案内容由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 集成工具(filesizecheckcrypto_toolhpmimage 等)来完成打包和签名,避免手动脚本遗漏关键步骤。
  • 若仍需手动签名,请确保:
    • 签名证书与当前系统信任的根证书一致(由 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 包的工具(如 filesizecheckcrypto_toolhpmimage)由 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 集成工具(filesizecheckcrypto_toolhpmimage 等)来完成打包和签名,避免手动脚本遗漏关键步骤。
  • 若仍需手动签名,请确保:
    • 签名证书与当前系统信任的根证书一致(由 bingo 生成的伙伴签名环境)。
    • image.filelist.cms 中包含完整的摘要算法标识和签名值。

4. 对照社区已有讨论

  • 您引用的帖子 CPLD场外打包疑问 中,回复者指明了 签名步骤的关键截图,建议核对是否完全按照该流程操作(尤其是签名标志位和证书配置)。

总结

当前失败根因是 固件包的数字签名部分不被系统正常解析,直接表现为 MdInit 参数缺失。常见原因包括签名算法不匹配、配置文件包含无关部件、或签名工具使用不当。请优先验证系统版本,采用标准的 PSS 签名,并确保 HPM 包内仅含 CPLD 固件部件。若仍无法解决,可通过查看完整日志(/var/log/app.log)定位更详细的错误码,并参考社区提供的 CPLD 包制作文档。