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编译即可

相关推荐
薛定谔的悦2 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
新时代牛马5 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
Julien20045 小时前
控制 SELinux 文件上下文
linux·运维·服务器
sulikey6 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
MayZork8 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows
zbyyd9 小时前
Linux 进程间通信学习笔记
linux·笔记·学习
w2005122412 小时前
Pod管理
linux·服务器·云原生·容器·k8s·podman
chen<>13 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C14 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
库玛西14 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https