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

时间:2018-01-04 20:40:16

标签: 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
        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文件中!
如何阻止它?

1 个答案:

答案 0 :(得分:0)

评论中指出:应该使用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文件。