recentemente tive necessidade de criar uma regra para o udev em uma máquina rodando ubuntu server 10.04. essa necessidade surgiu com um problema, que era fazer com que um determinado dispositivo usb estivesse sempre associado com uma porta específica no sistema, e serviu de motivação para escrever um pouco sobre esse trabalho.
“udev é um gerenciador dinâmico de dispositivos para o linux 2.6. a sua função principal é o gerenciamentos de dispositivo no diretório /dev. ele é o sucessor do DEVFS e do hotplug.” (wikipedia, 05.2010)
existiam dois dispostivos usb conectados a esse servidor, um modem 3g e um adaptador usb-serial. algumas vezes o adaptador assumia o uso da porta /dev/ttyUSB0, outras vezes o modem tomava conta dessa porta. dessa forma a solução que encontrei foi criar uma regra para que o modem ficasse utilizando a porta /dev/usbmodem e o adaptador utilizasse a porta /dev/usbserial.
para auxiliar na criação das regras no udev, utilizei o comando udevadm. uma vez com o modem conectado no servidor, digitei o seguinte comando para obter as informações necessárias para criar a regra do udev:
udevadm info -a -p `udevadm info -q path -n /dev/ttyUSB0`
esse comando gerou a saida necessária para que conseguisse criar uma regra dentro do arquivo /etc/udev/rules.d/10-local.rules da seguinte forma:
KERNELS==”ttyUSB?”, SUBSYSTEMS==”usb-serial”, DRIVERS==”option1″, ATTRS{port_number}==”0″, NAME=”usbmodem”
com essa regra, uma vez que um dispositivo do subsystem usb-serial, que utilize o driver option1 e tenha como atributo port_number=0, seja conectado ao sistema, ele será renomeado para usbmodem.
agora, para testar a regra recem criada utilizei o seguinte comando:
udevadm test `udevadm info -q path -n /dev/ttyUSB0`
após confirmar que minha regra tinha sido escrita da forma esperada, utilizei o seguinte comando para executala, o que será feito de forma automatica após reiniciar o sistema:
udevadm trigger `udevadm info -q path -n /dev/ttyUSB0`
após isso, repeti os mesmos passos para criar uma nova regra, dentro do mesmo arquivo, para o adaptador usb-serial.
na minha opnião, o udev veio para trazer mais facilidade aos usuários do linux. somando a isso, ganhamos também uma ferramenta bastante flexivel e organizada, que substituira de uma vez por todas aqueles scripts(gambiarras) utilizando a saida do dmesg
.
Hugo,
Muito bom o post, o udev e formidavel porém fazer tais regras e um pouco chato…
valeu!