yocto - 如何在 .bbappend 文件中的 do_unpack_append 中获取 ${THISDIR}

标签 yocto bitbake

我正在尝试用 .bbappend 文件替换另一层的文件。我的目标是在解压阶段用定制的配置文件覆盖特定的配置文件。

在我的 .bbappend 中,我试图附加 do_unpack将文件从与 .bbappend 文件相同的目录复制到工作目录 ${WORKDIR}问题是:在里面时 do_unpack_append , ${THISDIR}正在返回原始 .bb 配方的目录,而不是 .bbappend 的目录

这是一个例子:

  • 原始配方位于:meta-origLayer/recipe.bb
  • 我的 *.bbappend 位于:meta-newLayer/recipe.bbappend

recipe.bbappend:

`FILESEXTRAPATHS_prepend := "${THISDIR}:"`
do_unpack_append(){
    bb.build.exec_func('replace_file', d)
}

replace_file(){
    cp -f ${THISDIR}/fileToBeReplaced ${WORKDIR}/fileToBeReplaced
    echo ${THISDIR} > ${WORKDIR}/shouldContain_meta-newLayer
}

recipe.bbappend 有两个问题:

  1. 我希望文件shouldContain_meta-newLayer 包含meta-newLayer , 但它包含 meta-origLayer .
    我主要想了解为什么 ${THISDIR}放在 do_unpack_append() 中时表现不同从它用于前置 FILESEXTRAPATHS 开始
  2. 运行 bitbake 时,配方失败,产生以下错误:

cp: cannot stat '/fileToBeReplaced': No such file or directory

  • 发生此错误是因为 fileToBeReplaced 位于 meta-origLayer 的子目录中(即 meta-origLayer/machine1/fileToBeReplaced)并且 .bbappend 期望在 /fileToBeReplaced
  • 中找到该文件

我的问题。 . .

我假设 ${THISDIR}将在同一个 .bbappend 中表现一致,但它似乎没有。从 do_unpack_append() 中引用 meta-newLayer/fileToBeReplaced 的最佳方式是什么? ?

最佳答案

这个 *.bbappend 在解包任务期间正确地覆盖了工作目录中的 fileToBeReplaced:

FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI_append += " file://fileToBeReplaced "
SAVED_DIR := "${THISDIR}"

do_unpack_append(){
    bb.build.exec_func('replace_file', d)
}

replace_file(){
    cp -f ${SAVED_DIR}/fileToBeReplaced ${WORKDIR}/fileToBeReplaced
}

感谢bbappend解析和执行之间的解释johannes-schaub-ltb

关于yocto - 如何在 .bbappend 文件中的 do_unpack_append 中获取 ${THISDIR},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58610052/

相关文章:

yocto - 需要使用 bitbake INCOMPATIBLE_LICENSE 标志的帮助

linux-kernel - 使用自定义 YOCTO 层中的配置片段添加内核配置选项

yocto - 当没有许可证文件时如何处理LICENSE字段?

ffmpeg - 硬件加速 RPI4 FFmpeg

yocto - 添加增强配方的正确层在哪里?

ubuntu - 使用 32G RAM 构建 Yocto 时内存不足

Yocto - glib-gettextize : not found

linux - Yocto如何生成这些/etc/limits文件

gcc - Bitbake 在 gcc-runtime-5.2.0-r0 中的 do_compile 失败

linux - Yocto 为 preempt_rt 构建