Forum Linux.debian/ubuntu Règles UDEV

Posté par  . Licence CC By‑SA.
Étiquettes :
1
10
jan.
2013

Bonjour,

J'utilise un PC industriel sur lequel il y'a plusieurs convertisseurs USB - RS232 FTDI connectés sur des hubs USB.

Lors du démarrage de Linux, j'utilise des règles UDEV pour les identifier (selon sur quel port USB ils sont branchés) :

SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.2", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO1"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.3", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO2"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.4", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO3"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.5", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO4"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.6", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO5"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", KERNELS=="1-1.5.7", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ACTION=="add", SYMLINK+="ttyCOMIO6"

Ces règles fonctionnaient avec Debian Squeeze et un noyau 2.6.32

Mais en passant au noyau 2.6.37, ces règles ne fonctionnent plus.

La commande udevadm info permet d'afficher les critères pour chaque noeud de périphérique et leur parent :

root@debian:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB2)       
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0/ttyUSB2/tty/ttyUSB2':
    KERNEL=="ttyUSB2"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0/ttyUSB2':
    KERNELS=="ttyUSB2"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="ftdi_sio"
    ATTRS{latency_timer}=="1"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0':
    KERNELS=="1-1.5.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ftdi_sio"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="ff"
    ATTRS{bInterfaceProtocol}=="ff"
    ATTRS{modalias}=="usb:v0403p6001d0600dc00dsc00dp00icFFiscFFipFF"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{interface}=="FT232R USB UART"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2':
    KERNELS=="1-1.5.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}==" 90mA"
    ATTRS{urbnum}=="27767"
    ATTRS{idVendor}=="0403"
    ATTRS{idProduct}=="6001"
    ATTRS{bcdDevice}=="0600"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="6"
    ATTRS{devpath}=="1.5.2"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="FTDI"
    ATTRS{product}=="FT232R USB UART"
    ATTRS{serial}=="AH012AHA"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5':
    KERNELS=="1-1.5"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="131"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2517"
    ATTRS{bcdDevice}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="3"
    ATTRS{devpath}=="1.5"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="7"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="66"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2517"
    ATTRS{bcdDevice}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="7"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="32"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.37 musb-hcd"
    ATTRS{product}=="MUSB HDRC host driver"
    ATTRS{serial}=="musb-hdrc.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0':
    KERNELS=="musb-hdrc.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-hdrc"
    ATTRS{modalias}=="platform:musb-hdrc"
    ATTRS{mode}=="a_host"
    ATTRS{vbus}=="Vbus off, timeout 1100"

  looking at parent device '/devices/platform/musb-omap2430.0':
    KERNELS=="musb-omap2430.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-omap2430"
    ATTRS{modalias}=="platform:musb-omap2430"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

J'ai essayé la règle suivante :

SUBSYSTEM=="usb", KERNELS=="1-1.5.2", SYMLINK+="ttyCOMIO1"

Le fichier /dev/ttyCOMIO1 est bien créé, mais il donne un accès au driver USB et non au driver FTDI, ce qui le rend inutilisable :

root@debian:~# udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/006)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2':
    KERNEL=="1-1.5.2"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{configuration}==""
    ATTR{bNumInterfaces}==" 1"
    ATTR{bConfigurationValue}=="1"
    ATTR{bmAttributes}=="a0"
    ATTR{bMaxPower}==" 90mA"
    ATTR{urbnum}=="27767"
    ATTR{idVendor}=="0403"
    ATTR{idProduct}=="6001"
    ATTR{bcdDevice}=="0600"
    ATTR{bDeviceClass}=="00"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bDeviceProtocol}=="00"
    ATTR{bNumConfigurations}=="1"
    ATTR{bMaxPacketSize0}=="8"
    ATTR{speed}=="12"
    ATTR{busnum}=="1"
    ATTR{devnum}=="6"
    ATTR{devpath}=="1.5.2"
    ATTR{version}==" 2.00"
    ATTR{maxchild}=="0"
    ATTR{quirks}=="0x0"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{authorized}=="1"
    ATTR{manufacturer}=="FTDI"
    ATTR{product}=="FT232R USB UART"
    ATTR{serial}=="AH012AHA"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5':
    KERNELS=="1-1.5"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="131"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2517"
    ATTRS{bcdDevice}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="3"
    ATTRS{devpath}=="1.5"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="7"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="66"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2517"
    ATTRS{bcdDevice}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="7"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="32"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.37 musb-hcd"
    ATTRS{product}=="MUSB HDRC host driver"
    ATTRS{serial}=="musb-hdrc.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0':
    KERNELS=="musb-hdrc.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-hdrc"
    ATTRS{modalias}=="platform:musb-hdrc"
    ATTRS{mode}=="a_host"
    ATTRS{vbus}=="Vbus off, timeout 1100"

  looking at parent device '/devices/platform/musb-omap2430.0':
    KERNELS=="musb-omap2430.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-omap2430"
    ATTRS{modalias}=="platform:musb-omap2430"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

