我正在尝试用 .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 有两个问题:
- 我希望文件shouldContain_meta-newLayer 包含
meta-newLayer
, 但它包含meta-origLayer
.
我主要想了解为什么${THISDIR}
放在do_unpack_append()
中时表现不同从它用于前置FILESEXTRAPATHS
开始 - 运行 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/