Yocto:根据MACHINE类型或目标图像安装不同的配置文件

时间:2018-03-13 20:48:50

标签: yocto bitbake

我有几个需要不同asound.conf文件的硬件平台(相同的cpu等)。

我控制目标平台的方式是通过MACHINE变量和目标图像(即 MACHINE = machine_1漂亮的bitbake machine-1-bringup-image

通常,如果只是替换conf文件,我只需创建一个alsa-state.bbappend并创建一个do_install_append函数来替换它。

然而,由于不同的硬件平台需要不同的conf文件,我不确定如何处理它。

我已经尝试将一些逻辑放入附加文件do_install_append函数中,但它没有用完。它并不总是拿起正确的文件(就像它认为没有任何改变,所以它使用以前的缓存conf?)

以下是我尝试过的其中一个附加文件的示例:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += " \ file://asound_MACHINE1.conf \ 
               file://asound_MACHINE2.conf \ "

do_install_append() {

echo "    alsa-state.bbappend MACHINE: ${MACHINE}"
if [ "${MACHINE}" = "machine_1" ]; then
    echo "    machine_1"
    echo "    installing ${WORKDIR}/asound_MACHINE1.conf to ${D}${sysconfdir}/asound.conf"

    install -m 644 ${WORKDIR}/asound_MACHINE1.conf {D}${sysconfdir}/asound.conf

else
    echo "    installing ${WORKDIR}/asound_MACHINE2.conf to ${D}${sysconfdir}/asound.conf"
    install -m 644 ${WORKDIR}/asound_MACHINE2.conf ${D}${sysconfdir}/asound.conf

fi

}

我可以根据逻辑在日志中看到正确的回声。

无论如何,我不认为我走的路是处理这个问题的最好方法。

是否存在基于目标图像或MACHINE变量安装不同文件的“标准”方法?

3 个答案:

答案 0 :(得分:3)

在特定情况下,您可以在计算机特定目录中拥有配置文件(只是每台计算机的特定配置文件)。 OpenEmbedded将获取最具体的一个。配方目录中的目录结构如下所示:

files/<machine1>/asound.conf
files/<machine2>/asound.conf

您的alsa-state.bbappend只包含一行(您无需更改do_install,因为alsa-state.bb已安装asound.conf):

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

BTW:我们正在使用该设置在我们的项目中为每台机器提供特定的asound.state文件。

此外,OpenEmbedded将检测到SRC_URI包含特定于机器的文件并相应地更改PACKAGE_ARCH,请参阅:https://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html#var-SRC_URI_OVERRIDES_PACKAGE_ARCH

计算机,发行版或特定于档案的文件上有更多的文字:OE正在尝试获取file://个提取程序中最具体的文件。它还在由distro(例如files/<distro>/asound.conf)和架构(例如armv7a,arm)命名的目录中搜索。如果要为某些设备设置特定文件,这可能很有用。更多信息:https://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html#var-FILESOVERRIDES以及https://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html#best-practices-to-follow-when-creating-layers(“将计算机专用文件放置在计算机专用位置”部分)

答案 1 :(得分:2)

do_install_append () {
    // install common things here
}

do_install_append_machine-1 () {
    // install machine-1 specific things here
}

do_install_append_machine-2 () {
    // install machine-2 specific things here
}

MACHINE的值自动添加到OVERRIDES,OVERRIDES可以在函数追加的末尾使用,以便为函数添加特定于MACHINE的函数。

也许有用:https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#var-OVERRIDES

答案 2 :(得分:1)

clsulliv的上述答案比宣传的更好。以下参考是我使用的附加文件:

FILESEXTRAPATHS_prepend:= "${THISDIR}/${PN}:"

SRC_URI += " \
   file://machine1_asound.conf \
   file://machine2_asound.conf \
   "


do_install_append_machine1() {

    echo "    machine1"
    echo "    installing ${WORKDIR}/machine1_asound.conf to ${D}${sysconfdir}/asound.conf"
    install -m 644 ${WORKDIR}/machine1_asound.conf ${D}${sysconfdir}/asound.conf
}


do_install_append_machine2() {

    echo "    machine2"
    echo "    installing ${WORKDIR}/machine2_asound.conf to ${D}${sysconfdir}/asound.conf"
    install -m 644 ${WORKDIR}/machine2_asound.conf ${D}${sysconfdir}/asound.conf
}

感谢您的帮助!