0

我想根据每个图像更改初始化系统。正如此处指出的那样,我创建了一个示例图像。这很好用,但我还想从 rootfs 中删除未使用的初始化系统(在本例中为 SysVinit)。

因此我在我的发行版配置中尝试了这样的事情:(REQUIRED_DISTRO_FEATURES = "systemd" is set inside my image.bb)

DISTRO_FEATURES_BACKFILL_CONSIDERED = "${@bb.utils.contains('REQUIRED_DISTRO_FEATURES', 'systemd', 'sysvinit', '', d)}"

最终结果是这样,正是我所期望的:

$ bitbake sample-image-systemd -e | grep DISTRO_FEATURES_BACKFILL_CONSIDERED=
DISTRO_FEATURES_BACKFILL_CONSIDERED="sysvinit"

到目前为止,一切都很好。但最终的 rootfs 仍然包含 sysvinit 脚本(/etc/init.d/*)

如果我在我的发行版配置中执行以下操作,一切正常,并且 /etc/init.d 不会创建:

DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"

所以我真的不明白其中的区别以及为什么我的解决方案不起作用。

4

1 回答 1

0

不同之处在于,该 systemd 配方对您的配方没有依赖关系,这很好,因为如果它有它将是一个循环依赖关系。因此,您的配方中定义的变量不会被 systemd 配方扩展或访问

现在为了更好地解释这一点,您可以运行以下命令。

$ bitbake systemd -e | grep DISTRO_FEATURES_BACKFILL_CONSIDERED=

结果应该是

DISTRO_FEATURES_BACKFILL_CONSIDERED=""

发生这种情况是因为在您构建/打包/等 systemd 配方时,未扩展和使用 sample-image-systemd 配方变量。要使变量成为全局变量或可供所有配方访问,您应该将其添加到您的发行版配置或本地配置中。

于 2021-06-29T14:49:43.897 回答