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 维护者的建议。您需要做的是设置一个适当的 MACHINE
,bitbake
将负责其余的工作。
例如,如果您的 MACHINE
是 mx6ul
,调用 bitbake virtual/kernel
与 bitbake 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 食谱来源以了解其工作原理!
我正在尝试基于 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 维护者的建议。您需要做的是设置一个适当的 MACHINE
,bitbake
将负责其余的工作。
例如,如果您的 MACHINE
是 mx6ul
,调用 bitbake virtual/kernel
与 bitbake 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 食谱来源以了解其工作原理!