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

Yocto的bb文件中如何将tar.gz源码解压到指定目录

Yocto中将tar.gz格式源码解压到指定目录的配置方案

之前的写法不生效的核心原因是:subpath参数的作用是从压缩包内提取指定子路径的文件,并非指定解压输出路径;而针对归档类源码的destsuffix参数需要填写相对于${WORKDIR}的相对路径,直接写${S}开头的绝对路径会触发路径拼接错误。

方法1:使用原生destsuffix+striplevel参数(推荐)

搭配两个参数即可实现和git源destsuffix完全一致的效果:

# 若S为默认的${WORKDIR}/${BP},destsuffix写${BP}/drivers/cryptodev即可对应${S}/drivers/cryptodev
SRC_URI += "http://nwl.cc/pub/cryptodev-linux/cryptodev-linux-1.9.tar.gz;name=cryptodev;destsuffix=${BP}/drivers/cryptodev;striplevel=1"

参数说明:

  • destsuffix=${BP}/drivers/cryptodev:指定解压根目录为${WORKDIR}/${BP}/drivers/cryptodev,也就是你需要的${S}/drivers/cryptodev路径,如果你自定义过S的值,把前缀替换为S相对于WORKDIR的路径即可
  • striplevel=1:跳过tar包自带的第一层顶层目录(即压缩包内的cryptodev-linux-1.9目录),直接把目录下的源码文件解压到目标路径,和git源拉取代码直接存放的效果一致

方法2:do_unpack追加移动逻辑(兼容性更强)

如果路径规则比较复杂,也可以不修改SRC_URI参数,直接在解压任务后追加移动逻辑:

SRC_URI += "http://nwl.cc/pub/cryptodev-linux/cryptodev-linux-1.9.tar.gz;name=cryptodev"

do_unpack:append() {
    # 提前创建目标目录
    install -d ${S}/drivers/cryptodev
    # 将默认解压到WORKDIR下的源码移动到指定路径
    cp -rf ${WORKDIR}/cryptodev-linux-1.9/* ${S}/drivers/cryptodev/
}

内容的提问来源于stack exchange,提问作者Embedded Software Engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:15:05