在 Yocto 中启用 systemd 服务

问题描述 投票:0回答:2

我试图在成功启动基于 STM32MP1 的 Avnger96 板后自动启用 systemd 服务。我使用 Yocto Project 作为 Ubuntu 20.04 的构建系统。我启用 systemd 服务的镜像配方是

example-systemd.bb
:

.
.
inherit systemd

SRC_URI = "file://example.sh \
           file://example.service \
          "

S = "${WORKDIR}"

SYSTEMD_AUTO_ENABLE_${PN} = "enable"
SYSTEMD_PACKAGES = "${PN}"

SYSTEMD_SERVICE_${PN} = "example.service"

do_install_append() {

    install -d 644 ${D}${sysconfdir}/init.d
    install -m 0755 ${WORKDIR}/example.sh ${D}${sysconfdir}/init.d

    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/example.service ${D}${systemd_system_unitdir}
}

FILES_${PN} += "${sysconfdir}/init.d"
FILES_${PN} += "${systemd_system_unitdir}/example.service"

REQUIRED_DISTRO_FEATURES= " systemd"

并包含在我的主图像中

local.conf
IMAGE_INSTALL_append = " example-systemd"

构建图像后,

bitbake -e (YOUR_IMAGE) | grep ^DISTRO_FEATURES=
显示
systemd

但是在我的 rootfs 中我找不到包含上述服务文件的

systemd/system
目录。而且当我运行
systemctl status example
时,我收到错误
-sh: systemctl: command not found

更新

DISTRO_FEATURES_append= " systemd"
包含在
example-service.bb
中后,在 rootfs 中创建
etc/systemd/system/multi-user.target.wants/
并包含 example.service 文件。但做
cat example.service
会产生
cat: example.service: No such file or directory
。这是预期的吗?

谁能告诉我如何使用 systemd 运行此服务以及如何检查服务是否已从 Linux 用户空间安装和执行?

我还有一个疑问:Systemd 和 Sysvinit 是否可以同时存在,某些服务由 systemd 运行,另一些服务由 sysvinit 运行?

我们将非常感谢您的帮助。

提前致谢。

P.S:如果此处缺少任何信息,请告诉我

embedded-linux yocto
2个回答
3
投票

您的项目可能仍然使用

systemv
或其他东西作为初始化管理器,而不是
systemd

您可以通过将这些行添加到您的

systemd
来启用
local.conf
(适用于 Kirkstone 及更新版本):

DISTRO_FEATURES:append = " systemd usrmerge"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

您可以通过将这些行添加到您的

systemd
来启用
local.conf
(适用于 Honister 及更早版本):

DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

0
投票
DISTRO_FEATURES_append = " systemd"
© www.soinside.com 2019 - 2024. All rights reserved.