七、Yocto使用systemd设置开机自启动程序

文章目录

  • Yocto使用systemd设置开机自启动程序
    • 一、 systemd介绍及service设置
    • 二、yocto集成

Yocto使用systemd设置开机自启动程序

本篇文章为基于raspberrypi 4B单板的yocto实战系列的第七篇文章:
一、yocto 编译raspberrypi 4B并启动
二、yocto 集成ros2(基于raspberrypi 4B)
三、Yocto创建自定义的layer和image
四、Yocto创建静态IP和VLAN
五、Yocto集成QT5
六、Yocto给组件分组(packagegroups)
在第五章节的时候我们在rpi-robot的image中集成了qt5组件并且写了一个我们的qt demo程序而且成功在板子上运行,当时是设置了一些环境变量然后手动启动了这个例子,如果这个demo实际上就是我们产品的luncher,那么是不是应该开机以后就应该自动拉起这个程序呢,本章的内容我们就来介绍下怎么使用systemd的service来完成开机自启动这个功能。

一、 systemd介绍及service设置

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置,它的设计目标是,为系统的启动和管理提供一套完整的解决方案。

  1. 常用的systemd systemctl操作指令:

启动某一个服务:

systemctl start <service_name>

停止服务:

systemctl stop <service_name>

重启服务:

systemctl restart <service_name>

查看服务状态:

systemctl status <service_name>

开机自启动一个服务:

systemctl enable <service_name>

禁用一个服务:

systemctl disable <service_name>

查看所有已经启用的服务:

systemctl list-unit-files --type=service | grep enabled
  1. 创建 systemd service 文件
    要想使用systemd自启动服务我们首先需要有一个serivce,一般是一个以.service结尾的文件,比如rpi-robot-luncher.service,内容如下
[Unit]
Description=Initial RPI Robot Luncher
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=-/sbin/rpi_robot_init.sh


[Install]
WantedBy=multi-user.target

字段介绍:

  • Description:描述服务的简短说明。
  • After:指定在哪些系统单元之后启动服务。这里的 multi-user.target 是系统启动后进入多用户环境的目标,这意味着系统已经完成了基本的启动并准备好接受用户登录。
  • ExecStart:指定要执行的脚本或命令的路径。
  • Restart:指定服务退出后的重新启动策略,always 表示总是重新启动。
  • WantedBy:指定服务的启动目标,通常设置为 multi-user.target,表示在多用户环境中启动。

这个service指定了一个启动脚本rpi_robot_init.sh,当这个service启动的时候就会执行这个脚本,我们把之前手动设置环境变量以及启动luncher的命令写到这个脚本里面:

#!/bin/sh

export QT_QPA_PLATFORM=eglfs
export QT_QPA_EGLFS_NO_LIBINPUT=1
qml_luncher

关于systemd的详解可以学习这篇文章: Systemd 入门教程

二、yocto集成

有了rpi-robot-luncher.service和rpi_robot_init.sh这两个文件就能完成我们自启动的目的,下一步就是在layer中找地方集成这两个文件到image中去。

  1. 创建recipes-core/systemd/rpi-robot-init文件夹和rpi-robot-init.bb文件
    rpi-robot-init文件夹下存放rpi-robot-luncher.service和rpi_robot_init.sh
mkdir -p recipes-core/systemd/rpi-robot-init
touch recipes-core/systemd/rpi-robot-init.bb

rpi-robot-init.bb的内容如下:

DESCRIPTION = "The goal is to init rpi robot luncher"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

PV = "1.0"

SRC_URI = " file://rpi-robot-luncher.service \
   		 file://rpi_robot_init.sh \
    "

inherit systemd update-rc.d

SYSTEMD_PACKAGES += "${PN}"
SYSTEMD_SERVICE_${PN} = "rpi-robot-luncher.service"
SYSTEMD_AUTO_ENABLE_${PN} = "enable"

do_install() {
    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
        install -d ${D}${systemd_unitdir}/system
        install -m 0644 ${WORKDIR}/rpi-robot-luncher.service ${D}${systemd_unitdir}/system
        install -d ${D}${base_sbindir}
        install -m 0755 ${WORKDIR}/rpi_robot_init.sh ${D}${base_sbindir}
    else
        install -d ${D}${sysconfdir}/init.d
        install -m 0755 ${WORKDIR}/rpi_robot_init.sh ${D}${sysconfdir}/init.d/
    fi
}

INITSCRIPT_NAME = "rpi_robot_init.sh"

FILES:${PN} = " \
    ${systemd_unitdir}/system/rpi-robot-luncher.service \
    ${base_sbindir}/rpi_robot_init.sh \
    ${sysconfdir}/init.d/rpi_robot_init.sh \
    "
  1. 将rpi-robot-init包添加到我们的上一节创建的packagegroup-rpi-robot.bb里面:
    在这里插入图片描述
    这样就完成了我们systemd自启动luncher的功能了,是不是很简单呢,完整代码见:meta-rpi-robot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/543910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能轨道交通行业周刊-第77期(2024.4.1-4.14)

本期关键词&#xff1a;货车巡检机器人、铁路安全技防、车辆换长、阿里千问、大模型创业 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界…

宝妈如何在家创造收入?五种兼职工作让你轻松赚钱!

许多宝妈为了陪伴孩子成长&#xff0c;毅然选择了全职妈妈的角色&#xff0c;然而&#xff0c;她们内心仍希望能有一份收入&#xff0c;实现经济独立。于是&#xff0c;寻找既能照顾家庭又能赚钱的工作成了她们的迫切需求。 然而&#xff0c;这样的需求也往往让宝妈们成为一些…