Et la règle suivante :

SUBSYSTEM=="tty", KERNELS=="1-1.5.2", SYMLINK+="ttyCOMIO1"

n'a aucun effet..

  • # pas vraiment une solution mais

    Posté par  . Évalué à 2.

    j'avais un souci avec le drivers ieee1394 pour la reconnaissance de disque pour une version de linux
    2.4.24 mais qui fonctionnais très bien avec la version ieee1394 du 2.4.18. Je compilais donc le 2.4.24 avec le drivers du 2.4.18, je remplaçais juste le répertoire du drivers. Cela fonctionnais à la perfection.

    Solution 0: mettre en blacklist le module USB dans le fichier /etc/modprobe.d/blacklist.conf

    Solution 1 :
    compiler le noyau 2.6.37 avec le drivers FTDI 2.6.32 si le probleme proviens du drivers du 2.6.37. un petit diff avant pour contrôler si il y a une evolution.

    Solution 2 :
    prendre un Linux 3.7.1

    bon courage

    • [^] # Re: pas vraiment une solution mais

      Posté par  . Évalué à 1.

      Bonjour,

      Je n'ai pas trop le choix sur la version du noyau.

      Mon problême n'est au niveau driver USB-RS232, ça fonctionne bien en utilisant /dev/ttyUSB0, le problème est que je n'arrive pas à configurer les règles udev pour ajouter un lien symbolique /dev/ttyCOMIOX vers ce périphérique dont le chemin USB est 1-1.5.2 (il y'a 2 hubs USB en cascade avec 7 convertisseurs USB-RS232 connectés, il faut pouvoir les différencier).

      Je suppose que udev utilise les fichiers noyau de /sys pour identifier les périphériques (à confirmer), et c'est peut être là qu'il y'a eu une modification venant du noyau 2.6.37

      C'est assez spécial les rêgles udev et dur de trouver de la documentation détaillée.
      Lorsque l'on ajoute un 'S' au critères recherchés (KERNELS, SUBSYSTEMS …) c'est qu'on indique une propriété d'un parent du périphérique (dans mon cas un port USB).
      Mais il est précisé qu'on ne peut pas définir des propriétés de plusieurs parents différents.

      Donc d'après le udevadm info, la rêgle simple SUBSYSTEM=="tty", KERNELS=="1-1.5.2", SYMLINK+="ttyCOMIO1" devrait fonctionner, ce n'est pas le cas.

  • # /dev/ttyUSB0

    Posté par  (site web personnel) . Évalué à 1.

    Je pense qu'il faut utiliser /dev/ttyUSB ici :

    udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
    
    

    Afin de trouver le bon KERNELS="",

    tout en utilisant SUBSYSTEM=="tty" pour ta règle (et non "usb")

    • [^] # Re: /dev/ttyUSB0

      Posté par  . Évalué à 1.

      Bonjour,

      Ca je l'ai déjà fait :

      root@debian:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB2) 
      
      looking at device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0/ttyUSB2/tty/ttyUSB2':
          KERNEL=="ttyUSB2"
          SUBSYSTEM=="tty"
          DRIVER==""
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0/ttyUSB2':
          KERNELS=="ttyUSB2"
          SUBSYSTEMS=="usb-serial"
          DRIVERS=="ftdi_sio"
          ...
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2/1-1.5.2:1.0':
          KERNELS=="1-1.5.2:1.0"
          SUBSYSTEMS=="usb"
          DRIVERS=="ftdi_sio"
          ...
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5/1-1.5.2':
          KERNELS=="1-1.5.2"
          SUBSYSTEMS=="usb"
          DRIVERS=="usb"
          ...
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1/1-1.5':
          KERNELS=="1-1.5"
          SUBSYSTEMS=="usb"
          DRIVERS=="usb"
          ...
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1/1-1':
          KERNELS=="1-1"
          SUBSYSTEMS=="usb"
          DRIVERS=="usb"
          ...
      
      looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0/usb1':
          KERNELS=="usb1"
          SUBSYSTEMS=="usb"
          DRIVERS=="usb"
          ...
      
        looking at parent device '/devices/platform/musb-omap2430.0/musb-hdrc.0':
          KERNELS=="musb-hdrc.0"
          SUBSYSTEMS=="platform"
          DRIVERS=="musb-hdrc"
          ...
      
      
      ...
      
      

      D'où la règle SUBSYSTEM=="tty", KERNELS=="1-1.5.2", SYMLINK+="ttyCOMIO1" qui aurait due marcher

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.