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
相关产品推荐
相关产品推荐

