Фон
Я пытаюсь подключиться к устройству с помощью UART
через кабель micro-USB и GNU screen
от Ubuntu и OSX.
Как в Ubuntu, так и в OSX я могу получить самое последнее последовательное соединение с помощью следующей команды, которую я запустил сразу после подключения устройства и его включения.
ls -t /dev/tty* | head -n 1
На Ubuntu я получаю (это на самом деле вывод ll
и -n 3
поэтому я могу лучше видеть, что показано)
crw-rw---- 1 root dialout 166, 0 Jan 29 10:51 /dev/ttyACM0
crw-rw-rw- 1 root tty 5, 0 Jan 29 10:14 /dev/tty
crw-rw---- 1 root dialout 4, 68 Jan 21 16:19 /dev/ttyS4
и первый пункт правильный (т.е. я могу screen /dev/ttyACM0 115200
).
На Mac вместо этого я получаю это
crw--w---- 1 atcold tty 16, 4 29 Jan 10:56 /dev/ttys004
crw-rw-rw- 1 root wheel 19, 44 29 Jan 10:56 /dev/tty.usbmodemfd121
crw--w---- 1 atcold tty 16, 6 28 Jan 16:21 /dev/ttys006
и первый элемент неверен (я не могу подключиться к нему), в то время как рабочий - второй (и мне пришлось дважды выключить и включить устройство, так как в первый раз не было никакого /dev/tty.usbmodemfd121
в все).
Вопрос
Мой вопрос прост. Как я могу автоматически получить доступ к правильному последовательному соединению? Я стараюсь не создавать слишком много проблем конечному пользователю, пытающемуся решить эту проблему автоматически.
Ответ
Это мой последний сценарий :)
read -p "Connect the switched off board, then press <Enter>" temp
ls /dev/tty* > /tmp/old_tty
read -p "Turn on the board and press <Enter>" temp
ls /dev/tty* > /tmp/new_tty
screen $(comm -13 /tmp/old_tty /tmp/new_tty) 115200