Conecte-se à porta serial direita no Unix

0

Antecedentes

Estou tentando me conectar a um dispositivo usando UART através de um cabo micro-USB e GNU screen do Ubuntu e OSX .

No Ubuntu e OSX eu posso obter a conexão serial mais recente com o seguinte comando, que executei logo depois de ter conectado meu dispositivo e ligado.

ls -t /dev/tty* | head -n 1

Em Ubuntu eu recebo (esta é realmente a saída de ll e -n 3 para que eu possa ver melhor o que é mostrado)

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

e o primeiro item está correto (ou seja, eu posso screen /dev/ttyACM0 115200 ).

Em Mac , em vez disso, obtenho este

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

e o primeiro item está errado (não consigo me conectar a ele), enquanto o primeiro é o segundo (e eu tive que desligar e ligar o aparelho duas vezes, já que na primeira vez não havia nenhum /dev/tty.usbmodemfd121 em todos).

Pergunta

Minha pergunta é fácil. Como posso acessar automaticamente a conexão serial correta ? Eu estou tentando evitar dar muitos problemas para o usuário final tentando resolver esse problema automaticamente.

Resposta

Este é o meu script 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
    
por Atcold 29.01.2014 / 17:11

2 respostas

0

Uma solução pode ser detectar a conexão serial ativa antes e depois de conectar o micro-usb e, em seguida, conectar-se ao que está presente apenas depois que o micro-usb for conectado. Isso pode ser feito, por exemplo, com um script sh

#!/bin/sh
PATH_SUFFIX="/dev/tty"

read -p "Be sure the mini usb adapter is unplugged then press ENTER" temp
BEFORE='ls -1 ${PATH_SUFFIX}* '
read -p "Now plug device and then press ENTER" temp
# sleep 2 seconds to be sure the filedevise is created
sleep 2
AFTER='ls -1 ${PATH_SUFFIX}*'

OLD_IFS=$IFS

IFS='
'

for file in $AFTER ; do
    if case ${BEFORE} in *"${file}"*) false;; *) true;; esac; then
        FOUND=$file
    fi
done

IFS=$OLD_IFS

#Now do whatever with FOUND device
echo $FOUND
    
por 29.01.2014 / 17:20
0

Você pode querer verificar a configuração de uma regra do udev para criar um link simbólico com um nome específico para este dispositivo serial.

Supondo que você possa identificar o dispositivo por fornecedor ou número de série.

Isso deve ajudar:

link

    
por 30.01.2014 / 11:21