VARIABLE_*_something 是如何工作的?在约克托

How does VARIABLE_*_something works? in Yocto

我正在尝试基于 imx6ulevk 构建自己的 yocto_meta-layer,在 ./meta-fsl-bsp-release/imx/meta-sdk/conf/distro/include/fsl-imx-preferred-env.inc 中我发现了一些奇怪的东西:

PREFERRED_PROVIDER_virtual/kernel_mx6ul = "linux-imx" 
PREFERRED_PROVIDER_virtual/kernel_mx6sll = "linux-imx"
PREFERRED_PROVIDER_virtual/kernel_mx7 = "linux-imx"

所以我想知道最后一个 *_word(即 PREFERRED_PROVIDER_virtual/kernel_*)是什么意思?

a) 是否可以根据机器设置 virtual/kernel 解析器?

b) 如果 [a] 是,我怎么知道要放哪个名字?或者我需要选择 machine_name.conf 的哪一部分?

PREFERRED_PROVIDER_<recipe-name>_<machine-name> 表示此变量仅适用于提到的配方和相应的 MACHINE。这是发行层中的常见现象。在这种特殊情况下,飞思卡尔层告诉 bitbake 选择哪个 Linux 内核配方,具体取决于您在 local.conf 中设置或通过命令行传递的 MACHINE。更多信息 here.

所以 a) 的答案是肯定的。

b) 的答案是你不应该为 Linux 内核更改 PREFERRED_PROVIDER 除非你真的知道你在做什么(即从头开始编写内核配方) ).即使您有自定义板,您也不太可能更改 virtual/kernel 提供商。您可能希望遵循 BSP 维护者的建议。您需要做的是设置一个适当的 MACHINEbitbake 将负责其余的工作。

例如,如果您的 MACHINEmx6ul,调用 bitbake virtual/kernelbitbake linux-imx 相同。前者是最佳实践,正如您在 Yocto 中所说的那样,与机器无关。

恐怕阅读文档是完全掌握 Yocto 的最佳方式。好处是它的文档非常好。在深入阅读大型手册之前,您可能希望从上面的 development manual 和 bitbake link 开始。

后缀下划线'_'后跟一个字符串表示变量PREFERRED_PROVIDER_virtual/kernel在这种情况下是"overridden"。当 OVERRIDES 变量包含特定字符串时,bitbake 将使用此赋值,例如 "imx6ul".

很多时候,如果不是全部,SoC 架构是在 machine.conf 中的 MACHINEOVERRIDES 变量中设置的,以定义板上的 SoC。因此,在其他地方的某些 yocto/bitbake 配方中,它被分配给 OVERRIDES。

bitbake 手册 [1] 中的条件语法(覆盖)部分专门讨论了这如何影响变量扩展。

a.) 如果我们严格遵守 Yocto 使用的术语,那就不是了。 "machine" 本身与板相关,例如 "imx6ulevk"。您在那里拥有的覆盖更普遍地与 SoC 架构(芯片)有关。例如,您可能有很多板 运行 连接 imx6ul。在这种情况下,它将适用于所有 "machines" 运行 特定 SoC(由您的机器在 MACHINEOVERRIDES 中定义)。

b.) 出现在冒号分隔的 OVERRIDES 变量中的任何内容都是公平的。您可以使用机器名称,因为 Yocto 实际上也将 MACHINE 名称附加到它。但是这样做真的没有意义,因为你有一个奉献 machine.conf 文件供你做出硬定义,例如 PREFERRED_PROVIDER_virtual/kernel = "something" 如果你真的想要 [=38] =] 具体的内核选择。恩智浦在他们的发行层中做到了这一点,以便同时应用于许多机器(又名电路板)。

提示:要查看这些变量扩展到什么,运行 bitbake -e virtual/kernel

这些覆盖是 bitbake 最强大的功能之一。例如,如果你想覆盖 linux-imx 内核构建的源版本,你可以在你的 local.conf 中放置类似 SRCREV_pn-linux-imx = "something" 的内容。看看您是否可以 grep 食谱来源以了解其工作原理!

参考资料: [1] https://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html#conditional-syntax-overrides