我是 Yocto 的新手。我正在尝试修改配方中的现有函数。我对如何使用 bbappend 文件覆盖该函数有点困惑。
我在现有的食谱中有以下代码:
fn_functionA () {
pushd ${WORKDIR}/folder1
git submodule update --init --recursive submodule1
popd
}
do_unpack[postfuncs] += "fn_functionA"
我需要将此函数编辑为以下内容:
fn_functionA () {
pushd ${WORKDIR}/folder1
git submodule update --init --recursive submodule1
popd
pushd ${WORKDIR}/folder1/submodule1
git fetch "ssh link to project" refs/changes/99/68099/1 && git checkout FETCH_HEAD
popd
}
do_unpack[postfuncs] += "fn_functionA"
我是否需要将编辑后的函数的全部内容复制/粘贴到 bbappend 文件中,或者执行 addtask?详细的答案将不胜感激。
另外,n00b问题:为什么我们不能编辑bb文件并直接修改函数而不是覆盖bbappend文件中的函数?
您可以以与附加到配方任务相同的方式附加到函数。
这是一个例子:
meta-example/recipes-example/example/example_0.1.bb
LICENSE = "CLOSED"
func_example() {
bbwarn "From func_example"
}
do_example() {
bbwarn "From do_example"
}
do_example[postfuncs] += "func_example"
addtask do_example
现在,当您运行:
bitbake example -c example
时,您应该看到:
...
WARNING: example-0.1-r0 do_example: From do_example
WARNING: example-0.1-r0 do_example: From func_example
...
现在,让我们创建一个
bbappend
文件:
meta-example-2/recipes-example/example/example_%.bbappend
func_example:append() {
bbwarn "From func_example_append"
}
现在,当您再次运行
bitbake example -c example
时,您应该看到:
...
WARNING: example-0.1-r0 do_example: From do_example
WARNING: example-0.1-r0 do_example: From func_example
WARNING: example-0.1-r0 do_example: From func_example_append
...
如果你想重写该函数,只需重新定义它,不要使用
append
或 prepend
,在我的示例中它将是:
func_example() {
bbwarn "From func_example_append"
}
输出将是:
...
WARNING: example-0.1-r0 do_example: From do_example
WARNING: example-0.1-r0 do_example: From func_example_append
...
bbappend
?不建议直接在第三方 Yocto 层中更改/编辑某些内容(示例:meta-raspberrypi、meta-qt5,...),原因如下:
bbappend
可以清楚地了解您所做的更改。此外,更新更改或将图层发送给某人也很容易,某人只需自行克隆第三方,然后使用您的图层即可。对我来说最重要的一点是尊重那些开发该层并将其公开给所有人的人。在克隆时保持干净是 Yocto 开发的最佳实践之一。