tło
Próbuję połączyć się z urządzeniem za UART
pomocą kabla micro-USB oraz GNU screen
z systemu Ubuntu i OSX .
Zarówno w systemie Ubuntu, jak i OSX mogę uzyskać najnowsze połączenie szeregowe za pomocą następującego polecenia, które uruchomiłem zaraz po podłączeniu urządzenia i włączeniu go.
ls -t /dev/tty* | head -n 1
Na Ubuntu dostaję (tak naprawdę jest to wyjście ll
i -n 3
dzięki temu mogę lepiej zobaczyć, co pokazano)
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
a pierwszy element jest poprawny (tzn. mogę screen /dev/ttyACM0 115200
).
Na Mac , zamiast, mam to
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
a pierwszy element jest nieprawidłowy (nie mogę się z nim połączyć), podczas gdy działający jest drugi (i musiałem dwukrotnie wyłączyć i włączyć urządzenie, ponieważ po raz pierwszy nie było żadnego /dev/tty.usbmodemfd121
).
Pytanie
Moje pytanie jest łatwe. Jak uzyskać automatyczny dostęp do prawidłowego połączenia szeregowego? Staram się unikać sprawiania zbyt wielu kłopotów końcowemu użytkownikowi próbującemu rozwiązać ten problem automatycznie.
Odpowiedź
To jest mój ostatni skrypt :)
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
/dev/ttys004
także przed podłączeniem urządzenia (od czasu, kiedy byłem pewien, byłem pewien, że zostało wygenerowane przez podłączenie urządzenia)! Czy masz jakieś sugestie (sh
fragment kodu) dotyczące wykrycia nowego aktywnego połączenia szeregowego?