Regra do Udev para corresponder ao dispositivo USB de vários nós

5

Eu tenho um dispositivo 3G / GPS que cria 5 nós tty, embora seja apenas uma conexão USB física. Basicamente, um adaptador usb-serial de várias portas.

Estou tentando criar algumas regras udev para garantir que esses nós sempre tenham o mesmo nome ou pelo menos um link simbólico para eles.

Eu posso encontrar o dispositivo em /sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/ . Dentro estão 1-2.2:1.0/ to 1-2.2:1.4/ , para os 5 nós que cria.

Eu também posso encontrá-lo em /sys/bus/usb/devices/1-2.2 .

As informações do udev para o dispositivo são as seguintes:

udevadm info -a -p /sys/bus/usb/devices/1-2.2/1-2.2\:1.0
looking at device '/bus/usb/devices/1-2.2/1-2.2:1.0':
KERNEL=="1-2.2:1.0"
SUBSYSTEM=="usb"
DRIVER=="option"
ATTR{bInterfaceNumber}=="00"
ATTR{bAlternateSetting}==" 0"
ATTR{bNumEndpoints}=="03"
ATTR{bInterfaceClass}=="ff"
ATTR{bInterfaceSubClass}=="01"
ATTR{bInterfaceProtocol}=="01"
ATTR{modalias}=="usb:v12D1p1506d0000dc00dsc00dp00icFFisc01ip01"
ATTR{supports_autosuspend}=="0"

Deste ponto em diante, todos os nós têm a mesma informação. E a única coisa que varia entre os nós é a propriedade bInterfaceNumber e o caminho do dispositivo. Então, pensei em escrever uma regra pelo caminho do desenvolvedor.

Agora, por algum motivo, a seguinte regra é correspondida por todos esses nós.

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0" SYMLINK+="huawey0"

Então, basicamente, huawey0 aponta para o último nó enumerado. O dispositivo criou nós de ttyUSB2 a 6 e esse link aponta para USB6.

Então, eu tentei pelo nó do kernel:

ACTION=="add", KERNEL=="1-2.2:1.0" SYMLINK+="huawey0"

Agora, nada aparece em / dev.

Depois disso, tentei usar o bInterfaceNumber para separá-los. Eu usei a seguinte regra

ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]" ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

E ainda assim, nada acontece. Eu até tentei uma versão reduzida da regra ..

ACTION=="add", ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"

E ainda nada acontece. Por que não está combinando?

    
por Joao Pincho 14.08.2013 / 18:03

3 respostas

4

Suas regras têm erros de sintaxe:

  1. = é para atribuição == é para comparação, então você não estava realmente olhando para o que DEV igualou, você estava atribuindo isso.
  2. Você precisa de , entre todas as declarações, não houve nenhuma antes de SYMLINK+= .

Regra dos Punhos

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"

Segunda Regra

ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"

Terceira Regra

ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

Quarta Regra

ACTION=="add", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"

Todas essas regras devem fazer o que você deseja agora (eu usaria a primeira pessoalmente).

    
por 01.09.2013 / 06:00
1

Embora este post tenha sido perguntado há três anos, e isso pode não resolver a resposta, ainda quero compartilhar minha experiência bem-sucedida aqui para referência futura.

De acordo com o identificador de dispositivos GSM usando o udev de Jens Reimann , "o atributo de dispositivo" bInterfaceNumber "não está no dispositivo tty, mas no dispositivo usb na hierarquia pai", então criei duas regras para o meu adaptador FTDI usb-to-4-port-serial:

SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="ttyUSB_FTDI_4_PORT_%E{.LOCAL_ifNum}"

This stores the attribute “bInterfaceNumber” into the environment variable “.LOCAL_ifNum” (the prefixed dot is a notation for temporary or hidden variables). In the second rule the same variable is pulled on using the “%E” syntax. Newer udev versions also support “$env” instead of “%E”.
(by Jens Reimann)

em que ttyUSB_FTDI_4_PORT_ é o nome do link simbólico. Essas duas regras criarão links simbólicos como ttyUSB_FTDI_4_PORT_00 , ttyUSB_FTDI_4_PORT_01 , ttyUSB_FTDI_4_PORT_02 , ttyUSB_FTDI_4_PORT_03 . Você pode adicionar o atributo ATTRS{serial} para restringir ainda mais a enumeração.

Jens Reimann também reconheceu a contribuição da pergunta U & L de Ketan Patel , Arquivo de regras do Udev para o modem não funcionar , com resposta aceita por derobert .

    
por 25.06.2017 / 04:34
0

Além dos comentários de Alex, há outro problema. Parece que ATTR{bInterfaceNumber} não funciona por algum motivo. Para citar a resposta a uma pergunta relacionada , você deve usar algo nos moldes de

SUBSYSTEM=="tty", ACTION=="add", \
    ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}="2303", \
    ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="test_USB0"
    
por 21.09.2015 / 07:24