You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何作为systemd运行时依赖的update-rc.d未被纳入Yocto镜像?

问题

使用Yocto构建基于systemd的镜像时,systemd的sysv包装器所需的update-rc.d未出现在镜像中。

已确认update-rc.d被列为systemd的运行时依赖:

$ bitbake systemd -e | grep "^RDEPENDS"
RDEPENDS:systemd=" kmod dbus util-linux-mount util-linux-umount udev (= 1:250.4-r0) systemd-udev-rules util-linux-agetty util-linux-fsck systemd-serialgetty volatile-binds ldconfig libnss-myhostname      pam-plugin-unix     pam-plugin-loginuid     pam-plugin-keyinit  systemd-compat-units update-rc.d systemd-vconsole-setup"
RDEPENDS:systemd-bash-completion="bash-completion"
RDEPENDS:systemd-conf=" update-rc.d"
RDEPENDS:systemd-dev="systemd (= 1:250.4-r0)"
RDEPENDS:systemd-doc=" "
RDEPENDS:systemd-initramfs="systemd"
RDEPENDS:systemd-kernel-install=" bash"
RDEPENDS:systemd-staticdev="systemd-dev (= 1:250.4-r0)"
RDEPENDS:udev-hwdb=" udev"

systemd已被正确纳入镜像(可正常运行,镜像清单已确认):

$ grep -n systemd tmp/deploy/images/<arch>/<image_name>.manifest
283:libsystemd-shared cortexa55 1:250.4-r0
284:libsystemd0 cortexa55 1:250.4-r0
394:systemd cortexa55 1:250.4-r0
395:systemd-compat-units cortexa55 1.0-r29
396:systemd-conf txrz_g2l0 1:1.0-r0
397:systemd-extra-utils cortexa55 1:250.4-r0
398:systemd-serialgetty txrz_g2l0 1.0-r5
399:systemd-udev-rules cortexa55 1:250.4-r0
400:systemd-vconsole-setup cortexa55 1:250.4-r0

但update-rc.d始终未被纳入最终镜像:镜像清单中无该包名,镜像根文件系统中也无其应提供的脚本文件。


可能原因与调试方法
  • 检查update-rc.d包本身配置
    运行bitbake update-rc.d -e查看该包的PACKAGECONFIG、EXCLUDE_FROM_WORLD等变量,确认是否有配置导致它被排除出构建。同时查看其.bb或.bbappend文件,是否设置了SKIP_RECIPE或其他阻止打包的选项。

  • 验证systemd的依赖条件
    查看systemd的配方文件(.bb),确认是否存在针对特定distro/machine的条件判断,导致update-rc.d被从RDEPENDS中移除。比如部分distro在纯systemd环境下可能默认禁用sysv兼容工具的依赖。

  • 用oe-pkgdata-util追踪依赖链
    运行以下命令定位update-rc.d的归属及依赖关系:

    oe-pkgdata-util find-path /usr/sbin/update-rc.d
    oe-pkgdata-util depends-on update-rc.d
    

    前者确认update-rc.d属于哪个包,后者查看哪些包依赖它,验证systemd是否在依赖列表中。

  • 检查镜像的依赖修剪规则
    查看自定义镜像配方(或基础镜像如core-image-base.bb),确认是否设置了IMAGE_INSTALL_remove += "update-rc.d"。另外检查DISTRO_FEATURES,若仅启用systemd而未包含sysvinit兼容特性,可能触发依赖修剪逻辑。

  • 查看构建日志的依赖解析细节
    运行bitbake <image_name> -vDDD,在输出中搜索update-rc.d,查找是否有类似Skipping unneeded dependency update-rc.d的提示,这能直接定位依赖被排除的原因。

  • 强制添加update-rc.d到镜像
    在镜像配方中添加IMAGE_INSTALL += "update-rc.d",重新构建后检查是否出现在镜像中。如果成功,说明是依赖链被截断;如果失败,说明该包本身存在构建或打包问题。

内容的提问来源于stack exchange,提问作者KubaFYI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:03:33