Reserve portas para modem

2

Eu tenho um modem com 16 portas usadas para enviar SMS.

Quando ele está conectado à minha máquina Linux, recebo 16 portas de ttyUSB0 a ttyUSB15 . Atualmente, se eu remover este modem e anexar outro, recebo 16 portas de ttyUSB0 para ttyUSB15 .

Como posso reservar as primeiras 16 portas para um fornecedor específico com a criação do arquivo udev , então, quando eu removo este modem e insiro outro, ele é atribuído a partir de ttyUSB16 onwards?

Editar

Meu conteúdo do arquivo de regra udev é o seguinte, que está funcionando, mas o número da porta é alterado toda vez que eu faço a replicação.

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

Saída

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

Aqui as portas são 16, mas estão divididas em grupo de quatro. Os valores ttyUSB 1 , 5 , 11 , 12 estão mudando toda vez que eu conecto um modem.

    
por Ketan Patel 04.01.2013 / 13:53

1 resposta

3

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 .

    
por 04.01.2013 / 14:18