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

相关推荐
hj2862511 小时前
Linux 网络服务综合笔记(概念 + 命令 + 实操案例)2
linux·运维·网络
what_20181 小时前
Linux 磁盘 (查看、划分、inode)
linux·运维·服务器
2739920291 小时前
GDB调试(Linux)
linux
凡人叶枫2 小时前
Effective C++ 条款23:宁以 non-member、non-friend 替换 member 函数
linux·开发语言·c++·嵌入式开发
不会C语言的男孩2 小时前
Linux 系统编程 · 第 4 章:文件属性与元数据
linux·c语言·开发语言
小生不才yz2 小时前
Shell脚本精读 · S02-03 | 词拆分、通配符与未加引号的变量
linux
2601_961845422 小时前
法考真题及答案解析|历年真题|资料已整理
linux·windows·ubuntu·macos·centos·gnu
A_humble_scholar2 小时前
Linux(七)调度器:从硬件矛盾到进程切换的底层逻辑
linux·服务器·网络
AOwhisky3 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
零陵上将军_xdr3 小时前
Shell脚本入门:从Hello World到变量的灵活运用
linux