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
}
我花了很长时间才到这里。我有一个自定义应用程序保存在 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
}