You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让BitBake在清理/重建Recipe B时自动清理依赖的Recipe A?

问题

我们有一个依赖于Recipe B的Recipe A。当执行bitbake -c cleanall B然后bitbake core-image-minimal重新构建Recipe B时,Yocto会先正确构建B,之后尝试构建A,但Recipe A在未先清理的情况下执行configure、compile等步骤会出错。有没有办法让BitBake在清理(或重建)Recipe B时自动清理Recipe A?

补充说明

实际场景中有多个Recipe构建失败,比如fsbl的错误日志如下:

| ERROR: Execution of '[...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/temp/run.do_configure.581607' failed with exit code 1:
| MISC_ARG is  -yamlconf [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/fsbl.yaml -lib libmetal
| APP_ARG is  -app "Zynq MP FSBL"
| Using xsct from: /opt/Xilinx/Vitis/2020.2/bin/xsct
| cmd is: xsct -sdx -nodisp [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/app.tcl -ws [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/build -pname fsbl -rp [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/git -processor psu_cortexa53_0 -hdf [...]/yocto/build/tmp/deploy/images/zcu216-zynqmp/Xilinx-zcu216-zynqmp.xsa -arch 64  -app "Zynq MP FSBL"  -yamlconf [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/fsbl.yaml -lib libmetal
| INFO: [Hsi 55-2053] elapsed time for repository (/opt/Xilinx/Vitis/2020.2/data/embeddedsw) loading 0 seconds
| INFO: Update hw fsbl_plat project
| Loading the sw platform from [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/build/fsbl_plat/platform.spr
| Reading the platform  : "fsbl_plat"
| Opening the hardware design, this may take few seconds.
| Failed to generate bsp for application zynqmp_fsbl
|     while executing
| "builtin_platform -addbootdomains "
|     (procedure "platform" line 393)
|     invoked from within
| "platform create -name $params(hwpname) -hw $params(hdf) -out $params(ws)"
|     invoked from within
| "if { $params(ws) ne "" } {
|   #Local Work Space available
|   if { $params(pname) ne "" } {
|       # hwpname/bspname is empty then default it to pname+_hwproj/b[...]"
|     (file "[...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/app.tcl" line 139)
| WARNING: [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/temp/run.do_configure.581607:1 exit 1 from 'eval xsct -sdx -nodisp [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/app.tcl -ws [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/build -pname fsbl -rp [...]/yocto/build/tmp/work/zcu216_zynqmp-poky-linux/fsbl/2020.2+gitAUTOINC+08b9f4304d-r0/git -processor psu_cortexa53_0 -hdf [...]/yocto/build/tmp/deploy/images/zcu216-zynqmp/Xilinx-zcu216-zynqmp.xsa -arch 64 ${APP_ARG} ${MISC_ARG}'

此外还有其他Recipe构建失败,部分错误信息不同。基于make的Recipe失败时,错误提示类似cannot find some_directory.new,后续会补充更多细节,只是这些错误的复现性较差。

解决方案

针对BitBake清理依赖Recipe时自动清理下游Recipe的需求,有以下几种可行方法:

1. 手动清理下游Recipe

如果依赖关系明确,直接手动清理所有依赖B的Recipe:

bitbake -c cleanall A
bitbake core-image-minimal

如果有多个依赖Recipe,可以批量处理:

bitbake -c cleanall A C D
bitbake core-image-minimal

2. 使用BitBake依赖追踪自动清理

BitBake提供依赖链分析工具,先找出所有依赖B的Recipe:

bitbake -g core-image-minimal && cat pn-depends.dot | grep -E "-> \"B\"" | cut -d'"' -f2 > depends-on-B.txt

然后批量清理这些Recipe:

bitbake -c cleanall $(cat depends-on-B.txt)
bitbake core-image-minimal

执行完毕后可删除临时生成的pn-depends.dot和depends-on-B.txt文件。

3. 修改Recipe依赖关系(长期维护方案)

如果需要长期解决该问题,在Recipe A的配方文件中添加关联清理任务:

# 在Recipe A的.bb文件中添加
do_cleanall[depends] += "B:do_cleanall"

这样执行bitbake -c cleanall B时,会自动触发A的cleanall任务。若有多个依赖Recipe,可批量添加:

do_cleanall[depends] += "B:do_cleanall C:do_cleanall"

4. 自定义Shell脚本自动化流程

编写Shell脚本自动完成清理依赖Recipe和构建的全流程:

#!/bin/bash
# 清理Recipe B
bitbake -c cleanall B
# 获取所有依赖B的Recipe
bitbake -g core-image-minimal && cat pn-depends.dot | grep -E "-> \"B\"" | cut -d'"' -f2 > depends-on-B.txt
# 清理依赖Recipe
bitbake -c cleanall $(cat depends-on-B.txt)
# 启动构建
bitbake core-image-minimal
# 清理临时文件
rm pn-depends.dot depends-on-B.txt

保存为rebuild-with-deps.sh,赋予执行权限后运行:

chmod +x rebuild-with-deps.sh
./rebuild-with-deps.sh

内容的提问来源于stack exchange,提问作者Schottky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:32:02