Yocto:如何使用自定义层阻止现有层附加到文件
我收到了一个使用yocto项目构建嵌入式Linux映像的发行版/软件包,但我需要做一些小的更改。我想通过添加自己的图层来实现这一点 问题是:有一个配方会在fstab文件中追加一行。配方是: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
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
}