如何在编译时删除 yocto dunfell 分支中的 getty@tty1 link

How to remove getty@tty1 link in yocto dunfell branch at time of compiliation

我正在为 raspberrypi4 构建 linux 系统,但出于某种原因,我需要删除 yocto 中的 getty@tty1 服务。

我已经为此创建了 systemd_%.bbappend 文件。

主机是 Ubuntu 18.04

这是与 warrior 分支合作

现在,我正在尝试使用 yocto 中的 dunfell 分支进行编译

但是在 systemd 编译时它给出了类似

的错误

"无法删除 /etc/systemd/system/getty.target.wants/getty@tty1,没有这样的文件或目录

但最后,在最终图像中我可以看到 getty@tty1.service

此外,我找不到创建此 link 的任何其他收据。

systemd_%.bbappend 看起来像这样

 DESCRIPTION = "Customization of systemD services."

 do_install_append() {

 rm ${D}${sysconfdir}/systemd/system/getty.target.wants/getty@tty1.service

 }

 FILES_${PN} += "${sysconfdir}/systemd/system"

 REQUIRED_DISTRO_FEATURES= "systemd"

谢谢

边际

在较新版本的 systemd 中(如 Yocto dunfell 中的版本),服务链接不是由构建系统 (ninja) 创建的,而是由 运行ning systemctl preset-all安装后 运行ning 系统(参见 here). This command reads the systemd preset files 确定默认启用或禁用哪些单元。

在 Yocto 中,这意味着在图像创建过程中,systemctl preset-all 不是作为 systemd 配方的一部分创建的链接,而是 运行 作为 IMAGE_PREPROCESS_COMMAND 的一部分image.bbclass(参见 here)。这就是为什么从 systemd 配方中删除 /etc/systemd/system 中的符号链接的旧方法不再有效的原因。

相反,您需要做的是修改 90-systemd.preset 文件以通过更改以下行来禁用 getty@tty1 预设(或任何其他默认系统服务):

enable getty@.service

对此:

disable getty@.service

您可以使用 bbappend 文件完成此操作,如下所示*:

# systemd_%.bbappend
do_install_append() {
    # Disable getty@tty1 from starting at boot time.
    sed -i -e "s/enable getty@.service/disable getty@.service/g" ${D}${systemd_unitdir}/system-preset/90-systemd.preset
}

*