Резервные порты для модема

У меня есть модем с 16 портами, используемыми для отправки SMS.

Когда он подключен к моей машине Linux, я получаю 16 портов от ttyUSB0 до ttyUSB15 . В настоящее время, если я удалю этот модем и подключу другой, я получаю 16 портов от ttyUSB0 до ttyUSB15 .

Как я могу зарезервировать первые 16 портов для конкретного поставщика с созданием файла udev , поэтому, когда я ttyUSB16 этот модем и вставляю другой, он назначается с 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, но они разделены на четыре группы. ttyUSB 1 , 5 , 11 , 12 значения меняются каждый раз, когда я подключаю модем.

Если вы ttyUSB31 требование использования ttyUSB0ttyUSB31 , тогда у вас может быть только возможность. То, что я сделал, позволяет 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 доступным под тремя именами (например.):

 /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. 

Для получения более подробной информации ознакомьтесь с моей личной статьей wiki .