Se você soltar o requisito de usar ttyUSB0
- ttyUSB31
, poderá ter uma possibilidade. O que eu fiz foi deixar udev
criar links simbólicos para os nós de dispositivos designados pelo kernel. Você não pode hardwire hardwire um dispositivo físico para usar ttyUSB0
, mas você pode adicionar um link simbólico ttyUSB001
de forma confiável para apontar para qualquer nó de dispositivo que você deseja. O truque aqui é que o kernel nunca atribuirá um nó de dispositivo a um nome que comece com ttyUSB0..
, exceto exatamente ttyUSB0
. Portanto, esse truque funciona para um máximo de 99 dispositivos, mas pode ser facilmente alterado para 4 dígitos (e 999 dispositivos), contanto que o primeiro dígito permaneça em 0
.
Para que isso funcione, você precisa identificar os dois modems de forma exclusiva. Verifique se eles têm números de série exclusivos executando este comando enquanto desconecta / conecta o dispositivo:
unbuffer udevadm monitor --environment | grep 'ID_SERIAL='
Eu não sei o seu modem, mas este é o arquivo /etc/udev/rules.d/60-persistent-serial.rules
que eu tenho usado para identificar cada um dos meus Arduinos:
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"
É claro que você precisa substituir algumas coisas como OWNER
, que é o usuário ao qual os dispositivos são atribuídos e ENV{ID_SERIAL}
, que pode ser encontrado em:
unbuffer udevadm monitor --environment | grep 'ID_SERIAL='
E por último, mas não menos importante, os vários SYMLINK
s devem ser substituídos pelo nome exato que você deseja usar. Este arquivo faz com que qualquer um dos meus Arduinos esteja disponível sob três nomes (por exemplo):
/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.
Verifique meu artigo wiki particular sobre isso para obter mais detalhes .