gpt4 book ai didi

yocto - 要求澄清 Yocto 继承

转载 作者:行者123 更新时间:2023-12-04 05:47:05 27 4
gpt4 key购买 nike

我最近尝试构建基于 Linux 的嵌入式系统,这与我通常可以完全控制一切的嵌入式系统相去甚远。

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

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

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

一个 .bbappend “上”层中的文件将自动神奇地包含基本文件,然后对其进行更改,有点像固有的 require .

相比之下,inherit关键字查找 .bbclass class 文件的定位方式与它定位 .bb 的方式大致相同。文件,并从它们继承所有详细信息(有点像 #include <stdio.h>,它通常又在系统区域(a)中查找)。

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

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

(a) 是的,我知道就 header 的来源而言,它们都完全取决于实现,我只是在谈论它们的常见用途。

最佳答案

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

  • requireinclude .
  • require类似于 include并且可以与 #include 进行比较就像你写的一样,来自 C 和 C++。
    虽然通常它们都应该用于向配方(*.bb)添加一些扩展名,这些扩展名对于一定数量的配方是通用的(简单 - 可以重复使用)。
    例如:路径的定义,由几个配方使用的自定义任务。共同的目的是使配方更清洁并分离一些常量以供重复使用。
    非常重要的事情-> include 之间的区别和 require (来自 BitBake 手册):

    The include directive does not produce an error when the file cannot be found. Consequently, it is recommended that if the file you are including is expected to exist, you should use require instead of include. Doing so makes sure that an error is produced if the file cannot be found.


    结果:当您将一个文件包含到 *.bb 并且没有找到时,BitBake 将 不是 在解析此配方期间引发错误。
    如果您使用 require ,错误 将被提出 .当指向的文件必须存在时,您应该使用 require ,因为它包含必须处理的重要变量/任务。
  • *.bbappend机制。

  • *.bbappend的情况下- 它非常强大。典型的用法是通过 *.bbappend 从其他层(位于原始配方所在的层上方)向配方添加一些自定义修改的乳清。因为(例如):您不是原始配方的维护者或修改仅在您的项目中使用(那么它应该位于您的元层中)。但你也可以 bbappend配方在同一层。 BitBake 解析所有层,然后“创建”一个输出并执行它。更多章节 Execution from BitBake man .
  • inherit .
  • inherit机制可用于继承 *.bbclass其中定义了用于某些特定目的的常见任务,因此您无需自己编写它们,例如:您使用 inherit cmakeinherit autotools当它需要为由 CMake(并且您定义了 CMakeLists.txt)或自动工具(Makefile.am 等)相应构建的源提供输出时,添加到您的配方。
    如果您使用带有 poky 的 Yocto 版本,则 OpenEmbedded 提供的类的定义位于/meta/classes/下。
    您可以检查它们,您会看到例如 autotools.bbclass已定义(除其他外)任务: autotools_do_configure()所以你不需要从头开始编写它。
    但是,您可以在您的配方中重新定义它(只需提供您自己对此函数的定义)。如果配方无法更改,那么您可以简单地创建一个 *.bbappend文件并编写自己的函数 do_configure()这将覆盖来自 *.bbclass 的函数.就像在面向对象的语言中一样,例如 C++ 或 Java。

    关于yocto - 要求澄清 Yocto 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288801/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com