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/bash

echo "Try to give permission......"

while true
do
	# 先判断设备是否存在
	if [ -e /dev/my_uart ];then
		# 存在则直接给权限
		sudo chmod 777 /dev/my_uart
		# $? 表示上一个命令的返回值,如果为0表示上一个命令执行成功
		if [ $? -eq 0 ];then
			echo "Successful!"
			# 给完权限直接推出
			exit 0
		else
			echo "Failed to give permission"
		fi
	else
		echo "Device not found!"
	fi
	sleep 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,保存退出重启即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值