Yocto:如何使用自定义层阻止现有层附加到文件

Yocto:如何使用自定义层阻止现有层附加到文件,yocto,Yocto,我收到了一个使用yocto项目构建嵌入式Linux映像的发行版/软件包,但我需要做一些小的更改。我想通过添加自己的图层来实现这一点 问题是:有一个配方会在fstab文件中追加一行。配方是: meta-virtualization/recipes-core/base-files/base-files_3%.bbappend 以及该文件的内容: do_install_append() { if echo "${DISTRO_FEATURES}" | grep -q 'xen'; then

我收到了一个使用yocto项目构建嵌入式Linux映像的发行版/软件包,但我需要做一些小的更改。我想通过添加自己的图层来实现这一点

问题是:有一个配方会在fstab文件中追加一行。配方是:

meta-virtualization/recipes-core/base-files/base-files_3%.bbappend
以及该文件的内容:

do_install_append() {
    if echo "${DISTRO_FEATURES}" | grep -q 'xen'; then
        echo "xenfs   /proc/xen   xenfs   defaults   0   0" >> ${D}${sysconfdir}/fstab
    fi
}   
我的要求是,此xenfs行不会在最终映像的fstab文件中结束

我尝试创建自己的图层和配方来覆盖fstab文件:

meta-mylayer/recipes-core/base-files/base-files_3%.bbappend
meta-mylayer/recipes-core/base-files/base-files/base-files/fstab
内容包括:

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


但是,这不起作用,因为xenfs行只是附加到我的fstab文件中<我怎样才能阻止这一切

在评论中指出:应使用cp而不是cat。这里重要的一点是,这个do_install_append()是在现有的do_install_append()之后调用的,正如问题中所示,第一次尝试时不是这样


我当前的解决方案涉及第二次写入fstab文件,方式与原始配方类似:

在自定义图层的基础文件中创建两个文件:

meta-mylayer/recipes-core/base-files/base-files_3%.bbappend
meta-mylayer/recipes-core/base-files/base-files/fstab.overwrite
内容为base-files_3%.bbappend:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += " file://fstab.overwrite"

do_install_append() {
    if echo "${DISTRO_FEATURES}" | grep -q 'xen'; then
        cp fstab.overwrite ${D}${sysconfdir}/fstab
    fi
}

其中fstab.overwrite的内容将用不需要的附件替换当前fstab文件

我将接受任何改进此解决方案的答案。最好的解决方案是防止来自元虚拟化层的附加。您的解决方案非常好。问题是,yocto不允许手动禁用或覆盖(它可以工作,但工作异常且不一致)其他层的任何现有功能,您可以禁用整个层,或者使用它提供的所有功能。但是我不明白为什么你决定用
cat
来代替
cp
?我甚至没有想到要用cp。。。可能是因为我第一次复制文件的努力没有成功。但你是对的,它应该在这里起作用。谢谢
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += " file://fstab.overwrite"

do_install_append() {
    if echo "${DISTRO_FEATURES}" | grep -q 'xen'; then
        cp fstab.overwrite ${D}${sysconfdir}/fstab
    fi
}