systemd yocto配方为现有的可执行文件

时间:2017-11-10 11:42:39

标签: yocto bitbake openembedded

我正在寻找一个用于在yocto中启用systemd配方的模板配方。可执行文件已由yocto提供的配方安装。此配方的目标是在启动时提供make /usr/bin/btattach

首先,我在相应配方目录的图层中创建了以下结构:

btattach-systemd/
|-- files
|   `-- btattach.service
`-- btattach-systemd.bb

食谱的内容

SUMMARY = "Writes patterns to the fb device"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit systemd

REQUIRED_DISTRO_FEATURES= "systemd"

SRC_URI = "file://btattach.service"
S = "${WORKDIR}"

do_install () {    
    install -m 0644 ${WORKDIR}/btattach.service.service ${D}${sysconfdir}/systemd/system
 }

SYSTEMD_SERVICE_${PN} = "btattach.service"

除此之外,图像配方中的IMAGE_INSTALL已使用btattach-systemd正确扩展。

bitbake btattach-systemd运行正常,但在尝试构建完整图像时,整个图像位于do_rootfs步。错误:

 * opkg_solver_install: Cannot install package btattach-systemd.                                    

关于bug在哪里的想法?

3 个答案:

答案 0 :(得分:1)

我认为配方应该是这样的(省略摘要,许可证,许可证校验和,并假设二进制包被称为“btattach”):

SRC_URI = "file://btattach.service"
SYSTEMD_SERVICE_${PN} = "btattach.service"

inherit systemd

do_install_append() {
    install -d ${D}${systemd_unitdir}/system
    for service in ${SYSTEMD_SERVICE_${PN}}; do
        install -m 0644 ${WORKDIR}/${service} ${D}${systemd_unitdir}/system/

        sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/system/${service}
    done
}

RDEPENDS_${PN} = "btattach"

答案 1 :(得分:1)

我很抱歉没有对您的问题发表评论,因为我对此没有声誉。此外,LetoThe2nd answer比我的更完整,但是可以通过以下方式快速解决问题:

在我看来,您正在安装'btattach.service.service'而不是'btattach.service'

答案 2 :(得分:1)

假设.service文件是正确的,我对Yocto配方的看法以及它可能失败的原因是因为btattach.service文件不包含在安装中,这是最后一行所做的。

您是否已确保事先bitbake btattach.systemd -c cleanallbitbake btattach.systemd -c cleanstate,因为我注意到Yocto食谱中的拼写错误为btattach.service.service

SUMMARY = "Writes patterns to the fb device"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit systemd

REQUIRED_DISTRO_FEATURES= "systemd"

SRC_URI = "file://btattach.service"
S = "${WORKDIR}"

do_install () {    
    install -m 0644 ${WORKDIR}/btattach.service ${D}${sysconfdir}/systemd/system
}

SYSTEMD_SERVICE_${PN} = "btattach.service"

FILES_${PN} += "/lib/systemd/system/btattach.service"