初始化USB设备

时间:2019-06-11 22:58:52

标签: linux bash tty

Ubuntu 16.04LTS服务器上的USB GPIO板。系统重新引导时,分配给设备的tty是随机的且不可预测。我发现初始化设备的唯一成功方法是使用“ screen / dev / ttyACM0”或1或事实证明​​与之连接。一旦完成,我的bash脚本就可以在设备上正常工作,但是除非我第一次使用screen命令手动连接到设备,否则它们将无法工作。我正在尝试使启动过程自动化,因此不必执行手动屏幕命令。任何建议都将不胜感激。

ETA:这里确实有两个问题。一个正在查找我的设备(它是哪个ttyACM#?用于另一个线程!)。我的重要问题是设备的初始化。这是我脚本的相关部分:

#!/bin/bash
ttyID=ttyACM0
stty -F /dev/${ttyID} -cstopb -crtscts cs8 9600 #CONFIGURE SERIAL PORT
exec 3</dev/${ttyID}                     #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat &             #FD 3 TO FILE, persist
PID=$!                                   #SAVE PID TO KILL CAT
#  echo "Process ID is $PID"
printf "ver\r" > /dev/${ttyID}      #SEND COMMAND STRING TO SERIAL PORT
sleep .2s                           #WAIT FOR RESPONSE
kill $PID >/dev/null 2>/dev/null    #KILL CAT PROCESS
# 2>/dev/null directs stderror to /dev/null
exec 3<&- 2>/dev/null               #FREE FD 3
# output will have echo of command plus blank lines, value
# we need is on second line, but first char is garbage
# GRAB CAPTURED DATA, use only line 2, remove first char
RESULT=$(cat /tmp/ttyDump.dat)
SIZE=${#RESULT}
echo "Length is $SIZE"
echo "Result is $RESULT"

此脚本运行无错误,但长度值为零,结果为空白,直到我首先进入终端并输入“ screen / dev / ttyACM0”,然后按回车键一次或两次并键入“ ver”,按回车键并获取返回设备的版本。现在,上面粘贴的我的脚本可以正常工作(只要不重新启动计算机或拔下USB即可继续工作),长度返回一个值,结果带有版本号。

我的问题是:“ screen / dev / ttyACM0”在初始化设备时在做什么,显然我的脚本没有在做什么,我如何将其添加到脚本中以自动执行该操作?

0 个答案:

没有答案