无法通过BitBake变量替换更新sw-description文件版本号
解决BitBake变量无法替换sw-description占位符的问题
swupdate 2018.11版本不会自动处理@@VARIABLE@@格式的变量占位符,需手动在配方中添加替换逻辑,以下是两种可行方案:
方案一:用sed批量替换占位符
找到swupdate的配方文件(如swupdate_2018.11.bb),或新建对应的.bbappend文件,添加预处理步骤:
do_compile_prepend() { # 替换sw-description里的所有变量占位符 sed -i \ "s|@@DISTRO_VERSION@@|${DISTRO_VERSION}|g" \ "s|@@BB_VERSION@@|${BB_VERSION}|g" \ # 新增组件版本变量的替换规则,比如FPGA版本 "s|@@FPGA_VERSION@@|${PV_fpga}|g" \ ${WORKDIR}/sw-description }
- 路径注意:如果
sw-description存放在源码目录(${S}),则将${WORKDIR}替换为${S}; - 组件版本引用:若要拉取其他配方的版本号(如fpga.bb的PV),需在对应组件的配方中添加
EXPORT_VARIABLES += "PV",再在swupdate配方中用${PV_<组件名>}引用。
方案二:直接生成sw-description文件(更稳妥)
跳过占位符,直接用BitBake变量生成完整配置文件,避免替换失败问题:
do_compile_prepend() { cat > ${WORKDIR}/sw-description << EOF software = { version = "${DISTRO_VERSION}"; description = "Firmware update for Titan"; imx8mm-lpddr4-cdl = { p1: { files: ( { name = "fpga"; version = "${BB_VERSION}"; install-if-different = true; # 保留原文件中的其他配置项 }, # 其他组件的配置内容 ) } } } EOF }
验证方法
构建完成后,可查看${WORKDIR}中的sw-description,或解压生成的.swu镜像,检查配置文件是否已替换为实际版本号。
内容的提问来源于stack exchange,提问作者22332112
相关产品推荐
相关产品推荐

