JetsonNano、Ubuntu开机自启动脚本编写(一遍过)

本文章的开机自启动脚本结合.service文件和gnome工具来实现。
需要实现的功能大概是:初始化(给端口权限)板卡与下位机(STM32)相连的串口,然后运行相关的python代码。
参考文章:

  1. Jetson nano开机自启动程序-CSDN博客
  2. ubuntu使用bash脚本+gnome实现开机自启python程序和崩溃重启_gnome-session-properties启动不了-CSDN博客
  3. Ubuntu USB设备端口号绑定_ubuntu多usb口排序编号-CSDN博客

端口重命名

板卡接上串口后(假如只接一个),我们会发现大多时候在/dev路径下查找,对应的端口号都是ttyUSB0,但有些时候并不是,可能会被识别成ttyUSB1或者ttyUSB2。由于默认的端口命名可能存在变化,会影响我们对该端口的初始化,所以这里先做个端口重命名

  1. 通过lsusb查看新增的设备,并记录下串口对应的ID,我的是ID 1a86:7523
  2. /etc/udev/rules.d/下创建任意名称的规则配置文件,我的是uart-usb.rules
  3. 编辑内容:`KERNEL==“ttyUSB*”,ATTRS{idVendor}“1a86”, ATTRS{idProduct}“7523”, SYMLINK+=“my_uart”
  4. 重置规则:sudo /etc/init.d/udev restart
  5. 这时再执行lsusb会发现新端口my_uart,这个端口实际上是映射到ttyUSB*上的

service文件编写

端口确定后,我们就可以进行service文件的编写。

  1. 首先创建一个shell脚本文件,名字自定义:uart_init.sh
  2. 编写shell脚本内容:
#!/bin/bashecho "Try to give permission......"while true
do# 先判断设备是否存在if [ -e /dev/my_uart ];then# 存在则直接给权限sudo chmod 777 /dev/my_uart# $? 表示上一个命令的返回值,如果为0表示上一个命令执行成功if [ $? -eq 0 ];thenecho "Successful!"# 给完权限直接推出exit 0elseecho "Failed to give permission"fielseecho "Device not found!"fisleep 0.2
done
  1. 创建一个service文件,名字自定义,我的是start.service
  2. 编写service文件的内容,ExecStart里要填上面那个sh文件的绝对路径
[Unit]
Description=Run a Custom Script at Startup
After=default.target[Service]
ExecStart=/home/username/uart_init.sh[Install]
WantedBy=default.target
  1. 然后给sh和service文件777的权限:
sudo chmod 777 uart_init.sh
sudo chmod 777 start.service
sudo mv start.service /etc/systemd/system
  1. 启动服务函数:(需要输入两次密码)
systemctl daemon-reload 
systemctl enable start.service 
sudo reboot // 重启系统
  1. 系统重启后执行tail -f /var/log/syslog可以发现uart_init.sh脚本进程输出,证明该段代码已经实现开机自启动。
  2. 这时这个脚本运行的就是一种守护进程,可以通过sudo kill -9 <PID>来强制终止这个进程(但一般没必要)

gnome工具使用

上一部分是端口权限初始化的,如果你还有其他操作想开机自启动,然后输出打印到syslog,当然也可以把相关操作代码写到uart_init.sh脚本中。
我这里由于想开机后自动弹出终端,通过远程桌面观察调试,所以在gnome工具里添加另一端脚本代码。

  1. 创建一个脚本,来执行相关操作,我这里交my_run.sh
#!/bin/bash# 获取当前时间并格式化为所需的形式,例如:20240618181233
timestamp=$(date +"%Y%m%d%H%M%S")# 定义文件名
filename="${timestamp}.txt"# 输出 "nihao" 到文件中
# 如果运行的是python程序,文件最好都写绝对路径
$(which python) main.py > "$filename"echo "nihao" > "$filename"# 提示信息,显示写入的文件名
echo "内容已写入文件: $filename"
  1. 终端输入gnome-session-properties
  2. 添加对应的指令,我的是bash my_run.sh,保存退出重启即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

https的连接过程

根证书: 内置在操作系统和浏览器中,可手动添加,下级是中间证书或服务器证书,只有当中间证书或服务器证书关联到已存在的根证书时,中间证书或服务器证书才视为有效 中间证书: 位于根证书和服务器证书之间,他们之间也可以没有中间证书,作用是对根证书增加一个下级,方便管理,由根…

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章&#xff1a; 都2023年了&#xff0c;Servlet还有必要学习吗&#xff1f;一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

yolov8旋转目标检测之绝缘子检测-从数据加载到模型训练、部署

YOLOv8 是 YOLO (You Only Look Once) 系列目标检测算法的最新版本&#xff0c;以其高速度和高精度而著称。在电力行业中&#xff0c;绝缘子是电力传输线路上的重要组件之一&#xff0c;它们用于支撑导线并保持电气绝缘。由于长期暴露在户外环境中&#xff0c;绝缘子容易出现损…

【JavaEE】多线程编程引入——认识Thread类

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能帮到你&#xff01; 目录 引入&#xff1a; 一&#xff1a;Thread类 1&#xff1a;Thread类可以直接调用 2&#xff1a;run方法 &a…

【25.6】C++智能交友系统

常见错误总结 const-1 如下代码会报错 原因如下&#xff1a; man是一个const修饰的对象&#xff0c;即man不能修改任何内容&#xff0c;但是man所调用的play函数只是一个普通的函数&#xff0c;所以出现了报错。我们需要在play函数中加上const修饰&#xff0c;或者删除man对…

【计算机网络 - 基础问题】每日 3 题(十八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

SpringBoot环境配置(Spring Boot Profile)

一、介绍 在Spring Boot中&#xff0c;spring.profiles 配置用于定义不同环境下的配置文件。这使得应用可以在不同的环境中使用不同的配置&#xff0c;比如开发环境、测试环境和生产环境等。这种方式可以避免在代码中硬编码配置信息&#xff0c;并且能够更灵活地管理应用的环境…

SpringBootWeb增删改查入门案例

前言 为了快速入门一个SpringBootWeb项目&#xff0c;这里就将基础的增删改查的案例进行总结&#xff0c;作为对SpringBootMybatis的基础用法的一个巩固。 准备工作 需求说明 对员工表进行增删改查操作环境搭建 准备数据表 -- 员工管理(带约束) create table emp (id int …

计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

选题背景‌&#xff1a; 随着城市化进程的加快&#xff0c;公共交通成为城市居民出行的重要方式。然而&#xff0c;传统的公交站点线路查询方式往往依赖于纸质地图或简单的电子显示屏&#xff0c;查询效率低下且信息更新不及时。因此&#xff0c;开发一个功能全面、易于使用的…

OpenMV学习第一步安装IDE_2024.09.20

用360浏览器访问星瞳科技官网&#xff0c;一直提示访问不了。后面换了IE浏览器就可以访问。第一个坑。

基于springboot的智慧社区微信小程序

文未可获取一份本项目的java源码和数据库参考。 本课题研究目标 本文主要对小区生活服务平台的功能和非功能需求进行了分析&#xff0c;系统除了提供物业保修、小区资讯、投诉留言、常用电话等基础功能外&#xff0c;为了满足用户的多样化需求&#xff0c;还提供邻里圈子和有…

238 除自身以外数组的乘积

解题思路&#xff1a; \qquad 这道题要求在 O ( n ) O(n) O(n) 时间内解决&#xff0c;但是不能使用除法。仅使用乘法的话&#xff0c;看上去很难在一次遍历中得出想要的结果&#xff0c;但是没关系&#xff0c;一次遍历不行的话那就试试两次、三次&#xff0c;重要的是分析在…

Python--TCP/UDP通信

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求&#xff0c;并与之建立连接&#xff0c;然后接收和发送数据。 创建套接字&#xff1a;首先&#xff0…

【数据库】常用数据库简介

目录 &#x1f354; 常用的关系型数据库 &#x1f354; Mysql简介 &#x1f354; SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 &#x1f354; DDL语句 对数据库的操作 对数据表的操作 &#x1f354; DML语句 插入数据 insert into 修改数据 update 删除数…

css基础知识笔记

一言&#xff1a; “放任误解就是撒谎。” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;CSS基础教程0.文本样式基础1. CSS选择器2. CSS布局技巧3. 响应式设计4. Emmet语法 总结 前言 写在开始&#xff1a; 今天来看一眼CSS基础知识。 好几天没更新了 先更一篇 文章有…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

&#x1f310;在Java编程中&#xff0c;break和continue是两个重要的控制流语句&#xff0c;它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为&#xff0c;但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句&#xff0c;并使用流程…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

系统架构设计师 需求分析篇一

&#x1f4d8; 结构化分析SA 思想 自顶向下&#xff1a;像剥洋葱一样&#xff0c;层层深入&#xff0c;大问题拆成小问题&#xff0c;再拆成更小的问题。 核心模型 数据字典 &#x1f4d4;&#xff1a;记录数据元素的点点滴滴&#xff0c;从属性到使用方式&#xff0c;无所…

Spring自定义参数解析器

在这篇文章中&#xff0c;我们认识了参数解析器和消息转换器&#xff0c;今天我们来自定义一个参数解析器。 自定义参数解析器 实现HandlerMethodArgumentResolver的类&#xff0c;并注册到Spring容器。 Component&#xff0f;&#xff0f;注册到Spring public class UserAr…