No final, depois de algumas pesquisas, consegui responder sua pergunta.
Suponha que seu dongle USB para serial esteja conectado e disponível como /dev/USB0
. Então você primeiro tem que descobrir algumas informações para configurar udev.rules
:
udevadm info -n ttyUSB0 -a
orientará você pela árvore de informações. Se, por exemplo, você quiser que a regra seja criada para corresponder apenas a este dongle específico, você pode consultar o fornecedor, o produto e o ID de série:
$ udevadm info -n ttyUSB0 -a
.
.
SUBSYSTEMS=="usb"
.
ATTRS{idProduct}=="6001"
ATTRS{idVendor}=="0403"
.
ATTRS{serial}=="FTHL8XKY"
.
.
esses são os atributos a serem respeitados em sua regra.
Em seguida, crie uma regra do udev em /etc/udev/rules.d
para este dispositivo:
$ 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"
(Digite os valores para o seu dispositivo rsp.). A linha diz:
Somente quando o dongle é adicionado ( ACTION="add"
) e quando o fornecedor, o produto e a série correspondem aos valores fornecidos, execute a ação, que é definida como desejada, em que '% k' é o kernel name
de o dispositivo, neste caso ttyUSB0
(mas pode ser diferente na próxima vez).
O nome do seu arquivo de regras é arbitrário, mas você deve respeitar as convenções de nomenclatura usadas pelo udev. Para ver o que será executado, você pode testar por 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
(o caminho do dispositivo é mostrado nas informações do udev, primeira linha).
Para ver se isso funciona, você pode dar uma olhada em / var / log / syslog ao conectar o dongle. Primeiro, configure udev
para mostrar não apenas mensagens de erro modificando /etc/udev/udev.conf
para ler udev_log="debug"
; caso contrário, você verá apenas mensagens de erro. Reinicie o udev
service ( sudo systemctl restart udev
) e, em seguida:
$ 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.
.
.
Isso também deve mostrar erros se não for bem-sucedido. udev
tenta executar o comando em diferentes momentos em diferentes estágios, portanto, haverá alguns erros, mas no final ele deve ser bem-sucedido.
Se você quiser criar um link simbólico de dispositivo fixo sempre que conectar o dongle, isso também será possível. Basta adicionar a ação à sua regra:
ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", SYMLINK+="mynewserial", RUN+="/bin/stty -F /dev/%k -crtscts"
Isso criará um link simbólico /dev/mynewserial
que você pode usar em seus programas, sem considerar dispositivos criados dinamicamente.
Existem muito mais possibilidades; isso deve apenas dar uma impressão sobre como proceder.