USB-плата GPIO на сервере Ubuntu 16.04LTS.Когда система перезагружается, 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" выполняет инициализацию устройства, что, очевидно, не выполняется моим сценарием, и как я могу добавить это в свой сценарий, чтобы автоматизировать его выполнение?