【发布时间】:2021-02-18 09:48:43
【问题描述】:
我正在使用 Yocto 构建图像,并且需要修补上游树中的 BitBake 类。我不想修改上游源,而是希望将修改添加到本地层。
对于 BitBake recipe,我会使用 .bbappend 文件。 类应该使用什么?
【问题讨论】:
我正在使用 Yocto 构建图像,并且需要修补上游树中的 BitBake 类。我不想修改上游源,而是希望将修改添加到本地层。
对于 BitBake recipe,我会使用 .bbappend 文件。 类应该使用什么?
【问题讨论】:
在您的元层中创建classes 文件夹并创建一个新类,例如myclass.bbclass。使用 inherit original-bitbake-CLASS 继承原始类并添加您需要的任何功能。
然后使用新的 bbclass 代替原来的。
【讨论】:
@lukaszgard 方法有效,除了一个小问题。 BBFILE_PRIORITY 不为 bbclass 和 conf 文件提供覆盖功能,它仅适用于配方 (.bb)。这是基于 Yocto 手册的一部分,Prioritizing Your Layer 上面写着
注意:在具有较高优先级的层中,具有较低版本号 PV 的配方可能优先。 此外,层优先级目前不影响 .conf 或 .bbclass 文件的优先顺序。未来版本的 BitBake 可能会解决这个问题。
我发现一个可行的方法是创建一个 bblayer,创建并应用所需 bbclass 的更改,然后在 /build/conf/bblayers.conf 中,将创建的 bblayer 放在您正在尝试覆盖。
这是基于Yocto manual 的另一部分
注意:在构建过程中,OpenEmbedded 构建系统按从列表顶部到底部的顺序查看层。
一个例子:
BBLAYERS ?= " \
${TOPDIR}/../layers/<layer with new bbclass> \
${TOPDIR}/../layers/<layer with old bbclass> \
"
【讨论】:
通常对于 .bbclass 文件,缺少与附加配方 (.bbappends) 类似的方法。 @Oleksandr-Kravchuk 提出的解决方案很好,但有一些限制。当您必须修改某些功能或进行更复杂的更改时,我宁愿将这个类文件复制到我的元数据层并在那里进行调整。最后 bitbake 基于层中的配置(conf/layer.conf 文件) - BBFILE_PRIORITY 将决定采用来自具有更高优先级的层的类文件 - 无需接触配方.
【讨论】: