Compartilhando o dispositivo serial

3

Estou executando o Ubuntu e preciso compartilhar um dispositivo serial ( /dev/ttyUSB0 ) usando socat ou algo parecido.

Aqui está o meu diagrama:

                              /--</dev/ttyUSB01>--[Process A]
[serial device]-/dev/ttyUSB0--
                              \--</dev/ttyUSB02>--[Process B]

Ambos os processos A e B precisam ler e escrever, sem problemas de concorrência.

Como posso criar dois dispositivos "virtuais", como /dev/ttyUSB01 e /dev/ttyUSB02 ?

    
por Zelda 06.11.2013 / 17:58

1 resposta

1

Seguindo e conselhos no StackExchange , você já tentou usar o mesmo dispositivo designação para ambos os processos?

Ou você tem alguma necessidade especial de criar dois pseudo-dispositivos para que os processos acessem portas seriais "diferentes" virtuais? Se sim, eu farei este truque de link simbólico do udev com meu 3gModem, mas ele pode ser aplicado a outros dispositivos. Lembre-se, eles ainda são links para o mesmo dispositivo. Usando dmesg i descobri que meu modem é /dev/ttyUSB0 :

[  224.777566] usbcore: registered new interface driver option
[  224.778326] usbserial: USB Serial support registered for GSM modem (1-port)
[  224.779065] option 1-1:1.0: GSM modem (1-port) converter detected
[  224.780923] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0

Determine o caminho completo do dispositivo (nome feio):

[root@localhost ~]# udevadm info -q path -n /dev/ttyUSB0
/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/ttyUSB0/tty/ttyUSB0

Com o caminho completo do dispositivo, obtenha todas as informações. Você terá uma lista de informações de tela muito longa, cole apenas as informações relevantes:

[root@localhost ~]# udevadm info -a -p /devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/ttyUSB0/tty/ttyUSB0

  looking at device '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="option1"
    ATTRS{port_number}=="0"

Agora, é só criar dois aliases no Udev com as informações extraídas no último comando. Vou criar um arquivo chamado 50-modem.rules at /etc/udev/rules.d . Você pode dar o nome que quiser, mas use o número inicial 50 como um conselho.

SUBSYSTEMS=="usb-serial",DRIVERS=="option1",ATTRS{port_number}=="0",SYMLINK+="3gmodem0"
SUBSYSTEMS=="usb-serial",DRIVERS=="option1",ATTRS{port_number}=="0",SYMLINK+="3gmodem1"

Acione as regras do udev e você está pronto:

[root@localhost rules.d]# udevadm trigger 
[root@localhost rules.d]# ls -l /dev/3g*
lrwxrwxrwx. 1 root root 7 Mar 25 19:55 /dev/3gmodem0 -> ttyUSB1
lrwxrwxrwx. 1 root root 7 Mar 25 19:55 /dev/3gmodem1 -> ttyUSB1
    
por 26.03.2014 / 00:03

Tags