使用其他recipes生成的文件,using files generated by other recipes
原本期望在recipes之间共享文件会有类似namespace的实现方式,即,可以在recipes-bb的build脚本中,任意通过recipes-aa namespace下的环境变量来轻松访问recipes-aa下生成的编译文件。如
::recipes-aa:${WORKDIR}::recipes-aa:${D}等。
一番查阅之后,没有找到类似的机制,改为使用staging.bbclass提供的do_populate_sysroot和do_prepare_recipe_sysroot来实现
1. 需求
期望能在recipes-bb编译过程中使用recipes-aa生成的文件
2. 实现方式
使用yocto提供的staging.bbclass提供的标准任务来完成该需求。
文档描述:https://www.yoctoproject.org/docs/2.3.1/ref-manual/ref-manual.html#ref-classes-staging
假设recipes-bb依赖recipes-aa的编译输出文件。
基本原理:
- Stage 0:在recipes-bb文件中添加对recipes-aa的依赖
# recipes-bb.bb
DEPENDS = "recipes-aa"
- Stage one: build recipes-aa时,其
do_populate_sysroot任务负责从recipes-aa$D}目录的sysroot-destdir的文件中挑出一部分放到,recipes-aa$WORKDIR}的sysroot-destdir中 - Stage two: build recipes-bb时,其
do_prepare_recipe_sysroot任务负责将Stage one中准备好的文件,拷贝到recipes-bb的${WORKDIR}的recipe-sysroot中。至此,在编译recipes-bb时,则可以通过访问当前WORKDIR的recipe-sysroot内容,来获取recipes-aa的编译输出文件
其他说明
- Stage one拷贝的对象由
SYSROOT_DIRS,SYSROOT_DIRS_NATIVE,SYSROOT_DIRS_BLACKLIST变量来配置 - 另外可以通过
SYSROOT_PREPROCESS_FUNCS变量来配置额外的拷贝函数,而且实测该方式比较有效也可控
eg:
SYSROOT_PREPROCESS_FUNCS += "additional_populate_sysroot"
additional_populate_sysroot() {
sysroot_stage_dir ${D}/lib ${SYSROOT_DESTDIR}/lib
}
本文档介绍了如何在Yocto项目中,利用staging.bbclass提供的do_populate_sysroot和do_prepare_recipe_sysroot任务,实现不同recipes间共享文件的需求。当recipes-bb需要使用recipes-aa生成的编译文件时,通过设置DEPENDS并配置SYSROOT_DIRS等相关变量,可以将recipes-aa的输出复制到recipes-bb的sysroot中,从而在编译过程中访问到所需文件。
6519

被折叠的 条评论
为什么被折叠?



