如何创建特定于机器的配方



我想知道是否有机会仅通过文件名创建特定于机器的配方,以便我有一个类似的层结构,如下所示:

-> recipes-example
     -> example
         -> example_1.0.bb_machine1
         -> example_1.0.bb_machine2

不久前,我几乎阅读了完整的Yocto文档,并认为我曾经偶然发现了这个创建机器特定配方的机会,但无法重新找到它。

替代方案也值得赞赏,但是我知道像这个例子这样的bash解决方案:

do_install() {
   case ${MACHINE} in
      < case statements [...] >
}

不,没有办法仅凭它们的名字来创建特定于机器的配方。

假设只有几个文件/补丁不同,最常见的方法是在特定于机器的目录中添加不同的文件,例如:

-> recipes-example
  -> example
    -> example
      -> machine1
        -> defconfig
        -> mach1.patch
      -> machine2
        -> defconfig
    -> defconfig

这将允许你编写如下内容:(请注意,在我的示例中,有一个通用的defconfig文件和两个特定于机器的文件。由于MACHINEOVERRIDES,将自动选择正确的一个)

SRC_URI += "file://defconfig"
SRC_URI_machine1 += "file://mach1.patch"

在此示例中,mach1.patch将仅应用于machine1

如果您需要为机器做一些特殊的事情,例如do_install,您可以使用:

do_install_append_machine1 () {
    do something here
}

更新:(在格劳根评论之后)

是的,也可以使用COMPATIBLE_MACHINE。一种方法是创建example-mach1.bbexample-mach2.bbexampe-machs.bb 这将包括几行,例如:

PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "machine1"

和"example-machs.bb"

PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "(machine3|machine4)"

然后,在图像配方中,添加IMAGE_INSTALL += "virtual/example" .

最新更新