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

相关推荐
pilifeng142 分钟前
Ubuntu Linux 目录结构详解
linux·ubuntu
电棍2331 小时前
ubuntu网卡失效
linux
律宏阔1 小时前
VMware 能识别 USB 设备,但无法连接(灰色)
linux
Rabitebla1 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
AR-26710-1 小时前
Linux Day9——复习第一部分(实操产出)
linux
天天喝旺仔3 小时前
Linux 性能排查实战:用 perf、strace 与火焰图定位 CPU、内存与 IO 瓶颈
linux·性能优化·运维开发
LuminousCPP3 小时前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
第十人i3 小时前
Linux 系统初始化配置清单:新服务器快速部署
linux·服务器
LongRunning3 小时前
【Linux】RK3568-OpenCV+YOLO(七)
linux
j7~3 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程