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”在初始化设备时在做什么,显然我的脚本没有在做什么,我如何将其添加到脚本中以自动执行该操作?