欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > JetsonNano、Ubuntu开机自启动脚本编写(一遍过)

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

2025/10/5 9:00:29 来源:https://blog.csdn.net/S13352784013/article/details/142339175  浏览:    关键词: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,保存退出重启即可。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词