如何创建特定于机器的配方?
How can I create machine specific recipes?
我想知道是否有机会仅通过文件名创建特定于机器的配方,以便我拥有类似这样的层结构:
\-> recipes-example
\-> example
\-> example_1.0.bb_machine1
\-> example_1.0.bb_machine2
我几乎读完了 Yocto Documentation 前一段时间,我以为我曾经偶然发现这个创建机器特定配方的机会,但无法重新找到它。
替代方案也很受欢迎,但是我知道像这个例子这样的 bash 解决方案:
do_install() {
case ${MACHINE} in
< case statements [...] >
}
不,无法仅通过他们的名字创建 machine-specific 食谱。
假设只有几个文件/补丁不同,最常见的方法是在机器特定目录中添加不同的文件,例如:
\-> 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.bb
、example-mach2.bb
和 exampe-machs.bb
,其中包括几行,例如:
PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "machine1"
和`example-machs.bb
PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "(machine3|machine4)"
然后在您的图像配方中添加 IMAGE_INSTALL += "virtual/example"
。
我想知道是否有机会仅通过文件名创建特定于机器的配方,以便我拥有类似这样的层结构:
\-> recipes-example
\-> example
\-> example_1.0.bb_machine1
\-> example_1.0.bb_machine2
我几乎读完了 Yocto Documentation 前一段时间,我以为我曾经偶然发现这个创建机器特定配方的机会,但无法重新找到它。
替代方案也很受欢迎,但是我知道像这个例子这样的 bash 解决方案:
do_install() {
case ${MACHINE} in
< case statements [...] >
}
不,无法仅通过他们的名字创建 machine-specific 食谱。
假设只有几个文件/补丁不同,最常见的方法是在机器特定目录中添加不同的文件,例如:
\-> 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.bb
、example-mach2.bb
和 exampe-machs.bb
,其中包括几行,例如:
PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "machine1"
和`example-machs.bb
PROVIDES += "virtual/example"
COMPATIBLE_MACHINE = "(machine3|machine4)"
然后在您的图像配方中添加 IMAGE_INSTALL += "virtual/example"
。