15 avril 2009

ttyUSB0 ? ttyUSB2 ? Non, ttyUSB1… Graaaahh ! udev !

Tags : , ,

posté dans Configuration |

J'ai acheté il y a quelque temps plusieurs de ces petites choses :

ttyusb

Des convertisseurs USB/Série en TTL (0-5V). Ceci permet de connecter directement, sans max232, un adaptateur USB/Série à un montage à base de microcontrôleur (genre Atmel AVR) ou un système embarqué (genre Fonera, remarquez le cavalier permettant de choisir 5V ou 3.3V, convitude). Seulement, voilà :

  • je branche un adaptateur, il est accessible via /dev/ttyUSB0
  • j'en branche un autre qui devient /dev/ttyUSB1
  • je débranche le premier et en branche deux autres et ça devient la fête aux ttyUSB*

Où est ma Fonera 1, où est mon Attiny2313, où est ma Fonera 2... etc...  ?

On trouve dans /sys/bus/usb-serial/devices plein de choses intéressantes avec udevinfo -a -p. Parmi lesquelles :

ATTRS{manufacturer}=="FTDI"
ATTRS{product}=="FT232R USB UART"
ATTRS{serial}=="A90066ai"

Du coup, il ne reste plus qu'à se construire des petites règles sympathiques dans un fichier placé dans /etc/udev/rules.d :

SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="FT232R USB UART", \
  SYSFS{serial}=="A90066j7", SYMLINK+="TTYUSB0"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="FT232R USB UART", \
  SYSFS{serial}=="A90066ac", SYMLINK+="TTYUSB1"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="FT232R USB UART", \
  SYSFS{serial}=="A900669W", SYMLINK+="TTYUSB2"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{product}=="FT232R USB UART", \
  SYSFS{serial}=="A90066ai", SYMLINK+="TTYUSB3"

On redémarre udev avec un petit /etc/init.d/udev restart et on marque des petits chiffres au feutre indélébile sur les adaptateurs. A la connexion du périphérique identifié par son numéro de série, un lien symbolique est créé dans /dev. Peu importe le /dev/ttyUSB*, le lien symbolique donne toujours accès au bon périphérique.

Done.

PS : ça marche pour plein de périphériques. Ceci inclus les clef USB par exemple :

BUS=="usb", SYSFS{serial}=="123456789ABCDEF", NAME="%k", SYMLINK="usbkey1"
Article posté on Mercredi, 15 avril 2009 à 21:19 dans Configuration. Vous pouvez suivre les commentaires sur cet article via un feed RSS 2.0. Commentaires et pings fermés.

Il y a actuellement 4 réponses pour “ttyUSB0 ? ttyUSB2 ? Non, ttyUSB1… Graaaahh ! udev !”

  1. 1 Le 20 avril 2009, Gui13 à écrit :

    Salut,

    Question: tu les as trouvés où ces petits adaptateurs USB -> série compatibles 3.3 et 5V??
    Je suis très intéressé (une FON et un NAS ARM :)).

    Merci d’avance!

  2. 2 Le 20 avril 2009, Lefinnois à écrit :

    Comme précisé dans un autre billet, ils sont en vente sur eBay et plus exactement ici.

    Il y en a également chez Sparkfun (http://www.sparkfun.com)

  3. 3 Le 20 avril 2009, Gui13 à écrit :

    Merci!

    Commandé chez les bulgares :)

  4. 4 Le 3 juillet 2009, charlot à écrit :

    pour les distribs qui sont passées à udevadm au lieu de udevinfo, la syntaxe est par exemple :
    udevadm info –attribute-walk –path=/sys/bus/usb-serial/devices/ttyUSB0

    merci pour le billet, je commençais à en avoir marre de confondre les cables;)