Yocto 服务未启动

Yocto Service Not Starting

我花了很长时间才到这里。我有一个自定义应用程序保存在 GitLab 中并在我的 VM 中构建。我正在尝试将我的应用程序添加到我的 Linux 构建中并将其作为服务启动。我的问题是服务没有启动,我在目标设备上找不到我的代码。

在我的 applicaiton.bb 中有以下行,当我使用 bitbake 时,我可以确认正在构建应用程序。

IMAGE_INSTALL_append = " helloworld "

我的自定义层应用文件夹布局如下。

我更新了我的应用程序 bb 文件以包含服务文件夹和文件。服务文件非常基础。

 LICENSE = "MIT"
    LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
    
    FILESEXTRAPATHS:prepend := "${THISDIR}/files/src:${THISDIR}/files/src/app:${THISDIR}/files/services:"
    
    SRC_URI = "file://src \
          file://src/app \
          "
          
    SRC_URI += "file://helloworld.service \
            "
    
    S = "${WORKDIR}/src"
    
    inherit systemd
    SYSTEMD_AUTO_ENABLE = "enable"
    SYSTEMD_SERVICE_${PN} = "helloworld.service"
    
    SRC_URI_append = " file://helloworld.service "
    FILES_${PN} += "${systemd_unitdir}/system/helloworld.service"
    
    do_install_append() {
      install -d ${D}/${systemd_unitdir}/system
      install -D -m 0644 ${WORKDIR}/helloworld.service ${D}${systemd_unitdir}/system
  sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/helloworld.service
    }

服务文件

[Unit]
Description=Example service

[Service]
Type=forking
ExecStart=@BINDIR@/helloworld

[Install]
WantedBy=multi-user.target

我已经在 GitHub 中搜索了添加了 SYSTEMD_AUTO_ENABLE 和服务的 bb 文件示例。他们没有做任何特别的事情,我很困惑为什么我的服务没有启动,或者没有出现在我的设备上。

更新: 代码在设备上,但安装在 /lib/systemd/system/helloworld.service

服务文件正在ExecStart=/usr/bin/helloworld中查找 这看起来很容易修复,我会更新!

更新 2: 我添加了 SED 命令,该命令应该将文件从 systemd 文件夹复制到 bin 文件夹。我还没有让这个命令正常工作。

终于找到答案了!

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

FILESEXTRAPATHS:prepend := "${THISDIR}/files/src:${THISDIR}/files/src/app:${THISDIR}/files/services:"

SRC_URI = "\
    file://helloworld.service \
    file://helloworld.c \
    "

S = "${WORKDIR}"

inherit systemd
SYSTEMD_AUTO_ENABLE = "enable"
SYSTEMD_SERVICE_${PN} = "helloworld.service"

do_compile () {
    ${CC} ${LDFLAGS} helloworld.c -o helloworld
}

do_install_append() {
  install -d ${D}${bindir}
  install -m 0755 ${WORKDIR}/helloworld ${D}${bindir}

  install -d ${D}${systemd_unitdir}/system
  install -m 0644 ${WORKDIR}/helloworld.service ${D}${systemd_unitdir}/system
  sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/system/helloworld.service
}