- Projetos Finalizados
- Projetos em Andamento
- Treinamentos
- Conhecimentos
-
- Conceitos
- Outros
Utilizamos vários dispositivos que se comunicam através de uma interface USB serial e sempre que conectamos um dispositivo em uma porta USB ele obtém um caminho relativo como /dev/ttyUSB0
. Porém esse caminho não é persistente e pode mudar dependendo da ordem que os dispositivos são conectados.
O objetivo desse artigo é apresentar uma maneira de configurar um caminho permanente (como /dev/arduino
, por exemplo) para um dispositivo conhecido.
Esses dispositivos possuem uma interface USB-serial que geralmente converte um tráfego de dados seriais (UART) para tráfego de dados USB, dispensando a necessidade de uma porta serial RS-232 dedicada.
Todo dispositivo compatível com USB possui um Vendor ID e um Product ID. Isso pode ser verificado com o comando lsusb
:
ada@ec $ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC Bus 001 Device 010: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC Bus 001 Device 005: ID 0402:5632 ALi Corp. USB 2.0 Host-to-Host Link Bus 002 Device 005: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
É possível notar no exemplo acima que três dispositivos utilizam o mesmo chip para a interface USB (o popular FTDI FT232) e, portanto, possuem o mesmo Vendor ID
e Product ID
. Para diferenciar um dispositivo do outro, precisamos de um identificador único, como um número serial. Com o comando udevadm
podemos encontrar esse número:
ada@ec $ udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1 ATTRS{serial}=="'''A6008isP'''"
Com essas informações é possível criar uma regra UDEV que irá criar um link simbólico sempre que um dispositivo cadastrado for reconhecido. Regras UDEV normalente ficam localizadas em /etc/udev/rules.d
. Crie um arquivo chamado 99-usb-serial.rules
e adicione as seguintes linhas:
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A6008isP", SYMLINK+="arduino" SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A7004IXj", SYMLINK+="buspirate" SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDIF46B", SYMLINK+="ttyUSB.ARM"
Cada linha representa um dispositivo, portanto altere os atributos de acordo com as informações coletadas anteriormente. Vale salientar que o atributo SYMLINK+=“arduino”
indica que um link simbólico será criado em /dev/arduino
apontando para /dev/ttyUSB*
. Ou seja, os dispositivos ainda obtém nomes que podem mudar, mas agora eles também possuem um link simbólico que sempre apontará para o caminho correto.
'Fonte:
' http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/ (Michael Ludvig @ 2009)