Eu tenho um modem de celular USB conectado a uma placa ALIX 3d2 executando o voyage linux (que é baseado no Debian Squeeze). O modem se registra como um dispositivo TTY e, assim, por padrão, o udev cria dispositivos TTY denominados "ttyUSB0" por meio de "ttyUSB3" em /dev
. No entanto, pode haver outros dispositivos USB para serial conectados e gostaria de ter uma referência conhecida ao modem. Então, eu escrevi uma regra do udev simples para fazer um link do modem para /dev/ttyModem{0-3}
, no entanto, a única maneira que encontrei para lidar automaticamente com a numeração foi através da variável %n
no udev, que tem o problema de criar /dev/ttyModem{4-7}
se um adaptador USB-para-Serial de quatro portas for enumerado antes do modem. Eu encontrei algumas referências a uma variável %e
na documentação antiga do udev que faria exatamente o que eu preciso, mas parece que foi removida há algum tempo.
Felizmente, há um número de porta que pode ser referenciado a partir do dispositivo para cada dispositivo tty, portanto, devo ser capaz de manipular a numeração manualmente. Posso criar um link com base no número da porta, mas sempre que tento usar o número da porta e o ID do produto do fornecedor + USB, a regra não é mais aplicada. Eu suspeito que eu possa estar violando a regra "um único dispositivo pai" em algum lugar, pois esses atributos são reconhecidos em dispositivos diferentes de acordo com udevadm info
, mas, até onde eu sei, todos os atributos devem vir de um dispositivo e seu pai .
Aqui estão as regras que apliquei:
Esta regra funciona, e é com o que eu comecei, mas o número que ela gera pode não começar em 0.
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="ttyUSBID%n"
Por isso, tentei especificar o número da porta usando quatro regras como essa, no entanto, isso falha, porque viola a regra "um único dispositivo pai".
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{port_number}=="0", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="ttyFailingPort0"
Todas as condições dessa regra devem vir do mesmo nó, portanto, essa regra (que funciona como seria de se esperar) deve ser capaz de fazer referência a um nó pai.
SUBSYSTEMS=="usb-serial", KERNELS=="ttyUSB*", ATTRS{port_number}=="0", SYMLINK+="ttyPortNumberChild0"
No entanto, esta regra falha e não tenho ideia do motivo.
SUBSYSTEMS=="usb-serial", KERNELS=="ttyUSB*", ATTRS{idVendor}=="1199" ATTRS{port_number}=="0", SYMLINK+="ttyFailingPortNumber0
E aqui está a saída de udevadm info --attribute-walk
para port0 , port1 , port2 , port3 . O segundo dispositivo da parte superior contém o número da porta e o quarto dispositivo contém as informações USB de identificação.
Eu percebo que isso é um problema XY , então se você conhece uma maneira melhor de dar ao modem uma constante nome, sinta-se à vontade para postar isso como sua resposta.