저는 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.rules
이라는 파일을 만들겠습니다 /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