在 BitBake 中使用条件语法(覆盖)

fla*_*urn 5 bitbake yocto

阅读一本关于 Yocto 的书。到了下面的页面,上面写着:

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

OVERRIDES 变量包含以冒号 (:) 分隔的值,每个值都是我们想要满足条件的一项。因此,如果我们有一个以 arm 为条件的变量,并且 arm 在 OVERRIDES 中,那么将使用特定于 arm 的变量版本而不是非条件版本,如下所示:

OVERRIDES = "architecture:os:machine"
TEST = "defaultvalue"
TEST_os = "osspecificvalue"
TEST_other = "othercondvalue"
Run Code Online (Sandbox Code Playgroud)

在这个例子中,TEST将是osspecificvalue由于 os 处于OVERRIDES.

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

Ste*_*ano 4

注意:出于历史目的,我保留了这个答案的文本不变。然而,从 Yocto 版本 3.4 开始,不再使用下划线 (_) 来表示覆盖,而是使用冒号 (:)。有关详细信息,请参阅迁移说明

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

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

在您引用的情况下,“其他”标识符不在 OVERRIDES 列表中,因此此“智能字典”不会用“othercondvalue”覆盖 TEST 的值。但是,由于“os”标识符位于 OVERRIDES 列表中,因此 TEST 的值确实被值“osspecivalvalue”覆盖。

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

另外,请参阅 BitBake 手册中OVERRIDES条目以获取更多信息。

  • +1 这篇文章对 OVERRIDES 机制提供了相当好的解释,但最后一行是“另外,请参阅 BitBake 手册中的 OVERRIDES 条目以获取更多信息。” 不是解决方案,而是问题。BitBake 用户手册技术写作的严重不足正是 OP 的必要性。 (2认同)