0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RK3576开发板的应用程序开机自启动方法

ljx2016 来源:ljx2016 作者:ljx2016 2025-05-06 10:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 简要介绍:

Systemd 是一个系统和服务管理器,也是 Linux 操作系统中最常用的【初始化系统】之一。最早是为了代替传统的初始化系统(init)而开发的,相较于传统 init,systemd 具有支持并行启动【可同时启动多个服务】,提高系统启动速度的优势,可以更好地管理系统和服务进程。目前,许多主流 Linux 发行版都采用了 systemd 作为其默认的初始化系统,包括 Ubuntu、Debian、Fedora、CentOS、Arch Linux 等。

1.1 服务单元文件

Systemd通过【服务单元文件】进行开机启动管理。【服务单元文件】指的是在 /etc/systemd/system 目录中以“.service”后缀的结尾的文件。

2. 操作指导:

2.1 配置开机启动服务

建立adb连接(不清楚如何操作,可参考《入门指南/调试方式介绍/adb调试》)

执行命令,切换到板卡环境:

adb shell
wKgZPGgZepKAWwNoAABZ6_UM3RI296.png

首先我们在 /etc/systemd/system/ 创建一个自己的【服务单元文件(Systemd Service)】:myservice.service。

cd /etc/systemd/system/ 
vim myservice.service
wKgZO2gZepKAZiD9AAFZUnaxZSA361.png

注意:Systemd Service 既可位于 /etc/systemd/system(供系统管理员和用户使用),也可以位于/usr/lib/systemd/system(供发行版打包者使用),我们一般使用前者即可。

【服务单元文件】脚本文件以 .service 结尾,由 Unit、Service 和 Install 三个区块组成,以下为 service 文件脚本样例:

wKgZPGgZepKAIC1WAABfwRrU3h8731.png

注意:GUI应用需要在桌面系统启动后再启动ExecStart为指定启动单元的命令或者脚本,是配置文件里面最重要的字段,下面来演示如何创建并编辑脚本。

2.2 创建并编辑脚本

创建一个可执行的脚本用于启动Service进程,用户可根据需求向脚本写入需要执行的可执行文件,此处的脚本仅服务于演示需要。

执行命令,先定位到/userdata目录:

cd /userdata

然后通过vim命令,可以创建start_app.sh脚本进行编辑:

touch start.sh
chmod 755 start.sh
vim start_app.sh
wKgZO2gZepKAcvKRAAAf2043sPs804.png

注意:这里简单地通过编译hellomonster.c生成了hellomonster可执行文件,仅为在此进行说明演示。用户需根据自己需求向脚本写入需要执行的可执行文件。

2.3 验证开机启动:

在创建或修改任何【服务单元文件】后,我们必须让 systemd 知道有新的【服务单元文件被创建】或者【服务单元文件被修改】,可通过下方命令让systemd执行查找与同步:

systemctl daemon-reload

此时,我们新的【服务单元文件】应该已经被识别,我们可通过下方命令启动它:

systemctl start myservice.service

最后,告诉 systemd 使能新的【服务单元文件】,以便每次开机启动时它都会启动:

systemctl enable myservice.service

注意:您不会从此命令中获得反馈,因为它所做的只是向 systemd 发送一条消息,告诉它启动您的服务。您键入的命令不会停留以查看接下来会发生什么。

我们可以用以下命令来检查我们的服务,确保它看起来没问题

systemctl status myservice.service
wKgZPGgZepOAXWqgAADnQsf2wzI330.png

Loaded行:配置文件的位置,是否设为开机启动

Active行:表示正在运行

Main PID行:主进程ID

CGroup块:应用的所有子进程

日志块:应用的日志

下面我们进行软件重启,在adb shell环境下输入重启命令

reboot

进入板卡环境

adb shell

最终程序运行后,可在ps -x进程列表中看到进程在启动运行

ps -x
wKgZO2gZepOASFDhAAFzb5qrDrk471.png

注意:要在该程序源代码中加入死循环,否则无法看到该程序正在运行

3. 详细说明

wKgZPGgZepOAT_c3AABfwRrU3h8302.png

3.1 [Unit] 启动顺序与依赖关系

定义控制单元 [Unit]

所有引导过程中 Systemd 要控制的东西都是一个单元。基本的用法如下:

Description:代表整个单元的描述,可根据需要简单填写。

Environment:环境变量或参数(系统环境变量此时无法使用)

After:描述服务类别,表示本服务需要在某服个务(*.service)或多个服务启动后再启动,也可以表示需要在某个服务组(*.target)启动后再启动。【注意:GUI应用需要在桌面系统启动后再启动】

Before:表示本服务需要在某些服务启动之前启动。

Defaultdependencies=no 可以禁止默认依赖的注入,是为了【减少错误】 和 【减少单元配置文件的体量】。

Wants:本单元启动了,它“想要”的单元也会被启动。但是这个单元若启动不成功,对本单元没有影响。

Requires: 这个设定并不能控制启动顺序,它表示"强依赖"关系,即如果该服务启动失败或异常退出,则本单元也无法启动,所以不建议使用这个字段。

OnFailure:若本单元启动失败了,那么启动这个单元作为折衷。

3.2 [Service] 启动行为

定义服务本体 [service]

