web-dev-qa-db-fra.com

Comment faire correspondre un périphérique ttyUSBX à un périphérique série USB

le pilote d'option correspondait correctement à l'ID USB et charge le pilote pour ce périphérique. Par exemple

# 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.

Il crée également des périphériques ttyUSBX pour gérer le matériel

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

Cependant, j'ai plus d'un périphérique série USB et je veux savoir quel ttyUSB est pour quel USBID. Ex./dev/ttyUSB1 -> 19d2: 0031

Savez-vous à quel moment je peux obtenir ces informations?

23
seaquest

Jetez un œil au système de fichiers sysfs. Un exemple pour ma série 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

Comme vous pouvez le voir, ttyUSB0 correspond à 067b:2303 sur mon ordinateur. Un autre endroit à explorer est /sys/class/tty/. Faites attention aux liens symboliques.

15
Lekensteyn

Vous pouvez essayer de voir si vos appareils sont enregistrés sous/dev/serial/by-id /

ls -l/dev/serial/by-id

Ces noms doivent être cohérents et pointeront (lien symbolique) vers le bon ttyUSBx

11
Waxhead

J'ai eu un problème similaire .

Écrivez ceci à /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"

jusqu'à la fin. Redémarrez.

Vous pouvez maintenant utiliser /dev/ONDA pour accéder à votre appareil ONDA.

Si vous souhaitez que les utilisateurs non root puissent les utiliser, ajoutez

, MODE="0666"

à la fin de chaque ligne.

6
Nick ODell

J'utiliserais udev et j'écrirais quelques règles qui créent des liens symboliques pour les appareils.

Pour obtenir suffisamment d'informations pour distinguer les appareils, essayez quelque chose comme ceci pour tous les appareils:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk
4
Mathias Weidner

Les commandes suivantes me donneront la liste des noms de périphériques ttyUSB associés à 19d2: 0016 (qui est l'ID "mode modem" d'un ZTE MF831 LTE stick, le vôtre peut différer)):

    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

Cela va parcourir une liste de fichiers avec le nom de fichier ttyUSB *, y compris les liens symboliques, dans/sys/bus/usb/devices. Dans les résultats, nous rechercherons un fichier nommé modalias et rechercherons une chaîne contenant l'ID de fournisseur "v" "19d2" et l'ID de produit "p" 0016. Si la sortie correspond, nous ferons écho à une chaîne préfixée avec "/ dev/"devant l'USB? Nom. Afaik le premier ou généralement le dernier (numéro le plus élevé) est le port modem pour les appareils ZTE. Vous pouvez répercuter les résultats dans un fichier dans/tmp/et head -n1 ou tail -n1 les lignes en conséquence. Si vous avez des concentrateurs, vous devrez probablement augmenter la profondeur maximale.

Ce n'est pas la manière la plus élégante, mais cela fonctionnera sur presque toutes les variantes de Linux.

1
epek