我怎样才能覆盖另一个 .bbappend

How can I override another .bbappend

我用 systemddhcp-client 构建了一个图像。在 meta-openembedded/meta-systemd/oe-core/recipes-connectivity/dhcp 中的食谱 dhcp 中,有一个 bbappend 创建了一个 dhclient.service。我想修改(或覆盖)这个文件,但是当我启动 bitbake 时,我有一个错误告诉我 Applying patch 0001-dhclient-modify-interface.patch can't find file to patch at input line 5.

这是我的 dhclient.service 补丁:

Index: 4.3.3-r0/dhclient.service
===================================================================
--- 4.3.3-r0.orig/dhclient.service
+++ 4.3.3-r0/dhclient.service
@@ -6,7 +6,7 @@ After=syslog.target network.target
 Type=forking
 PIDFile=/var/run/dhclient.pid
 EnvironmentFile=-/etc/default/dhcp-client
-ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases $INTERFACES
+ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases eth0

 [Install]
 WantedBy=multi-user.target

还有我的 dhcp_%.bbappend :

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://dhclient.service"

我也试过覆盖文件,但它似乎完全忽略了我的文件...

我想在默认情况下启用它,但如何将此 ligne(存在于 dhcp 文件夹中)覆盖为 enableSYSTEMD_AUTO_ENABLE_dhcp-client = "disable"

嗯,你不能轻易地修补文件,因为它不是源代码的一部分。

但是,添加一个.bbappend

应该就足够了
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
SYSTEMD_AUTO_ENABLE_dhcp-client = "enable"

并将 dhclient.service 放入您位于 recipes-core/dhcp/dhcp/dhclient.service 的层中。

这假定您的图层与 meta-systemd 相比具有更高的优先级。

还有另一个适合我的解决方案是先禁用原始的 bbappend,然后添加您自己的。

BBMASK = "meta-openembedded/meta-systemd/oe-core/recipes-connectivity/dhcp/original.bbappend" 放入您的 build/conf/layers.conf 以禁用原始的上游 bbappend,然后将新的 bbappend 放入您自己的配方中。这样可以"override" bbappend。

这样更灵活,可以适用于更多的场景,不受你的case限制。