Yocto 如何扩展BitBake类

Yocto 如何扩展BitBake类,yocto,bitbake,Yocto,Bitbake,我正在用Yocto构建一个映像,需要在上游树中修补一个BitBake类。我不想修改上游源,而是希望将修改添加到本地层 对于BitBake配方,我将使用.bbappend文件。类应使用什么?在元层中创建类文件夹,并创建一个新类,例如myclass.bbclass。使用继承原始bitbake类继承原始类,并添加所需的任何功能 然后使用新的bbclass而不是原来的bbclass。一般来说,对于.bbclass文件,缺少类似的方法来添加配方(.bbappends)。@Oleksandr Kravchu

我正在用Yocto构建一个映像,需要在上游树中修补一个BitBake类。我不想修改上游源,而是希望将修改添加到本地层


对于BitBake配方,我将使用
.bbappend
文件。类应使用什么?

在元层中创建
文件夹,并创建一个新类,例如
myclass.bbclass
。使用
继承原始bitbake类
继承原始类,并添加所需的任何功能


然后使用新的bbclass而不是原来的bbclass。

一般来说,对于.bbclass文件,缺少类似的方法来添加配方(.bbappends)。@Oleksandr Kravchuk提出的解决方案很好,但有一些局限性。当您必须修改某些函数或进行更复杂的更改时,我更愿意将该类文件复制到元数据层并在那里进行修改。最后,基于层中配置的bitbake(conf/layer.conf文件)-将决定采用该类文件,该类文件来自优先级较高的层-,而不涉及配方

@lukaszgard方法有效,除了一个小问题BBFILE_PRIORITY不为bbclass和conf文件提供覆盖功能,它仅适用于配方(.bb)。这是基于Yocto手册的一节,其中说

注:在具有较高优先级的层中,版本号PV较低的配方可能优先。 此外,层优先级当前不会影响.conf或.bbclass文件的优先顺序。BitBake的未来版本可能会解决此问题

我发现一种有效的方法是创建一个bblayer,创建并应用所需bbclass的更改,然后在/build/conf/bblayers.conf中,将创建的bblayer放在您试图覆盖的层之上

这是基于其中的另一部分,即

注意:在构建过程中,OpenEmbedded构建系统按照从列表顶部到底部的顺序查看各个层

例如:

BBLAYERS ?= " \
  ${TOPDIR}/../layers/<layer with new bbclass> \
  ${TOPDIR}/../layers/<layer with old bbclass> \
"
BBLAYERS?=”\
${TOPDIR}/。/层/\
${TOPDIR}/。/层/\
"