Fondo
Estoy intentando conectarse a un dispositivo que utiliza UART
a través de un cable micro-USB y GNU screen
desde Ubuntu y OSX .
Tanto en Ubuntu como en OSX puedo obtener la conexión en serie más reciente con el siguiente comando, que ejecuté justo después de conectar mi dispositivo y encenderlo.
ls -t /dev/tty* | head -n 1
En Ubuntu obtengo (esto es en realidad la salida de ll
y -n 3
así puedo ver mejor lo que se muestra)
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
y el primer elemento es correcto (es decir, puedo screen /dev/ttyACM0 115200
).
En Mac , en cambio, obtengo esto
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
y el primer elemento está mal (no puedo conectarme a él) mientras que el que funciona es el segundo (y tuve que apagar y encender mi dispositivo dos veces, ya que la primera vez no había ninguno /dev/tty.usbmodemfd121
).
Pregunta
Mi pregunta es facil ¿Cómo puedo acceder automáticamente a la conexión en serie correcta ? Estoy tratando de evitar dar demasiados problemas al usuario final que intenta solucionar este problema automáticamente.
Responder
Este es mi guión final :)
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
hecho antes de conectar mi dispositivo (desde su marca de tiempo, estaba seguro de que se generó conectando mi dispositivo)! ¿Tiene alguna sugerencia (sh
fragmento de código) sobre la detección de la nueva conexión en serie activa?