Como posso corresponder um dispositivo ttyUSBX a um dispositivo serial USB?

13
O driver da opção

corresponde corretamente à identificação USB e carrega o driver para este dispositivo. Por exemplo

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

Ele também cria dispositivos ttyUSBX para gerenciar o hardware

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

No entanto, tenho mais de um dispositivo serial USB e quero saber qual ttyUSB é para qual USBID. Ex. / dev / ttyUSB1 - > 19d2: 0031

Você conhece algum ponto em que eu possa obter essa informação?

    
por seaquest 04.07.2013 / 16:03

5 respostas

8

Dê uma olhada no sistema de arquivos sysfs. Um exemplo para minha serial USB:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

Como você pode ver, ttyUSB0 mapeia para 067b:2303 no meu computador. Outros locais que merecem ser explorados são /sys/class/tty/ . Preste atenção nos links simbólicos.

    
por 04.07.2013 / 17:41
6

Eu tinha um problema semelhante .

Escreva isso para /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

até o final. Reinicie.

Agora você pode usar /dev/ONDA para acessar seu dispositivo ONDA.

Se você quiser que usuários não-root possam usá-los, adicione

, MODE="0666"

ao final de cada linha.

    
por 05.07.2013 / 23:14
3

Você pode tentar ver se seus dispositivos estão registrados em / dev / serial / by-id /

ls -l /dev/serial/by-id

Estes nomes devem ser consistentes e apontarão (link simbólico) para o ttyUSBx correto

    
por 21.07.2017 / 22:09
3

Eu usaria o udev e escreveria algumas regras que criam links simbólicos para os dispositivos.

Para obter informações suficientes para distinguir os dispositivos, experimente algo assim para todos os dispositivos:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk
    
por 05.07.2013 / 16:54
1

Os comandos a seguir me fornecerão a lista de nomes de dispositivos ttyUSB associados a 19d2: 0016 (que é o ID "modo modem" de um dispositivo LTE ZTE MF831, o seu pode ser diferente.):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

Isto irá percorrer uma lista de arquivos com o nome de arquivo ttyUSB *, incluindo links simbólicos, em / sys / bus / usb / devices. Nos resultados, procuramos por um arquivo chamado modalias e procuramos por uma string contendo o ID do fornecedor "v" "19d2" e o ID do produto "p" 0016. Se a saída corresponder, vamos ecoar uma string prefixada com "/ dev / "na frente do USB? nome. Afaik o primeiro ou geralmente o último (maior número) é a porta do modem para dispositivos ZTE. Você pode fazer o eco dos resultados para um arquivo em / tmp / e head -n1 ou tail -n1 as linhas de acordo. Se você tiver hubs, talvez seja necessário aumentar a largura máxima.

Esta não é a maneira mais elegante, mas funcionará em praticamente qualquer variante do Linux.

    
por 08.12.2016 / 17:09

Tags