Configurando Adaptador USBSerial no Ubuntu usando udev

Origem: Kerne.org, a enciclopédia livre.

Este artigo mostra como configurar o Adaptador USB->Serial Prolifict Tecnology Inc. utilizando udev.


Conteúdo

Requisitos

  • Cabo USB
  • Adaptador USB->Serial Prolific (este é um dos modelos mais comuns no mercado)
  • Ubuntu Linux 7.10 (Pode funcionar em outras distribuições baseadas que utilizem udev para gerenciamento de dispositivos)


Configuração

Antes de mais nada é necessário detectar qual o dispositivo conectado a inteface USB. Para isto basta utilizar o udevmonitor

# udevmonitor
udevmonitor will print the received events for:
UDEV the event which udev sends out after rule processing
UEVENT the kernel uevent


Agora basta conectar o Adaptador USB->Serial ao cabo USB e em seguida conectar o cabo USB no computador.

Será mostrada uma saida de tela parecida com a saida abaixo:

UEVENT[1197270418.942270] remove   /devices/pci0000:00/0000:00:02.0/usb3/3-2/3-2:1.0/ttyUSB0 (usb-serial)
UDEV  [1197270418.950251] remove   /class/tty/ttyUSB0 (tty)
UDEV  [1197270418.951950] remove   /devices/pci0000:00/0000:00:02.0/usb3/3-2/3-2:1.0/ttyUSB0 (usb-serial)
UEVENT[1197270420.922868] add      /devices/pci0000:00/0000:00:02.0/usb3/3-2 (usb)
UEVENT[1197270420.922933] add      /class/usb_endpoint/usbdev3.19_ep00 (usb_endpoint)
UEVENT[1197270420.925735] add      /devices/pci0000:00/0000:00:02.0/usb3/3-2/3-2:1.0 (usb)
UDEV  [1197270420.934592] add      /devices/pci0000:00/0000:00:02.0/usb3/3-2 (usb)
UDEV  [1197270420.943919] add      /class/usb_endpoint/usbdev3.19_ep00 (usb_endpoint)
UEVENT[1197270420.983005] add      /class/usb_endpoint/usbdev3.19_ep81 (usb_endpoint)
UEVENT[1197270420.983068] add      /class/usb_endpoint/usbdev3.19_ep02 (usb_endpoint)
UEVENT[1197270420.983087] add      /class/usb_endpoint/usbdev3.19_ep83 (usb_endpoint)
UEVENT[1197270420.983105] add      /class/usb_device/usbdev3.19 (usb_device)
UDEV  [1197270421.042027] add      /devices/pci0000:00/0000:00:02.0/usb3/3-2/3-2:1.0 (usb)
UDEV  [1197270421.042097] add      /class/usb_endpoint/usbdev3.19_ep81 (usb_endpoint)
UDEV  [1197270421.042117] add      /class/usb_endpoint/usbdev3.19_ep02 (usb_endpoint)
UDEV  [1197270421.042136] add      /class/usb_endpoint/usbdev3.19_ep83 (usb_endpoint)
UDEV  [1197270421.153474] add      /class/usb_device/usbdev3.19 (usb_device)


Para identificar o dispositivo, vamos observar a class listada acima, neste caso /class/usb_device/usbdev3.19.

Agora basta obter informações detalhadas sobre o dispositivo, usando o comando udevinfo:

# udevinfo -a -p /class/usb_device/usbdev3.19
 looking at device '/class/usb_device/usbdev3.19':
   KERNEL=="usbdev3.19"
   SUBSYSTEM=="usb_device"
   DRIVER==""
   ATTR{dev}=="189:274"

 looking at parent device '/devices/pci0000:00/0000:00:02.0/usb3/3-2':
   KERNELS=="3-2"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{product}=="USB-Serial Controller"
   ATTRS{manufacturer}=="Prolific Technology Inc."
   ATTRS{quirks}=="0x0"
   ATTRS{maxchild}=="0"
   ATTRS{version}==" 1.10"
   ATTRS{devnum}=="19"
   ATTRS{busnum}=="3"
   ATTRS{speed}=="12"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{bDeviceProtocol}=="00"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bDeviceClass}=="00"
   ATTRS{bcdDevice}=="0300"
   ATTRS{idProduct}=="2303"
   ATTRS{idVendor}=="5372"
   ATTRS{bMaxPower}=="100mA"
   ATTRS{bmAttributes}=="80"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{configuration}==""
   ATTRS{dev}=="189:274"

Serão mostradas mais informações, mas o que realmente é necessário para configuração do dispositivo estão em negrito no quadro acima.


Arquivo de configuração udev: /etc/udev/rules.d/26-usbserial.rules

ACTION=="add", BUS=="usb", ID="ttyUSB0", DRIVER="pl2303", \
SYSFS{product}=="USB-Serial Controller", \
MODE="0666", SYMLINK="pilot", \
RUN+="/bin/sh -c '/bin/chmod 666 $env{DEVICE}'"


Testando dispostivo

Para testar o dispositivo, basta desconectar o cabo USB e conectá-lo novamente.

Se tudo estiver correto, uma mensagem semelhante a do quadro abaixo será mostrada no arquivo /var/log/messages

Dec 10 00:00:00 xxxx kernel: [ xxxx.xxxxxx] pl2303 3-2:1.0: pl2303 converter detected
Dec 10 00:00:00 xxxx kernel: [ xxxx.xxxxxx] usb 3-2: pl2303 converter now attached to ttyUSB0
Dec 10 00:00:00 xxxx kernel: [ xxxx.xxxxxx] usbcore: registered new interface driver pl2303


Agora basta configurar o seu cliente, neste caso configurei o minha conexão com o Palm, para utilizar o dispositivo /dev/ttyUSB0.


Notas e Observações

Observe que o dispositivo /dev/ttyUSB0 já está com permissão 666 (leitura/gravação para todos os usuários) permitindo que qualquer usuário do sistema utilize-o.

Este artigo pode ser facilmente alterado para qualquer outro equipamento que possua conexão USB, alterando-se o driver, ID e script RUN, bastando para isto identificar o nome do fabricante com os comandos udevinfo e udevmonitor.



Conclusão

Utilizar o udev para configurar os dispostivos no GNU/Linux é de certa forma simples, salvo quando por algum motivo o dispositivo teima em não funcionar. Digo isso pois no meu caso o meu adaptador detectou logo de primeiro, mas durante a criação deste artigo e montagem dos quadros de debug, o dispositivo simplesmente não inicializava. Depois de algumas conexões e desconexões o adaptador voltou a funcionar e acredito que seja algum defeito do meu adaptador.


Comentários, críticas e sugestões, fique a vontade para enviar email para: kerne@kerne.org

Espero que este artigo seja útil, aproveite e divirta-se!

Abraços

Kerne

Personal tools