共享串口设备

共享串口设备

我正在运行 Ubuntu,我需要使用或类似的东西共享串行设备 ( /dev/ttyUSB0) 。socat

这是我的图表:

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

进程A和B都需要读写,并发没有问题。

如何创建两个“虚拟”设备,例如/dev/ttyUSB01/dev/ttyUSB02

答案1

以下和StackExchange 的建议,您是否尝试过对两个进程使用相同的设备名称?

或者,您是否有任何特殊需要创建两个伪设备,以便进程访问虚拟的“不同”串行端口?如果是,我将使用我的 3gModem 执行此 udev 符号链接技巧,但它可以应用于其他设备。请记住,它们仍然链接到同一设备。使用dmesg我发现我的调制解调器是/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

确定完整的设备路径(丑陋的名字):

[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

通过完整的设备路径,获取所有信息。您将有一个很长的屏幕信息列表,因此我仅粘贴相关信息:

[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"

现在,只需使用上一个命令中提取的信息在 Udev 上创建 2 个别名即可。我将创建一个名为50-modem.rulesat 的文件/etc/udev/rules.d。您可以将其命名为任何您想要的名称,只要它以“.rules”结尾即可,但建议使用起始数字 50。

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

触发 udev 规则就可以了:

[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

相关内容