私はUbuntuを実行しており、共有シリアルデバイス()または同様のデバイスを使用する必要があります/dev/ttyUSB0
。socat
私のグラフは次のとおりです。
/--</dev/ttyUSB01>--[Process A]
[serial device]-/dev/ttyUSB0--
\--</dev/ttyUSB02>--[Process B]
プロセスAとBの両方を読み書きする必要があり、並行性に問題はありません。
/dev/ttyUSB01
などの2つの「仮想」デバイスを作成するには/dev/ttyUSB02
?
答え1
次StackExchangeの提案、両方のプロセスに同じデバイス名を使用してみましたか?
または、プロセスが仮想の「異なる」シリアルポートにアクセスできるように2つの擬似デバイスを作成する必要がある特別な必要性はありますか?その場合は、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