私はテキストメッセージを送信するために使用する16のポートを持つモデムを持っています。
私のLinuxシステムに接続すると、ttyUSB0
最大16個のポートが得られますttyUSB15
。現在、このモデムを取り外して別のモデムを接続すると、最大ttyUSB0
16個のポートが得られますttyUSB15
。
このモデムを削除して別のモデムを接続するときに、今後割り当てられるようにファイルを作成して、特定のプロバイダudev
に対して最初の16個のポートを予約するにはどうすればよいですか。ttyUSB16
編集する
私のudev
ルールファイルの内容は次のように動作しますが、再接続するたびにポート番号が変わります。
Name=="Future Technology Devices International,Ltd",SUBSYSTEMS=="usb", ATTRS{idProduct}=="6011", ATTRS{idVendor}=="0403", SYMLINK="Ketan%b", KERNEL=="ttyUSB[0-15]*", MODE="0666", SYMLINK+="ttyUSB1",
出力
ls -l /dev/K*
lrwxrwxrwx 1 root root 7 2013-01-08 15:09 /dev/Ketan-8.1 -> ttyUSB1
lrwxrwxrwx 1 root root 7 2013-01-08 15:09 /dev/Ketan-8.2 -> ttyUSB5
lrwxrwxrwx 1 root root 8 2013-01-08 15:09 /dev/Ketan-8.3 -> ttyUSB11
lrwxrwxrwx 1 root root 8 2013-01-08 15:09 /dev/Ketan-8.4 -> ttyUSB12
これには16個のポートがありますが、4つのグループにグループ化されています。モデムを接続するたびに、、、、値ttyUSB
1
が変わります。5
11
12
答え1
ttyUSB0
使用要件を緩和するとttyUSB31
可能性があります。私がしたことは、udev
カーネルが割り当てたデバイスノードを指すシンボリックリンクを作成することだけでした。使用する物理デバイスを確実に配線することはできませんが、目的のデバイスノードを指すttyUSB0
シンボリックリンクを確実に追加できます。ttyUSB001
ここで重要なのは、カーネルがデバイスノードに自分ttyUSB0..
以外の名前で始まる名前を割り当てないことですttyUSB0
。したがって、このトリックは最大99台のデバイスに適用されますが、最初の数字が維持される限り、4桁(および999台のデバイス)に簡単に変更できます0
。
これを行うには、両方のモデムを一意に識別できる必要があります。デバイスを切断または接続するときは、次のコマンドを実行してデバイスに固有のシリアル番号があることを確認してください。
unbuffer udevadm monitor --environment | grep 'ID_SERIAL='
あなたのモデムはわかりませんが、/etc/udev/rules.d/60-persistent-serial.rules
各Arduinoを一意に識別するために使用するファイルは次のとおりです。
ACTION!="add", GOTO="persistent_serial_end"
SUBSYSTEM!="tty", GOTO="persistent_serial_end"
KERNEL!="ttyUSB[0-9]*", GOTO="persistent_serial_end"
# This is old 11.10 style: IMPORT="usb_id --export %p"
IMPORT{builtin}="path_id"
ENV{ID_SERIAL}=="04fc_RS232C_to_USB_Adapter" , SYMLINK="multimeter" , OWNER="jhendrix"
ENV{ID_SERIAL}=="FTDI_FT232R_USB_UART_A800FERY" , SYMLINK="arduinoMega1280-001" , SYMLINK+="ttyUSB001" , OWNER="jhendrix"
ENV{ID_SERIAL}=="FTDI_FT232R_USB_UART_A900F4EF" , SYMLINK="arduinoMega1280-002" , SYMLINK+="ttyUSB002" , OWNER="jhendrix"
ENV{ID_SERIAL}=="FTDI_FT232R_USB_UART_A900f3Kr" , SYMLINK="arduinoDuemilanove168-003" , SYMLINK+="ttyUSB003" , OWNER="jhendrix"
LABEL="persistent_serial_end"
もちろん、いくつかの点を交換する必要がありますOWNER
。たとえば、デバイスを割り当てたユーザーはENV{ID_SERIAL}
次のように検索できます。
unbuffer udevadm monitor --environment | grep 'ID_SERIAL='
最後に、さまざまなSYMLINK
sを使用したい正確な名前に変更する必要があります。このファイルを使用すると、私のArduinoを3つの名前(たとえば)として使用できます。
/dev/ttyUSB0 # dynamic, assigned by kernel upon plugging the device
/dev/arduinoMega1280-002 # static, symlink -> ttyUSB0
/dev/ttyUSB002 # static, symlink -> ttyUSB0 , this is what you are asking for.