在定义完了 Systemd 用来识别服务的单元后,我们来定义服务本体。基本的用法如下:

Type:服务的类型,各种类型的区别如下所示

simple:默认,这是最简单的服务类型。ExecStart字段启动的进程为主进程

forking:ExecStart 字段将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程(例如用 shell 脚本启动服务进程)。

oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务。

dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。

ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。

ExecStop:在输入的命令是stop时候执行的命令,要求同上。

ExecReload:这个不是必需,如果不写则你的service就不支持restart命令。ExecStart和ExecStop是必须要有的。

3.3 [Install] 安装服务

安装服务 [install]

服务编写完之后还需要被systemd装载,定义安装单元各个字段如下:

WantedBy:设置服务被谁装载,一般设置为multi-user.target

执行以下命令可查看multi-user.target所包含的所有服务

systemctl list-dependencies multi-user.target
wKgZO2gZepOAaHNvAAFdb4oe-jY703.png

3.4 关于TARGET

Target 的含义是【服务组】,如 WantedBy=multi-user.target 指的是该服务所属于 multi-user.target。当执行以下命令时,xxx.service 的符号链接就会被创建在 /etc/systemd/system/multi-user.target 目录下。

systemctl enable xxx.service

可以通过以下命令查看系统默认启动的 target

systemctl get-default

一般为 multi-user 或者是 graphical。因此配置好相应的 WantedBy 字段,可以实现服务的开机启动。

注意:常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    26

    文章

    6152

    浏览量

    113954
  • rk3576
    +关注

    关注

    1

    文章

    230

    浏览量

    1394
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何移植EtherCAT Igh--基于米尔RK3576开发板

    本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于瑞芯微RK3576开发板)的端移植EtherCATIgh方案的
    的头像 发表于 09-26 08:04 9503次阅读
    如何移植EtherCAT Igh--基于米尔<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>

    【作品合集】米尔RK3576开发板测评

    米尔RK3576开发板测评作品合集 产品介绍: RK3576 是瑞芯微一款面向AI市场推出的高性能处理器,它配备了四核Cortex-A72和四 核Cortex-A53 的 CPU,集成了6TOPS
    发表于 09-11 10:19

    基于RK3576开发板的人脸识别算法

    RK3576开发板展示人脸识别算法例程和API说明
    的头像 发表于 05-07 16:48 2508次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的人脸识别算法

    基于RK3576开发板的RTC使用说明

    文章主要展示RK3576开发板的RTC信息和快速上手例程
    的头像 发表于 05-07 15:04 1827次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的RTC使用说明

    基于RK3576开发板的PWN使用说明

    RK3576开发板使用PWN教程及Demo
    的头像 发表于 05-07 14:07 1954次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的PWN使用说明

    基于RK3576开发板的TF卡槽使用说明

    RK3576开发板使用TF卡槽
    的头像 发表于 05-07 09:24 1467次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的TF卡槽使用说明

    基于RK3576开发板的PCIE固态硬盘使用说明

    RK3576开发板的PICE固态硬盘使用方法
    的头像 发表于 05-06 17:33 1799次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的PCIE固态硬盘使用说明

    基于RK3576开发板的WDT看门狗使用说明

    RK3576开发板的WDT使用说明
    的头像 发表于 05-06 17:15 1041次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的WDT看门狗使用说明

    基于RK3576开发板的HDMI-OUT使用说明

    RK3576开发板的HDMI-OUT使用说明
    的头像 发表于 05-06 16:48 1125次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的HDMI-OUT使用说明

    基于RK3576开发板的扬声器和耳机使用说明

    RK3576开发板的扬声器和耳机使用说明
    的头像 发表于 05-06 16:36 1451次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的扬声器和耳机使用说明

    基于RK3576开发板的MIPI-DSI使用

    MIPI DSI接口是由MIPI联盟下的Display工作组指定的DSI(Display Serial Interface)的接口标准。rk3576开发板使用mipi-dsi教程
    的头像 发表于 05-06 16:11 1005次阅读
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>的MIPI-DSI使用

    RK3576开发板技术分享 | Weston 配置技巧:定制你的桌面体验!

    RK3576开发板技术分享 | Weston 配置技巧:定制你的桌面体验!
    的头像 发表于 03-07 10:17 1330次阅读
    <b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>技术分享 | Weston 配置技巧:定制你的桌面体验!

    迅为RK3576开发板Android 多屏显示

    迅为RK3576开发板Android 多屏显示
    的头像 发表于 01-16 16:58 1655次阅读
    迅为<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>Android 多屏显示

    迅为RK3576开发板核心与底板接口硬件介绍

    迅为RK3576开发板核心与底板接口硬件介绍
    的头像 发表于 01-14 15:15 2423次阅读
    迅为<b class='flag-5'>RK3576</b><b class='flag-5'>开发板</b>核心<b class='flag-5'>板</b>与底板接口硬件介绍

    Linux系统更换开机logo方法教程,触觉智能RK3562开发板演示

    本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK357
    的头像 发表于 01-06 10:53 1276次阅读
    Linux系统更换<b class='flag-5'>开机</b>logo<b class='flag-5'>方法</b>教程,触觉智能<b class='flag-5'>RK</b>3562<b class='flag-5'>开发板</b>演示