Raspian: Statically map / dev / ttyUSB *

1

Primeiro, eu não sou muito de um desenvolvedor Linux, então por favor, tenha paciência comigo se eu usar alguns termos incorretos.

Estou usando um Raspberry Pi rodando o Raspian para controlar alguns hardwares de automação residencial. Um pedaço de hardware fala sobre RS232, então ele se conecta ao meu RPi usando um adaptador USB para RS232. Outro se conecta via USB, mas emula uma porta serial.

Quando eu estou usando apenas uma peça de hardware, tudo está bem: eu apenas digo ao meu software para usar /dev/ttyUSB0 e está tudo bem.

O problema é quando eu conecto os dois ao mesmo tempo. Um dispositivo aparece como ttyUSB0 e um como ttyUSB1 , o que é bom, mas a cada reinicialização é essencialmente aleatório qual dispositivo de hardware será atribuído a qual arquivo de dispositivo, apesar de não tê-los desconectado do RPi.

De vez em quando, após uma reinicialização, acho que o software de controle está confuso porque está falando com o dispositivo errado. Existe uma maneira que eu possa "codificar" um dispositivo para um arquivo de dispositivo?

    
por MiffTheFox 31.07.2017 / 01:48

2 respostas

2

Para dispositivos seriais, você deve encontrá-los nomeados pela topologia em /dev/serial/by-path/ , portanto, se você usar os mesmos hubs e portas usb, ele deverá permanecer constante. Por exemplo:

ls -l /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0
... /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0 -> ../../ttyUSB0

Da mesma forma, você deve encontrar os dispositivos pelo nome, às vezes incluindo o número de série, em /dev/serial/by-id/ , por exemplo:

 ls -l /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0
 ... /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0 -> ../../ttyUSB0
    
por 31.07.2017 / 15:06
1

Você pode usar as regras do udev para isso. Uma regra do udev pode corresponder a um dispositivo USB por seu número de série e permite criar um nome alternativo para o dispositivo em /dev .

Uma regra do udev como essa deve ser suficiente para criar um symlink em /dev apontando para o nó do dispositivo real:

SUBSYSTEM=="usb", ATTRS{serial}=="<serial number>", SYMLINK+="USBserial1"

Veja Escrevendo as regras do udev por Daniel Drake para os detalhes.

    
por 31.07.2017 / 09:05