【发布时间】:2021-12-30 13:35:52
【问题描述】:
我想在每次系统启动时执行一个存在于 rootfs 中的脚本,以指示成功更新和重置引导加载程序变量。
例如,/etc 中的“custom-script”脚本为:
/etc
----/init.d
-----------custom-script.sh
我做的第一步是在 linux 镜像的 rootfs 中安装这个脚本。我在我的自定义 Yocto 层中创建了一个食谱。 meta-custom\recipes-support\images层目录如下:
.
├── files
│ ├── custom-script.sh
└── core-image-base.bb
core-image-base.bb 是:
DESCRIPTION = "Install script to Rootfs"
SUMMARY = "Install script to Rootfs and run after boot"
LICENSE = "CLOSED"
SRC_URI = "file://custom-script.sh"
do_install_append() {
install -d 644 ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/custom-script.sh ${D}${sysconfdir}/init.d/custom-script.sh
FILES_${PN} = "${sysconfdir}/init.d"
在conf/layer.conf 中我添加了IMAGE_INSTALL_append = " core-image-base"。
现在我想在每次 linux 系统启动时执行这个脚本(因为成功加载了 rootfs)。有人可以帮我完成这个吗?据我了解,我可以使用 systemd 服务来执行此操作,并且每次系统启动时都应执行此服务。任何帮助将不胜感激。
提前致谢。
P.S:我使用的是 Ubuntu 20.04,这是我第一次在 Yocto 中使用带有 Dunfell 版本的 systemd 服务。
【问题讨论】:
-
执行“每次系统启动” 的脚本不是“安装后脚本”。 “安装” 只执行一次。如果有(之前的)“成功更新”,那么您将需要一种向系统提供该信息的方法。
-
好的,但是我们可以使用 systemd 服务来执行脚本吗?如果没有,那您能告诉我如何实现吗?
-
目的是确保一旦更新的 Linux 操作系统启动并运行,我需要执行一个禁用“bootcounter”值的脚本。如果每次成功加载 rootfs 时都没有调用此脚本,则 bootcounter 值会增加,并在几次重新启动后初始化回滚。
-
安装后脚本,顾名思义,用于在将软件包放入根文件系统或安装软件包后执行一些操作。安装后脚本不执行引导脚本执行。我建议你参考askubuntu.com/questions/919054/…
-
请参考wiki.yoctoproject.org/wiki/Cookbook:Appliance:Startup_Scripts了解如何添加自定义启动脚本
标签: ubuntu embedded-linux yocto systemd