如何在Yocto(Dunfell版本)构建时设置custom.target为默认启动目标?
Yocto修改systemd默认启动目标(Dunfell版本及通用方法)
针对Dunfell版本的具体操作
方式1:通过systemd配置文件覆盖
在你的自定义layer中创建如下目录结构:meta-yourlayer/recipes-core/systemd/systemd-conf/systemd.conf.d/
在该目录下新建default-target.conf文件,内容如下:
[Manager] DefaultTarget=custom.target
然后创建systemd_%.bbappend文件,添加以下内容引入这个配置:
FILESEXTRAPATHS_prepend := "${THISDIR}/systemd-conf:" SRC_URI += "file://systemd.conf.d/default-target.conf"
方式2:使用SYSTEMD_DEFAULT_TARGET变量
在你的Image Recipe(如core-image-minimal.bbappend)或者local.conf中直接设置:
SYSTEMD_DEFAULT_TARGET = "custom.target"
注意:需确保
custom.target的unit文件已被正确安装到镜像中。
Yocto通用修改方法(适用于多数版本)
方式1:利用SYSTEMD_DEFAULT_TARGET变量
这是Yocto官方推荐的方法,在Image Recipe或local.conf中设置:
SYSTEMD_DEFAULT_TARGET = "custom.target"
构建过程中,systemd包会自动处理默认目标的链接指向,前提是custom.target已包含在镜像内。
方式2:手动修改默认链接
可以在自定义Recipe的do_install阶段添加链接命令:
do_install_append() { ln -sf /usr/lib/systemd/system/custom.target ${D}/etc/systemd/system/default.target }
或者在Image Recipe中通过ROOTFS_POSTPROCESS_COMMAND处理:
ROOTFS_POSTPROCESS_COMMAND += "set_default_target;" set_default_target() { ln -sf /usr/lib/systemd/system/custom.target ${IMAGE_ROOTFS}/etc/systemd/system/default.target }
注意事项
- 确保
custom.target的unit文件已正确部署到${D}/usr/lib/systemd/system/路径下,可通过自定义Recipe或systemd的bbappend实现。 - 验证方法:构建完成后,检查镜像根文件系统内
etc/systemd/system/default.target的指向,或系统启动后执行systemctl get-default确认。
内容的提问来源于stack exchange,提问作者Florian Berndl
相关产品推荐
相关产品推荐

