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

相关推荐
Apipi*2 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP3 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC5 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding6 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK6 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2086 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)6 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6256 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
xh didida7 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
zly35008 小时前
centos7 mount设备挂载 /dev/sda1/硬盘挂载
linux·运维·服务器