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

Yocto中如何在一个recipe内访问另一recipe生成的自定义文件

Yocto跨配方共享生成文件实现方案

核心逻辑

Yocto中每个配方的工作目录(包括${S}、${B}等)是相互隔离的,依赖方无法直接访问被依赖方的私有工作目录。必须将需要共享的文件通过被依赖方的do_install安装到自身的${D}目录,再通过BitBake的staging机制导出到全局sysroot目录,依赖方才可通过STAGING_*系列变量访问。

第一步:修改a.bb配方

你需要先调整a.bb的逻辑,将生成的sample.txt导出到staging目录:

do_install () {
    # 生成sample.txt
    echo "sample" > ${S}/sample.txt
    # 创建安装目录
    install -d ${D}${datadir}/a-shared/
    # 将文件安装到a的${D}目录下的标准共享路径
    install -m 0644 ${S}/sample.txt ${D}${datadir}/a-shared/
}

# 声明该文件属于a的输出包
FILES:${PN} += "${datadir}/a-shared/sample.txt"
# 声明该路径需要加入sysroot,供其他依赖a的配方访问
SYSROOT_DIRS += "${datadir}/a-shared"

第二步:修改b.bb配方

你已经配置了DEPENDS = "a"保证执行顺序,直接通过STAGING_DATADIR变量访问staging目录中的文件即可:

do_install () {
    # 读取sample.txt示例
    cat ${STAGING_DATADIR}/a-shared/sample.txt
    # 也可以将文件拷贝到b自身的安装目录
    install -d ${D}${datadir}/b/
    install -m 0644 ${STAGING_DATADIR}/a-shared/sample.txt ${D}${datadir}/b/
}

补充说明

  • 常用STAGING_*变量说明:
    • ${STAGING_DIR_TARGET}:目标架构的sysroot根目录,自定义非标准路径时可以用该变量拼接,比如你将文件放到${D}/opt/myfiles/,就可以通过${STAGING_DIR_TARGET}/opt/myfiles/sample.txt访问
    • ${STAGING_INCDIR}:头文件staging路径,对应sysroot下的/usr/include,一般用于共享头文件
    • ${STAGING_LIBDIR}:库文件staging路径,对应sysroot下的/usr/lib,一般用于共享动态/静态库
  • 如果你只需要临时共享文件不需要打包到最终镜像,也可以把文件安装到${D}${sysconfdir}/staging-aux/之类的路径,只要对应加到SYSROOT_DIRS即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:36:02