代码之家  ›  专栏  ›  技术社区  ›  jpx

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

  •  1
  • jpx  · 技术社区  · 6 年前

    我收到了一个使用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 回复  |  直到 6 年前
        1
  •  1
  •   jpx    6 年前

    评论中指出: 应使用cp代替cat . 这里重要的一点是,这个do\u install\u append()是在现有的do\u install\u append()之后调用的,正如问题中所示,在第一次尝试中不是这样。


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

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

    meta-mylayer/recipes-core/base-files/base-files_3%.bbappend
    meta-mylayer/recipes-core/base-files/base-files/fstab.overwrite
    

    内容为base-files\u 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的内容。覆盖用不需要的附件替换当前fstab文件。