Yocto 变量是如何工作的?在约克托

Yocto 变量是如何工作的?在约克托,yocto,bitbake,Yocto,Bitbake,我正试图基于imx6ulevk和/meta-fsl-bsp-release/imx/meta-sdk/conf/distro/include/fsl-imx-preferred-env.inc>构建我自己的yocto_元层,我发现了一些奇怪的东西: PREFERRED_PROVIDER_virtual/kernel_mx6ul = "linux-imx" PREFERRED_PROVIDER_virtual/kernel_mx6sll = "linux-imx" PREFERRED_PROVI

我正试图基于imx6ulevk和
/meta-fsl-bsp-release/imx/meta-sdk/conf/distro/include/fsl-imx-preferred-env.inc>构建我自己的yocto_元层,我发现了一些奇怪的东西:

PREFERRED_PROVIDER_virtual/kernel_mx6ul = "linux-imx" 
PREFERRED_PROVIDER_virtual/kernel_mx6sll = "linux-imx"
PREFERRED_PROVIDER_virtual/kernel_mx7 = "linux-imx"
所以我想知道最后一个*(即首选提供者)是什么意思?

a) 这是一种根据机器设置虚拟/内核解析器的方法吗

b) 如果[a]是“是”,我如何知道该使用哪个名称?或者我需要选择机器的哪个部分?name.conf?

首选\u提供者\uuu
表示此变量仅适用于所述配方和相应的
机器。这是发行版层中常见的现象。在这种特殊情况下,freescale层告诉bitbake根据您在
local.conf
中设置的
MACHINE
或pass-via命令行选择哪个Linux内核配方。更多信息

因此a)的答案是肯定的

b)的答案是,除非您真的知道自己在做什么(即从头开始编写内核配方),否则您不应该为Linux内核更改
首选\u提供程序。即使您有一个定制板,也不太可能更改虚拟/内核提供程序。您可能希望遵循BSP维护人员的建议。您需要做的是设置一台合适的
机器
,而
位烘焙
将处理其余部分

例如,如果您的
计算机
mx6ul
,则调用
bitbake虚拟/内核
bitbake linux imx
相同。前者是最佳实践,正如您在Yocto中所说的,无论机器如何


恐怕阅读文档是完全掌握Yocto的最好方法。好的是,它的文档记录得非常好。在深入阅读mega手册之前,您可能希望从上面的和bitbake链接开始

后缀下划线“\u”后跟一个字符串意味着变量,即本例中首选的\u提供程序\u virtual/kernel被“覆盖”。当覆盖变量包含特定字符串(如“imx6ul”)时,bitbake将使用此赋值

很多时候(如果不是全部的话),SoC体系结构在machine.conf中的MACHINEOVERRIDES变量中设置,以定义板上的SoC。因此,在其他地方的某些yocto/bitbake配方中会将其分配给覆盖

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

a、 )如果我们严格要求Yocto使用的术语,那就不是了。“机器”本身与一块板相关,比如“imx6ulevk”。这里的覆盖通常与SoC架构(芯片)有关。例如,您可能有许多板运行imx6ul。在这种情况下,它将适用于运行特定SoC的所有“机器”(由您的机器在MACHINEOVERRIDES中定义)

b、 )冒号分隔的覆盖变量中出现的任何内容都是公平的。您可以使用机器名,因为Yocto实际上也会将机器名附加到它后面。但是这样做并没有真正意义,因为您有一个专用的machine.conf文件,如果您确实需要特定于机器/板的内核选择,您可以创建一个硬定义,例如PREFERRED\u PROVIDER\u virtual/kernel=“something”。NXP在发行版层中做到了这一点,以同时应用于多台机器(又称主板)

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

这些覆盖是bitbake最强大的功能之一。例如,如果您想覆盖linux imx内核构建的源代码版本,您可以在local.conf中放置类似于
SRCREV\u pn-linux-imx=“something”
。看看你是否可以通过grep的配方来源来了解它是如何工作的

参考资料: [1]