You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无需下载文件,如何获取Yocto镜像构建所需的全部SRC_URI?

当然有更省心的办法啦!不用实际下载文件,就能获取构建core-image-minimal时bitbake需要抓取的所有SRC_URI,我给你整理了几个实用的技巧:

方法1:用bitbake fetch任务的--print-uris参数

这个方法是最直接的,针对单个recipe,你可以直接打印它所有要获取的URI,完全不会触发下载:

bitbake <recipe-name> -c fetch --print-uris

如果要覆盖整个镜像的所有依赖,步骤稍微多一点:

  1. 先生成镜像的所有依赖recipe列表:
bitbake core-image-minimal -g

执行后会在当前目录生成pn-buildlist文件,里面就是构建镜像需要的所有recipe名称。
2. 遍历这个列表,批量打印每个recipe的URI:

for pn in $(cat pn-buildlist); do
    echo "=== $pn ==="
    bitbake $pn -c fetch --print-uris
done

这样就能逐个输出每个包对应的所有下载URL,全程不会下载任何文件。

方法2:导出recipe环境提取SRC_URI

如果你只需要原始的SRC_URI配置(可能包含变量引用,比如${PV}),可以导出每个recipe的环境变量然后提取:

# 先生成依赖列表(和方法1步骤1一样)
bitbake core-image-minimal -g
# 遍历提取SRC_URI
for pn in $(cat pn-buildlist); do
    echo "=== $pn ==="
    bitbake $pn -e | grep -E "^SRC_URI=" | sed 's/SRC_URI="//;s/"$//'
done

这个方法输出的是recipe里定义的原始SRC_URI内容,适合你需要查看变量形式的场景。

方法3:用oe-pkgdata-util关联包名与URI

如果已经完成过一次配置解析(哪怕没构建完),可以用oe-pkgdata-util工具把包名和对应的recipe关联起来,输出更清晰:

for pkg in $(oe-pkgdata-util list-pkgs -p core-image-minimal); do
    pn=$(oe-pkgdata-util lookup-recipe $pkg)
    echo "=== $pn (对应包: $pkg) ==="
    bitbake $pn -c fetch --print-uris
done

这个方法能明确看到每个包对应的recipe及其下载URL,排查起来更方便。

需要注意的是:如果有些recipe的SRC_URI是通过Python动态生成的,这些方法需要确保bitbake能正常解析这些动态内容,但绝大多数常规场景下都能顺利工作。

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

火山引擎 最新活动