Como dar um nome personalizado a um dispositivo serial na conexão?

0

Estou trabalhando em ROS sob Ubuntu 14.04 em um X3 de Odroid (quadro de desenvolvimento do ARM).

Eu conecto dois dispositivos USB à minha placa de desenvolvimento que são reconhecidos como ttyACM0 e ttyACM1 de acordo com a hora em que eles estão conectados.

Como esses dispositivos (Arduino & PixHawk) têm diferentes PID / VID, gostaria de ligá-los a um determinado "nome personalizado" tty como ttyController0 & ttyPosition0 por exemplo.

De acordo com este assunto , podemos simular o dispositivo dependendo do PID & VID para ttyUSB0 .

Como devo fazer para simular um nome determinístico? 4 regras em /etc/udev/rules.d/99-custom.rules com um trabalho simlink?

ACTION=="add", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyController"


ACTION=="remove", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/rm /dev/ttyController"


ACTION=="add", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyPosition"


ACTION=="remove", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/rm /dev/ttyPosition"

Ou posso usar o Udev com PID personalizado & VID?

    
por Alexis Paques 08.01.2016 / 14:18

1 resposta

2

Sua configuração deve funcionar basicamente, mas eu gostaria de fazer algumas sugestões:

Primeiro, acho que você quer usar ATTR , não ATTRS . ATTRS pesquisa a árvore inteira do dispositivo para um dispositivo correspondente (pai). Isso provavelmente não é o que você pretende. Com o uso de ATTR , o dispositivo realmente acionando o evento precisa ter o atributo especificado.

Segundo, como criar links simbólicos para nós de dispositivos é uma tarefa bastante comum, há uma instrução dedicada para isso, ou seja, SYMLINK+="newname" . Desta forma, você não será dependente de comandos "externos". Ainda mais importante, ao usar essa diretiva, você só precisa coincidir com o evento "adicionar", pois udevd removerá automaticamente os links simbólicos associados quando um dispositivo desaparecer.

Assim, suas regras devem ser

ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

Por último, sugeriria restringir a correspondência adicionando outra restrição SUBSYSTEM, ou seja, adicionando SUBSYSTEM=="usb" . Como os IDs de dispositivo e fornecedor são apenas (espero) exclusivos em seu escopo, omitir a correspondência do subsistema pode resultar em suas regras correspondentes em outras classes de dispositivo, como dispositivos PCI. Mesmo que isso seja improvável, é comumente visto como um bom estilo nas regras do udev:

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"
    
por 08.01.2016 / 15:34