请求澄清Yocto继承

pax*_*blo 7 openembedded bitbake yocto

我最近开始构建基于Linux的嵌入式系统,这与我通常的嵌入式设备相去甚远,我可以完全控制所有内容.

作为其中的一部分,我正在研究Yocto/bitbake/OpenEmbedded构建系统.

我正在努力解决一件事,那就是分层概念,所以我试图弄清楚层使用/影响其他层的方式.

从我的理解至今,.bb配方文件使用require简单地包含另一个文件,类似于C的#include "myheader.h"通常看起来本地.

.bbappend在"上"层将自动神奇地包括基础文件文件然后进行更改,排序的固有require.

相比之下,inherit关键字查找一个.bbclass在多,因为它所处的同样的方式类文件.bb的文件,并继承了所有从他们的detials(有点像#include <stdio.h>这又一般,看在系统区(A) ).

所以问题的第一部分是:我的理解是否正确?还是我太简单了?

然后我的问题的第二部分涉及BBEXTENDS根据我目前的理解使用.如果我们已经能够通过使用扩展配方require,那么在BBEXTENDS变量中列出所述配方的目的是什么?


(a)是的,我知道它们完全依赖于标题的来源,我只是谈论它们的常用用法.

iks*_*ien 13

Yocto的学习曲线与其他建筑系统不同,这就是我理解你的困惑的原因.但相信我,这是值得的.您的问题与BitBake有关,所以我推荐BitBake用户手册.只需确保您阅读的版本与您的版本相同.

1. requireinclude.

require与您编写的C和C++ 类似include,可以与#includeC和C++ 进行比较.虽然通常它们都应该用于添加一些食谱(*.bb)的扩展,这些扩展对于一些食谱来说很常见(简单来说 - 可以重复使用).例如:路径的定义,夫妇食谱使用的自定义任务.共同的目的是使配方更清洁并分离一些常量以便重复使用.

非常重要的事情 - > include和之间的区别require(来自BitBake手册):

无法找到文件时,include指令不会产生错误.因此,建议如果您要包含的文件存在,则应使用require而不是include.这样做可确保在找不到文件时产生错误.

因此:当您将文件包含到*.bb并且尚未找到时,BitBake 在解析此配方时不会引发错误.如果您愿意require,将引发错误.当指向文件必须存在时,您应该使用require,因为它包含必须处理的重要变量/任务.

2. *.bbappend机制.

在这种情况下*.bbappend- 它非常强大.通常情况下,您要从其他层(位于原始配方所在的层上方)添加一些自定义修改,*.bbappend因为(例如):您不是原始配方的维护者或修改仅用于您的项目(那么它应该位于您的元层中).但您也可以bbappend在同一层上配方.BitBake解析所有层,然后"创建"输出并执行它.更多内容来自BitBake man的执行章节.

3 inherit.

inherit机制可用于继承*.bbclass定义某些特定用途的常见任务的位置,因此您无需自己编写它们,例如:当需要为相应构建的源提供输出时,您使用inhert cmake或使用inherit autotools您的配方CMake(你已经定义了CMakeLists.txt)或autotools(Makefile.am等).OpenEmbedded提供的类的定义位于/ meta/classes /下,如果您使用Yocto发布的poky.你可以检查它们,你会看到例如autotools.bbclass已定义(以及其他)任务:autotools_do_configure()所以你不需要从头开始编写它.但是,您可以在配方中重新定义它(仅提供您自己的此功能定义).如果配方无法更改,那么您只需创建一个*.bbappend文件并编写自己的函数do_configure(),该函数将覆盖该函数*.bbclass.就像在C++或Java等OO语言中一样.