我试图在imx6ulevk的基础上构建自己的yocto_meta层,在./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"所以我想知道最后一个内核(即PREFERRED_PROVIDER_virtual/ *_word _*)是什么意思?
a)这是一种根据机器设置虚拟/内核解析器的方法吗?
b)如果a是yes,我如何知道应该输入哪个名称?或者我需要选择machine_name.conf的哪个部分?
发布于 2019-09-18 09:40:01
PREFERRED_PROVIDER_<recipe-name>_<machine-name>表示此变量仅适用于所提到的配方和相应的MACHINE。这是发行版层中常见的现象。在这种情况下,freescale层将根据您在local.conf中设置的MACHINE或通过命令行传递来告诉bitbake选择哪个Linux内核配方。更多信息here。
所以a)的答案是肯定的。
b)的答案是,你不应该为修改Linux内核的PREFERRED_PROVIDER而烦恼,除非你真的知道你在做什么(也就是从头开始写一个内核配方)。即使你有一个定制的板子,你也不太可能改变虚拟/内核提供程序。您可能希望遵循BSP维护者的建议。您需要做的是设置一个适当的MACHINE,bitbake将负责其余的工作。
例如,如果您的MACHINE为mx6ul,则调用bitbake virtual/kernel与调用bitbake linux-imx相同。前者是最佳实践,正如您在Yocto中所说的那样,无论机器是什么。
我担心阅读文档是完全掌握Yocto的最好方法。好消息是它被很好地记录下来了。你可能想要从上面的development manual和bitbake链接开始,然后再深入到超级手册。
发布于 2019-09-19 11:25:22
后缀下划线'_‘后跟一个字符串表示变量PREFERRED_PROVIDER_virtual/kernel在本例中被“覆盖”。当OVERRIDES变量包含特定字符串时,bitbake将使用此赋值,例如"imx6ul“。
很多时候,如果不是全部的话,SoC架构是在machine.conf中的MACHINEOVERRIDES变量中设置的,以定义电路板上的SoC。因此,它被分配到其他地方的一些yocto/bitbake食谱中的重写。
bitbake手册1中的条件语法(覆盖)部分专门讨论了这如何影响变量扩展。
a.)如果我们严格使用Yocto使用的术语,它将是no。“机器”本身与电路板相关,例如"imx6ulevk“。您在那里拥有的覆盖通常与SoC架构(芯片)有关。例如,您可能有许多运行imx6ul的主板。在这种情况下,它将与运行该特定SoC的所有“机器”有关(正如您的机器在MACHINEOVERRIDES中所定义的那样)。
b.)冒号分隔的覆盖变量中出现的任何内容都是公平的。您可以使用机器名,因为Yocto实际上也会将机器名附加到机器名后面。但是这样做并没有什么实际意义,因为如果您确实想要一个机器/主板特定的内核选择,那么您可以使用一个专用的machine.conf文件来进行硬定义,例如PROVIDER_PROVIDER_virtual/ kernel = "something“。恩智浦在他们的发行版中做到了这一点,以便同时应用于多台机器(也称为主板)。
提示:要查看这些变量的扩展结果,请运行bitbake -e virtual/kernel
这些覆盖是bitbake最强大的功能之一。例如,如果想要覆盖linux-imx内核构建的源代码修订,可以在local.conf中放入类似SRCREV_pn-linux-imx = "something"的内容。看看您是否可以grep食谱源代码,以了解它是如何工作的!
参考资料:1
https://stackoverflow.com/questions/57982423
复制相似问题