Bitbake中‘addtask deploy after do_install’在镜像配方中失效问题咨询
我有一些配方使用addtask deploy after do_install在安装步骤后添加deploy任务,原本运行正常,但升级到Poky Kirkstone版本后行为出现变化。观察到的现象:
- 单独执行
bitbake recipe-name时,do_install和do_deploy任务都会执行; - 通过镜像配方构建该配方时,仅
do_install任务被执行,do_deploy任务未执行; - 提前执行
bitbake -c clean recipe-name操作也无法解决此问题; - 查看配方日志目录的符号链接发现,镜像构建时
run.do_deploy的链接未更新,单独构建时会更新,说明镜像构建过程中该任务确实未执行。
Kirkstone版本的任务依赖逻辑变更
Poky Kirkstone对任务执行的触发规则做了调整,尤其是do_deploy这类产出部署产物的任务。旧版本中,镜像构建可能会默认触发依赖配方的全流程任务,但Kirkstone中,镜像构建的核心需求仅为获取配方do_install阶段安装到sysroot的内容,do_deploy属于额外的产物输出任务,不在镜像构建的默认依赖链中。镜像配方未显式依赖
do_deploy任务
镜像配方通过IMAGE_INSTALL包含目标配方时,只会触发该配方的do_install任务(因为镜像只需要打包安装后的文件)。如果需要在镜像构建时同步执行do_deploy,需要显式声明依赖关系:
在目标配方中添加:IMAGE_DEPENDS_${PN} += "${PN}:do_deploy"或者在镜像配方中直接指定依赖该任务。
do_deploy任务的属性被修改
检查目标配方或全局配置中是否存在do_deploy[noexec] = "1"这类禁用任务的配置,或者Kirkstone的默认配置修改了任务的执行属性。可以通过以下命令查看任务属性:bitbake recipe-name -e | grep -A 5 -B 5 "do_deploy"确认是否存在
noexec、depends等属性的异常设置。do_deploy的触发条件不满足
部分配方中do_deploy会依赖特定变量(如DEPLOY_DIR、DEPLOY_TARGETS)的设置,Kirkstone可能修改了这些变量的默认值,或者镜像构建环境下这些变量未被正确初始化。检查配方中do_deploy的条件判断逻辑,比如:do_deploy() { if [ -z "${DEPLOY_TARGETS}" ]; then bbwarn "No deploy targets set, skipping do_deploy" return 0 fi # 部署逻辑 }确认镜像构建环境下相关变量是否符合触发要求。
deploy.bbclass的行为变更
Kirkstone可能调整了deploy.bbclass的默认逻辑,比如原本自动关联的任务触发规则被修改。检查目标配方是否正确继承了deploy.bbclass,并对比旧版本中该类的逻辑差异,确认是否需要显式启用do_deploy的触发规则。
内容的提问来源于stack exchange,提问作者Waldorf

