Petalinux新建自动脚本启动

简介

在linux系统中主要使用SystemD执行初始化和管理系统服务。SystemD 是一个现代的初始化系统,在2018.3版本之后,通常使用SystemD来代替原有的SystemV方式了。它引入了一种更高级的方式来管理系统服务。它以守护进程的形式运行,通常由 PID 1 启动。SystemD 使用单元(unit)来描述和管理服务,这些单元可以是服务单元、目标单元、设备单元等。每个单元都有一个配置文件,通常位于 /etc/systemd/system/ 目录中。SystemD 支持并行启动和停止服务,提供更好的性能和并发性,同时还具有更丰富的功能,如自动重启、依赖关系管理等。

SystemD 管理运行级别(runlevel)的概念已被废弃,而由 "targets" 来代替,使系统的状态切换更加灵活和简单。不同的 target 表示系统的不同状态,例如多用户图形模式、单用户模式、网络服务启动等。每个 target 包含了一组单元(units)的信息,这些单元是系统服务和其他配置项。当你切换到特定的 target 时,SystemD 将启动或停止与该 target 相关的单元。常见的target如下:

Target 描述 对应旧 runlevel
graphical.target 完整图形界面环境 5
multi-user.target 多用户命令行环境 3
rescue.target 单用户救援模式 1
emergency.target 紧急救援模式,只提供最小 shell -
default.target 默认启动目标,通常是 graphical.target -

SystemD targets 可以通过 "target units" 来定义,这些 units 通常存储在 /usr/lib/systemd/system/ 目录或 /etc/systemd/system/ 目录中。你可以使用 systemctl 命令切换到不同的 target。例如,要切换到多用户图形模式,可以运行:
sudo systemctl isolate graphical.target

在petalinux下新增自启动服务

使用petalinux 2022.2版本进行测试,用户可以通过以下几步轻松实现

  • 使用命令创建一个应用框架
bash 复制代码
petalinux-create -t apps --template install -n usr-init --enable
  • 修改自启动脚本
    在位置./project-spec/meta-user/recipes-apps/usr-init/files新增usr-init.service文件如下:
bash 复制代码
[Unit]
Description=myapp-init
  
[Service]
ExecStart=/usr/bin/myapp-init
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

修改usr-init.bb文件如下:

bash 复制代码
#
# This file is the usr-init recipe.
#

SUMMARY = "Simple usr-init application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

inherit  systemd

SRC_URI = "file://usr-init \
		   file://usr-init.service \
	"

do_install() {
		bbplain "BPN = ${BPN}"
		bbplain "PN = ${PN}"
		bbplain "D = ${D}"
		bbplain "WORKDIR = ${WORKDIR}"
		bbplain "systemd_system_unitdir = ${systemd_system_unitdir}"

		install -d ${D}${bindir}
    	install -m 0755 ${WORKDIR}/usr-init ${D}${bindir}/

		install -d ${D}${systemd_system_unitdir}
    	install -m 0644 ${WORKDIR}/usr-init.service ${D}${systemd_system_unitdir}/
}

FILES_${PN} += "${bindir}/* \
                 ${systemd_system_unitdir}/*"

SYSTEMD_SERVICE:${PN} = "usr-init.service"
SYSTEMD_AUTO_ENABLE:${PN} = "enable"

pkg_postinst_ontarget_${PN}() {
	 echo "usr-init postinstall executed on target"
}

修改完毕后执行petalinux-build编译即可

相关推荐
ltl4 小时前
内核追踪:ftrace、kprobe、uprobe、tracepoint 生产实战
linux
·薯条大王4 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
小小、码农7 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b8 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
沫璃染墨10 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
AIgorithmGEEK10 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
酷可达拉斯11 小时前
Linux操作系统-升级OpenSSH修复漏洞
linux·运维·服务器·云计算
Molesidy12 小时前
【Linux】基于busybox的根文件系统的完善
linux·服务器·嵌入式linux
jufeng130714 小时前
【系列:MiniKV 原理剖析 · 第 6 篇】
linux·软件工程·个人开发·makefile
IT摆渡者15 小时前
ubuntu系统网络问题
linux·运维·ubuntu