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

基于OpenSTLinux的Yocto镜像:如何将系统管理器从systemd替换为init.d?

替换OpenSTLinux Yocto镜像的系统管理器为init.d

核心配置修改

在Yocto构建环境中,通过调整配置变量切换系统管理器:

  • 打开构建目录下的conf/local.conf,添加/修改以下变量:
    # 移除systemd相关特性
    DISTRO_FEATURES_remove = "systemd"
    # 添加sysvinit(init.d所属初始化系统)特性
    DISTRO_FEATURES_append = "sysvinit"
    # 指定默认初始化管理器为sysvinit
    VIRTUAL-RUNTIME_init_manager = "sysvinit"
    
  • 若想保持配置模块化,可在自定义layer的conf/layer.conf或conf/distro/custom-distro.conf中覆盖上述变量,避免直接修改通用的local.conf。

处理依赖冲突

部分OpenSTLinux默认包可能依赖systemd,需针对性调整:

  • 对单个包,通过PACKAGECONFIG_remove_pn-<包名>禁用其systemd依赖,示例:
    PACKAGECONFIG_remove_pn-networkmanager = "systemd"
    
  • 若遇到强制依赖systemd的包,需寻找兼容sysvinit的替代包,或通过IMAGE_INSTALL_remove移除该包,替换为功能相近的sysvinit兼容版本。

适配板级启动脚本

OpenSTLinux的BSP可能自带systemd服务文件,需替换为sysvinit的init.d脚本:

  • 在自定义layer中创建recipes-core/initscripts目录,放入符合sysvinit规范的服务启动脚本。
  • 通过recipe的SRC_URI引入脚本,确保构建时安装到镜像的/etc/init.d/目录。

构建与验证

  • 执行bitbake <你的镜像名称>重新构建完整镜像。
  • 烧录镜像后,执行ps 1验证进程1是否为init(而非systemd),同时通过service <服务名> start/stop测试init.d服务的启停功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:16