使用Yocto Dunfell在启动时运行应用程序

使用Yocto Dunfell在启动时运行应用程序,yocto,beagleboneblack,bitbake,openembedded,Yocto,Beagleboneblack,Bitbake,Openembedded,我已经用c编写了一个toggle.c应用程序,用于切换BeagleBone黑板的GPIO。实际上,它会导致外部LED闪烁 我希望准备一个Yocto图像,其中包括应用程序的可执行二进制文件,它在启动时自动启动应用程序,从而导致LED闪烁 我遵循了我在网上找到的例子。我的Yocto映像包括/usr/bin中应用程序的编译二进制文件。我可以从命令行执行它,一切正常 但是我的Yocto生成的图像不会自动启动二进制文件。启动Yocto生成的Linux映像时,LED不闪烁 我的工作流程是: 创建一个新层

我已经用c编写了一个toggle.c应用程序,用于切换BeagleBone黑板的GPIO。实际上,它会导致外部LED闪烁

我希望准备一个Yocto图像,其中包括应用程序的可执行二进制文件,它在启动时自动启动应用程序,从而导致LED闪烁

我遵循了我在网上找到的例子。我的Yocto映像包括/usr/bin中应用程序的编译二进制文件。我可以从命令行执行它,一切正常

但是我的Yocto生成的图像不会自动启动二进制文件。启动Yocto生成的Linux映像时,LED不闪烁

我的工作流程是:

  • 创建一个新层
  • 新层有一个自动生成的“recipes example”目录
  • 在“recipes example”下面有一个我重命名为“toggle”的目录
  • 在“切换”中有配方切换_0.1.bb
  • 我在“toggle”中创建了一个名为“files”的新目录,其中存储了toggle.c和toggle.service文件
toggle.service文件

[Unit]
Description= A start script from a toggle.c program

[Service]
ExecStart=/usr/bin/toggle

[Install]
WantedBy=multi-user.target
切换_0.1.bb

DESCRIPTION = "This is a program to toggle GPIO  on/off at an interval of 1s"
PRIORITY = "optional"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://toggle.c"
S = "${WORKDIR}"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} toggle.c -o toggle
}
do_install() {
install -d ${D}${bindir}
install -m 0755 toggle ${D}${bindir}
}

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

SRC_URI_append = " file://toggle.service "
FILES_${PN} += "${systemd_unitdir}/system/toggle.service"

do_install_append() {
  install -d ${D}/${systemd_unitdir}/system
  install -m 064 ${WORKDIR}/toggle.service ${D}/${systemd_unitdir}/system
}
我用不同的图像配方做了同样的尝试:核心图像最小、核心图像基础、核心图像完整cmdline。尽管如此。它们不保存用于在启动时执行应用程序的普通Linux文件,如/etc/init.d/rc.local


请告诉我一个对我有用的解决方案。非常感谢。

我终于找到了问题的解决方案,但我使用了更新rc.d类,而不是systemd。出于某种原因,即使我通过使用
DISTRO\u FEATURES\u append=“systemd”
修改
conf/local.conf
systemd
添加到我的映像中,我仍然无法访问用于在Yocto项目映像中调试的
systemctl
命令

我的工作解决方案是:

DESCRIPTION = "This is a recipe to launch executable program out of toggle.c at start up."
PRIORITY = "optional"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://toggle.c"
S = "${WORKDIR}"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} toggle.c -o toggle
}
do_install() {
install -d ${D}${bindir}
install -m 755 toggle ${D}${bindir}
install -d ${D}${sysconfdir}/init.d
install -m 755 toggle ${D}${sysconfdir}/init.d/toggle
}
 
inherit update-rc.d
 
INITSCRIPT_NAME="toggle"
INITSCRIPT_PARAMS= "defaults 10"

有关
update rc.d
和服务的更多信息,我建议您检查。

systemd服务多年来一直是解决此问题的常规解决方案:您只需找出哪些细节出了问题(文件是否安装在正确的位置?是否可以使用systemctl启动服务?系统日志中是否有任何内容?)首先,我可能会检查文件权限,但:
064
可能不符合您的要求。我无法使用“systemctl”启动服务,因为我使用的命令不存在(core image base,core image minimal,core image full cmdline)。对于初学者的问题,我真的开始了。我在哪里可以找到系统日志?感谢您提供有关文件权限的提示。您是否有发行版功能\u append=“systemd”以及可能的发行版功能\u BACKFILL\u confered+=“sysvinit”在您的conf/local.conf中?如果systemd安装在映像上,您应该可以访问systemctl、journalctl,并且应该使用它们进行进一步的调试(如果需要)。您还必须将
VIRTUAL-RUNTIME\u init\u manager=“systemd”
添加到local.conf中,以便使用systemd。