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

Yocto: how to use a custom layer to stop an existing layer from appending to a file

有人向我提供了一个 distribution/package,它使用 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}:"

# my fstab to overwrite the one with xenfs
/dev/root / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
tmpfs /var/volatile tmpfs defaults 0 0

但是这不起作用,因为 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 文件。