Como defino os padrões de tempo de inicialização do ttyUSB?

1

Quando meu dongle USB serial inicializa, ele aparece com a linha RTS ativada. Eu obtenho o mesmo comportamento se ele estiver conectado durante a inicialização ou se eu conectar o dongle após a inicialização.

Isto é para o meu computador hamshack, onde a porta serial está conectada ao meu transceptor. A linha RTS coloca a sonda no modo de transmissão, o que eu prefiro não ter como padrão. Claro, uma vez que eu corro fldigi ou wsjtx, a linha RTS se comporta.

Existe um local para definir esse padrão? Eu procurei um pouco em / etc, mas não encontrei nenhum init ou arquivo de configuração onde o padrão possa estar. Poderia ser tão simples quanto colocar 'stty -F / dev / ttyUSB0 -crtscts' em algum lugar, mas onde?

Este computador não tem uma porta serial interna, portanto, o dongle é a única opção aqui.

Execução da versão 16.04 LTS.

    
por G Weast 11.02.2017 / 15:36

1 resposta

2

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.

    
por ridgy 13.02.2017 / 15:08