Yocto:覆盖现有配方中的功能

问题描述 投票:0回答:1

我是 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文件中的函数?

yocto bitbake
1个回答
4
投票

您可以以与附加到配方任务相同的方式附加到函数。

这是一个例子:

  • 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,...),原因如下:

  • 随着时间的推移,你会忘记你改变了什么。
  • 没有人可以复制您的精确图像,除非您将修改后的图层发送给他们
  • 如果您将图层升级到另一个版本,您需要手动重做该图层中的所有修改,希望您没有忘记它们
  • 这不是 Yocto 开发团队的工作方式
  • 在自定义图层中创建
    bbappend
    可以清楚地了解您所做的更改。此外,更新更改或将图层发送给某人也很容易,某人只需自行克隆第三方,然后使用您的图层即可。

对我来说最重要的一点是尊重那些开发该层并将其公开给所有人的人。在克隆时保持干净是 Yocto 开发的最佳实践之一。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.