web-dev-qa-db-fra.com

Comment définir les paramètres par défaut de l'heure de démarrage de ttyUSB?

Lorsque mon dongle USB-série s’initialise, la ligne RTS s’affirme. J'obtiens le même comportement s'il est branché au démarrage ou si je branche le dongle après le démarrage.

Ceci est pour mon ordinateur hamshack, où le port série est connecté à mon émetteur-récepteur. La ligne RTS met la plate-forme en mode de transmission, ce que je préférerais ne pas avoir par défaut. Bien sûr, une fois que je lance fldigi ou wsjtx, la ligne RTS se comporte.

Y at-il un endroit pour définir cette valeur par défaut? J'ai fouillé un peu dans/etc, mais je n'ai trouvé aucun fichier d'initialisation ou de configuration où la valeur par défaut pourrait être. Cela pourrait être aussi simple que de placer "stty -F/dev/ttyUSB0 -crtscts" quelque part, mais où?

Cet ordinateur ne possède pas de port série intégré, le dongle est donc la seule option possible.

Exécution de la version 16.04 LTS.

1
G Weast

Finalement, après quelques recherches, j'ai réussi à répondre à votre question.

Supposons que votre clé électronique USB/série est connectée et disponible sous la forme /dev/USB0. Ensuite, vous devez d’abord trouver des informations pour configurer udev.rules:

udevadm info -n ttyUSB0 -a vous guidera dans l'arborescence d'informations. Si, par exemple, vous souhaitez que la règle crée ne corresponde que this dongle spécifique, vous pouvez faire référence au fournisseur, au produit et à l'ID de série:

$ udevadm info -n ttyUSB0 -a
.
.
   SUBSYSTEMS=="usb"
.
   ATTRS{idProduct}=="6001"
   ATTRS{idVendor}=="0403"
.
   ATTRS{serial}=="FTHL8XKY"
.
.

alors ce sont les attributs à respecter dans votre règle.

Ensuite, créez une règle udev dans /etc/udev/rules.d pour ce périphérique:

$ Sudo vi /etc/udev/rules.d/99-ttyUSB.rules

ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", RUN+="/bin/stty -F /dev/%k -crtscts"

(Entrez les valeurs pour votre numéro de périphérique). La ligne se lit comme suit:

Uniquement lorsque le dongle est ajouté (ACTION="add") et que le fournisseur, le produit et le numéro de série correspondent aux valeurs données, puis exécutez l'action définie comme vous le souhaitez, où '% k' est le kernel name. de l'appareil, dans ce cas ttyUSB0 (mais peut être différent la prochaine fois).

Le nom de votre fichier de règles est arbitraire, mais vous devez respecter les conventions de nommage utilisées par udev. Pour voir ce qui va être exécuté, vous pouvez tester par udevadm test -a add /devices/pci0000:00/0000:00:13.2/usb2/2-4/2-4.1/2-4.1:1.0/ttyUSB0/tty/ttyUSB0 (le chemin du périphérique est indiqué dans la première ligne de l'information udev).

Pour voir si cela fonctionne, vous pouvez jeter un oeil à/var/log/syslog lors du branchement du dongle. Commencez par configurer udev pour qu’il n’affiche pas que les messages d’erreur en modifiant /etc/udev/udev.conf pour lire udev_log="debug"; sinon, vous ne verrez que des messages d'erreur. Redémarrez le service udev (Sudo systemctl restart udev), puis:

$ tail -f  /var/log/syslog | grep udev
.
.
Feb 13 14:47:42 desk systemd-udevd[16013]: starting '/bin/stty -F /dev/ttyUSB0 -crtscts'
Feb 13 14:47:42 desk systemd-udevd[15995]: Process '/bin/stty -F /dev/ttyUSB0 -crtscts' succeeded.
.
.

Cela devrait également montrer des erreurs si cela ne réussit pas. udevessaie d'exécuter la commande à différents moments et à différentes étapes. Il y aura donc des erreurs, mais au final, cela devrait réussir.

Si vous souhaitez créer un lien symbolique de périphérique fixe chaque fois que vous branchez le dongle, cela est également possible. Ajoutez simplement l'action à votre règle:

ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", SYMLINK+="mynewserial", RUN+="/bin/stty -F /dev/%k -crtscts"

Cela créera un lien symbolique /dev/mynewserial que vous pourrez utiliser dans vos programmes, sans tenir compte des périphériques créés de manière dynamique.

Il y a beaucoup plus de possibilités. cela devrait seulement donner une impression sur la façon de procéder.

2
ridgy