鸿蒙语言TypeScript学习第16天:【类】

1、TypeScript 类 TypeScript 是面向对象的 JavaScript。 类描述了所创建的对象共同的属性和方法。 TypeScript 支持面向对象的所有特性&#xff0c;比如 类、接口等。 TypeScript 类定义方式如下&#xff1a; class class_name { // 类作用域 }定义类的关键字为 class&am…

《自动机理论、语言和计算导论》阅读笔记:p139-p171

《自动机理论、语言和计算导论》学习第 7 天&#xff0c;p139-p171总结&#xff0c;总计 33 页。 一、技术总结 1.reversal p139, The reversal of a string a1a2…an is the string written backwards, that is anan-1…a1. 2.homomorphism A string homomorphism is a f…

原理图添加封装

双击器件选中》右边弹出Properties》点击添加封装Footprint 找到你想要的封装&#xff0c;确定即可。

算法设计与分析实验报告c++实现(生命游戏、带锁的门、三壶谜题、串匹配问题、交替放置的碟子)

一、实验目的 1&#xff0e;加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、 编…

Java多线程学习总结

在Java中&#xff0c;多线程编程是一种重要的编程模型&#xff0c;它允许程序同时执行多个任务&#xff0c;从而提高了程序的执行效率和响应速度。 一、基本概念 进程与线程&#xff1a;进程是系统分配资源的基本单位&#xff0c;它包含了程序执行所需的资源&#xff0c;如代码…

Django第三方功能的使用

Django第三方功能的使用 Django REST framework前言1、Django--Restframework--coreapi版文档BUG:AssertionError: coreapi must be installed for schema support.How to run Django with Uvicorn webserver?2、序列化类 Serializer的使用模型序列化类 ModelSerializer的使用…

2024年阿里云优惠券领取攻略

阿里云作为国内领先的云计算服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了众多用户的青睐。为了吸引用户上云&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券。本文将为大家详细解读2024年阿里云优惠券的领券攻略&#xff0c;帮助大家轻…

DDR3的使用(非AXI4总线)

参考小梅哥视频&#xff1a;https://www.bilibili.com/video/BV1va411c7Dz/?p48&spm_id_frompageDriver&vd_sourceaedd69dc9740e91cdd85c0dfaf25304b 一、DDR3的MIG配置 找到MIG的IP核 AXI4 interface不用勾选 不需要兼容以下的FPGA就不用勾选 选择DDR3 1.1 三…

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets 4.1 Clock and clock enables 时钟和时钟使能 Cortex-R52处理器具有一个单一的时钟&#xff0c;驱动着所有的触发器和RAM。各种输入&#xff0c;包括复位输入&#xff0c;都有同步逻辑使它们可以与处理器时钟异步操…

C语言—实现循序表的增删查改

一.正文 嗨嗨嗨&#xff01;大家好&#xff01;今天我为大家分享的是数据结构知识——顺序表。废话不多数&#xff0c;让我们开始今天的知识分享吧。 二.正文 1.1认识数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素…

【学习】软件测试人员使用Loadrunner进行性能测试的优势

在软件测试领域&#xff0c;性能测试是一项至关重要的环节&#xff0c;它关乎到软件系统的稳定性和用户体验。而在这其中&#xff0c;Loadrunner作为一款久经考验的性能测试工具&#xff0c;凭借其独特的优势&#xff0c;成为了众多企业和开发者眼中的“得力助手”。 首先&…

踩了一堆坑,终于掌握了postgreSQL主从流的精髓

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

spring-cloud-alibaba微服务Sentinel

Sentinel 官方网站 sentinel-dashboard-1.8.7.jar包下载地址 在window通过命令行启动&#xff08;java -Dserver.port8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.7.jar&#xff09;&#xff0c;可以通过 -Dserver.port修改控制台的端口 使用的版本最好…

探索ERC20代币:构建您的第一个去中心化应用

下面文章中会涉及到该资源中的代码&#xff0c;如果想要完整版代码可以私信我获取&#x1f339; 文章目录 概要整体架构流程技术名词解释ERC20智能合约web3.js 技术细节ERC20合约部署创建前端界面前端与智能合约互连运行DAPP 小结 概要 在加密货币世界中&#xff0c;ERC20代币…

地球上的七大洲介绍

地球上的七大洲示意图&#xff1a; 1. 亚洲&#xff08;Asia&#xff09;&#xff1a;世界上最大的洲&#xff0c;面积约为44579000平方公里。亚洲地域辽阔&#xff0c;包括从北极圈到赤道的各种气候和地形。它拥有世界上最多的人口&#xff0c;也是世界上一些最古老文明的发源…

【Linux】账号和权限管理

目录 一、用户账号与组账号 二、添加用户账号-useradd 三、修改用户账号的属性-usermod 四、更改用户命令-passwd 五、删除用户账号-userdel 六、添加组账号-groupadd 七、添加删除组成员-gpasswd 八、删除组账号-groupdel 九、查询账号信息-groups、id、finger、w、w…

REINFORCE及进阶算法讲解笔记

REINFORCE 总结 估计VALUE-methods没有在理论上证明收敛&#xff0c;而policy-methods不需要估计value function。 本算法总结了过去的算法&#xff0c;将过去算法作为特例看待&#xff0c;证明了即使是结合函数估计和实际采样的value梯度都可以无偏估计&#xff0c;证明了某种…

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…