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 文件。
有人向我提供了一个 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 文件。