Yocto构建签名SWU文件:sw-description缺失SHA256哈希的问题求助
解决Yocto构建SWU文件时sw-description缺失SHA256哈希值的问题
问题背景
使用Yocto/Bitbake为imx8mm-var-dart开发板构建签名SWU文件时,已成功生成签名后的SWU,但sw-description文件未自动添加镜像文件的SHA256哈希值,导致执行swupdate安装时触发哈希缺失错误。
现有环境结构
构建目录
build-dir +conf bblayers.conf local.conf
层目录
meta-variscite-fslc +conf +dynamic-layers +swupdate +swupdate +var-image-swu +imx8mm-var-dart sw-description update.sh swupdate_%d.bbappend var-image-swu.bb var-image-swupdate.bb meta-mylayer +conf layer.conf +recipes-blahblah +wic my-wks.in
当前配置与错误
已完成配置
- 在
build-dir/conf/local.conf指定自定义分区配置:WKS_FILE = "my-wks.in" - 启用SWU签名并指定打包镜像:
SWUPDATE_SIGNING = "RSA" SWUPDATE_PRIVATE_KEY = "/tmp/rsakey" SWUPDATE_IMAGES = "var-image-swupdate update.sh" - 生成RSA密钥对:
openssl genrsa -out /tmp/rsakey openssl rsa -in /tmp/rsakey -out /tmp/rsakey.pub -outform PEM -pubout
安装错误信息
执行SWU安装命令:
swupdate -i /var-image-swu-imx8mm-var-dart.swu --hwrevision "imx8mm-var-dart:1.0" --key /rsakey.pub
触发以下错误:
ERROR] : SWUPDATE failed [0] ERROR core/parser.c : check_missing_hash : 76 : Hash not set for var-image-swupdate-imx8mm-var-dart.tar.gz Type archive [ERROR] : SWUPDATE failed [0] ERROR core/swupdate.c : install_from_file : 335 : failed to parse sw-description!
解决方案:通过meta-mylayer的bbappend自动添加哈希
无需修改原meta-variscite-fslc层文件,仅需在自己的meta-mylayer中完成以下操作:
步骤1:创建sw-description模板文件
在meta-mylayer中创建路径dynamic-layers/swupdate/var-image-swu/imx8mm-var-dart/,并新建sw-description.template文件,参考原sw-description结构添加哈希变量占位:
software = { version = "1.0"; hardware-compatibility: [ "imx8mm-var-dart:1.0" ]; files: ( { filename: "${VAR_IMAGE_SWUPDATE_BASENAME}.tar.gz"; sha256: "${VAR_IMAGE_SWUPDATE_SHA256}"; type: "archive"; device: "/dev/mmcblk2p2"; }, { filename: "update.sh"; sha256: "${UPDATE_SH_SHA256}"; type: "script"; } ); }
提示:根据实际原sw-description的内容调整结构,确保变量占位符与文件名、字段匹配。
步骤2:创建var-image-swu.bbappend文件
在meta-mylayer的recipes-core/images目录(不存在则新建)下创建var-image-swu.bbappend,添加以下内容:
# 获取var-image-swupdate镜像的基础名称与SHA256值 VAR_IMAGE_SWUPDATE_BASENAME = "${@d.getVar('BPN', False, True).replace('var-image-swu', 'var-image-swupdate')}-${MACHINE}" VAR_IMAGE_SWUPDATE_SHA256 = "${@bb.fetch2.get_sha256(os.path.join(d.getVar('DEPLOY_DIR_IMAGE'), VAR_IMAGE_SWUPDATE_BASENAME + '.tar.gz'), d)}" # 计算update.sh的SHA256值 UPDATE_SH_SHA256 = "${@sha256sum(os.path.join(d.getVar('WORKDIR'), 'update.sh'))}" # 替换模板生成带哈希的sw-description do_configure_append() { cp ${THISDIR}/dynamic-layers/swupdate/var-image-swu/imx8mm-var-dart/sw-description.template ${WORKDIR}/sw-description.template bb.data.expandfile("${WORKDIR}/sw-description.template", "${WORKDIR}/sw-description", d) }
步骤3:重新构建SWU文件
执行构建命令重新生成SWU:
bitbake var-image-swu
生成的SWU文件中,sw-description将自动包含各文件的SHA256哈希值,此时重新执行swupdate安装命令即可正常运行。
内容的提问来源于stack exchange,提问作者rosewater
相关产品推荐
相关产品推荐

