【问题标题】:Using Conditional Syntax (Overrides) in BitBake在 BitBake 中使用条件语法(覆盖)
【发布时间】:2018-05-19 02:29:23
【问题描述】:

阅读a book on Yocto。转到以下页面,上面写着:

BitBake 提供了一种非常易于使用的方式来编写条件元数据。 它是通过一种称为覆盖的机制来完成的。

OVERRIDES 变量包含由冒号 (:) 分隔的值,并且 每个值都是我们要满足条件的一项。所以,如果我们有一个 以 arm 为条件的变量,并且 arm 处于 OVERRIDES 中,则 使用特定于 arm 的变量版本,而不是 无条件版本,如图:

OVERRIDES = "architecture:os:machine"
TEST = "defaultvalue"
TEST_os = "osspecificvalue"
TEST_other = "othercondvalue"

在本例中,TEST 将是 osspecificvalue 由于条件 操作系统位于OVERRIDES

从这个解释中我不清楚TEST 是如何变成等于osspecificvalue 的。有人能解释一下吗?

【问题讨论】:

  • OVERRIDES 中有os 而没有otherTEST 变量被 TEST_os 值覆盖。
  • @Nayfe 我无法理解OVERRIDES 变量的格式。 architecturemachine 的值是什么?它们如何影响os 值?
  • 这只是一个随机值的例子。例如,您可以使用bitbake -e <recipe> | grep ^OVERRIDES= 查看默认值。您也可以阅读mega manual 中的定义,我发现它比bitbake 手册更清晰。

标签: yocto bitbake


【解决方案1】:

Bitbake 基于 Python 的 MutableMapping in lib/bb/data_smart.py 实现了自己的字典数据结构。目标是创建一个更灵活的字典,因为“key,value”对中的每个值都可以根据特定的标识符进行覆盖。

如果您查看此字典中的变量是如何设置的,您会发现数据存储区允许基于覆盖标识符列表“覆盖”变量。这些标识符应附加下划线,例如您的“TEST_os”示例。

在您引用的情况下,“other”标识符不在 OVERRIDES 列表中,因此这个“智能字典”不会用“othercondvalue”覆盖 TEST 的值。但是,因为“os”标识符在 OVERRIDES 列表中,所以 TEST 的值确实被值“osspecificvalue”覆盖。

我强烈建议通读 DataSmart 类,因为这是一个非常简单的解释,但希望对您有所帮助。

此外,有关详细信息,请参阅 OVERRIDES 的 BitBake 手册条目。

【讨论】:

  • 如果 OVERRIDES = "architecture:os:machine:other",TEST 的值是多少?另一个单独的问题是,OVERRIDES 会影响所有变量吗?例如,如果我有一个变量 MYVAR_other;它受 OVERRIDES 影响吗?
  • @Robert 这种情况下的值是“othercondvalue”。其次,OVERRIDES 会影响数据存储中的所有变量。因此,如果您可以使用 d.getvar() 来获取变量,那么即使您创建了变量 (MYVAR),它也会受到 OVERRIDES 的影响。
  • +1 这篇文章对 OVERRIDES 机制提供了相当不错的解释,但最后一行“另外,请参阅 BitBake 手册条目以获取更多信息。”不是解决方案,而是问题所在。 BitBake 用户手册技术写作的过度不足是首先需要 OP 的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多