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

时间:2016-01-19 07:09:51

标签: embedded-linux yocto recipe bitbake

我想知道是否有机会仅按文件名创建机器特定的配方,以便我有类似的层结构:

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

前段时间我已经阅读了几乎完整的IsoDateTimeFormat.hourMinute()并认为我曾经偶然发现这个创造机器特定配方的机会,但无法对其进行修改。

备选方案也很受欢迎,但我知道像这个例子的bash解决方案:

{{1}}

1 个答案:

答案 0 :(得分:10)

不,没有办法只根据他们的名字创建特定于机器的食谱。

假设只有少数文件/补丁有所不同,最常见的方法是在计算机专用目录中添加不同的文件,例如:

\-> 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
}

更新:(在graugans发表评论后)

是的,也可以使用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"