инициализировать USB-устройство - PullRequest
0 голосов
/ 12 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...