Подключение модемов ZyXEL Omni 56K по шине USB в ОС Linux.


1. Подключение модемов ZyXEL Omni 56K PLUS & DUO по шине USB в ОС Linux.
2. Подключение модема ZyXEL Omni 56K UNO по шине USB в ОС Linux.

1. Подключение модемов ZyXEL Omni 56K PLUS & DUO по шине USB в ОС Linux.

Модемы ZyXEL Omni 56K PLUS & DUO имеют 2-а интерфейса подключения к компьютеру, это RS-232 и USB. Если подключение по RS-232 не вызывает каких-либо вопросов и проблем, то для подключения по USB требуются специальные драйвера. В составе любого ядра Linux, начиная с версии 2.2, входит стандартный драйвер для работы USB serial устройств под названием usbserial, его требуется загрузить сразу после загрузки модулей usbcore и usb-uhci (usb-ohci), так как данный драйвер содержит только протокол общения с устройствами USB-to-RS232, то для работы модемов ZyXEL Omni 56K PLUS & DUO необходим еще дополнительный драйвер, который будет общаться с модемами на аппаратном уровне и обмениваться данными по протоколу, который реализован в драйвере usbserial. Такой драйвер входит в стандартное ядро Linux и называется omninet, однако этот драйвер не будет работать с данными модемами, так как требуется дополнительная доработка этого драйвера на предмет Product ID. Патч для доработки драйвера omninet прилагается к данному описанию и называется omninet.diff, либо приведен ниже:

 --- drivers/usb/serial/omninet.c.orig 2002-11-29 02:53:15.000000000 +0300
 +++ drivers/usb/serial/omninet.c 2003-08-27 13:11:51.000000000 +0400
 @@ -66,6 +66,8 @@

 #define ZYXEL_VENDOR_ID          0x0586
 #define ZYXEL_OMNINET_ID         0x1000
 +#define ZYXEL_OMNI_56KPLUS_ID   0x1500
 +#define ZYXEL_OMNI_56K_DUO_ID   0x1512
 /* function prototypes */
  static int  omninet_open        (struct usb_serial_port *port, struct file *filp);
 @@ -78,6 +80,8 @@

 static struct usb_device_id id_table [] = {
 { USB_DEVICE(ZYXEL_VENDOR_ID, ZYXEL_OMNINET_ID) },
 + { USB_DEVICE(ZYXEL_VENDOR_ID, ZYXEL_OMNI_56KPLUS_ID) },
 +    { USB_DEVICE(ZYXEL_VENDOR_ID, ZYXEL_OMNI_56K_DUO_ID) },
  { } /* Terminating entry */
 };

Для установки патча необходимо произвести следущую процедуру в директории, где установлены исходные тексты вашего ядра:

 cp omninet.diff /usr/src/linux-2.4
 cd /usr/src/linux-2.4
 patch -p0 < omninet.diff

и затем собрать ваше ядро или модуль (предполагается, что ядро собиралось ранее и достаточно дать команду make modules, или ядро собирается заново). Если вас не устраивает данный метод, то можно воспользоваться сборкой отдельного драйвера omniusb и за место omninet загружать его. Данный метод не требует сборки всего ядра и каких-либо модификаций, но требуется наличие исходных кодов ядра, которые должны быть установлены из вашего дистрибутива. Если вы используете RedHat, ASPLinux и т.п., то вам необходимо произвести такие операции как make oldconfig и make dep, этого будет достаточно для правильной сборки драйвера omniusb. Помните, что бы запустить make oldconfig, вам необходимо скопировать нужный конфигурационный файл ядра из директории configs (например kernel-2.4.22-athlon.config) и переименовать его в .config:

 cd /usr/src/linux-2.4
 cp configs/kernel-2.4.22-athlon.config .config
 make oldconfig
 make dep

Необходимо произвести сборку драйвера:

 cp omniusb-1.1.tar.gz /usr/local/src
 cd /usr/local/src
 tar xvpzf omniusb-1.1.tar.gz
 cd omniusb-1.1
 make
 make install

Драйвер omniusb самостоятельный и расчитан только для работы модемов ZyXEL Omni 56K PLUS & DUO, при работе он не пересекается со стандартным драйвером omninet из ядра. После того, как драйвер был собран и установлен, необходимо проверить наличие устройств в директории /dev:

 ls -l /dev/ttyUSB*

 должны получить:
 crw-rw----    1 root     uucp     188,   0 Янв 30  2003 /dev/ttyUSB0
 crw-rw----    1 root     uucp     188,   1 Янв 30  2003 /dev/ttyUSB1
 crw-rw----    1 root     uucp     188,  10 Янв 30  2003 /dev/ttyUSB10
 crw-rw----    1 root     uucp     188,  11 Янв 30  2003 /dev/ttyUSB11
 crw-rw----    1 root     uucp     188,  12 Янв 30  2003 /dev/ttyUSB12
 crw-rw----    1 root     uucp     188,  13 Янв 30  2003 /dev/ttyUSB13
 crw-rw----    1 root     uucp     188,  14 Янв 30  2003 /dev/ttyUSB14
 crw-rw----    1 root     uucp     188,  15 Янв 30  2003 /dev/ttyUSB15
 crw-rw----    1 root     uucp     188,   2 Янв 30  2003 /dev/ttyUSB2
 crw-rw----    1 root     uucp     188,   3 Янв 30  2003 /dev/ttyUSB3
 crw-rw----    1 root     uucp     188,   4 Янв 30  2003 /dev/ttyUSB4
 crw-rw----    1 root     uucp     188,   5 Янв 30  2003 /dev/ttyUSB5
 crw-rw----    1 root     uucp     188,   6 Янв 30  2003 /dev/ttyUSB6
 crw-rw----    1 root     uucp     188,   7 Янв 30  2003 /dev/ttyUSB7
 crw-rw----    1 root     uucp     188,   8 Янв 30  2003 /dev/ttyUSB8
 crw-rw----    1 root     uucp     188,   9 Янв 30  2003 /dev/ttyUSB9

Если этой информации нет, то необходимо создать эти устройства:

 mknod /dev/ttyUSB0 c 188 0
 mknod /dev/ttyUSB1 c 188 1
 mknod /dev/ttyUSB2 c 188 2
 mknod /dev/ttyUSB3 c 188 3
 ...
 mknod /dev/ttyUSB254 c 188 254
 mknod /dev/ttyUSB255 c 188 255

Если планируется использовать только один модем, то рекомендуется создать линк для удобства c /dev/ttyUSB0 на /dev/modem и во всех конфигурациях требующих настройки порта модема, использовать этот линк. Так же может понадобиться установка дополнительных прав на устройства, по умолчанию 660, но может возникнуть необходимость в 666.

 ln -s /dev/ttyUSB0 /dev/modem

 и если надо

 chmod 666 /dev/ttyUSB0

Теперь, когда все процедуры по установки драйвера и проверки наличия нужных устройств закончены, необходимо загрузить драйверы в следующем порядке:

 insmod usbcore
 insmod usb-uhci (или usb-ohci)
 insmod usbserial
 insmod omniusb (или пропатченный omninet)

Примечание: insmod usbcore и insmod usb-uhci (или usb-ohci), требуется грузить в тех дистрибутивах ОС Linux, где нет наличия автоконфигурации, во всех дистрибутивах RedHat, SuSe, ASPLinux и т.п. этого делать не надо, поэтому достаточно загрузить:

 insmod usbserial
 insmod omniusb (или пропатченный omninet)

Что бы не грузить каждый раз в ручную usbserial и omniusb, можно вставить следущую строчку в /etc/modules.conf:

 alias char-major-188 usbserial
 install char-major-188 /sbin/insmod omniusb
 remove char-major-188 /sbin/rmmod omniusb

 или

 alias char-major-188 usbserial
 install char-major-188 /sbin/insmod omninet
 remove char-major-188 /sbin/rmmod omninet

Примечание: Данный метод может не работать, тогда нужно будет произвести установку по рекомендациям для настройки hotplug устройств... man hotplug или посетить сайт http://linux-hotplug.sourceforge.net/

P.S. Для RedHat-8/9 не требуется редактировать /etc/modules.conf если установлена поддержка hotplug, система сама автоматически находит нужные модули для загрузки и не требует какой-либо дополнительной конфигурации.

2. Подключение модема ZyXEL Omni 56K UNO по шине USB в ОС Linux.

Модем ZyXEL Omni 56K UNO имеет единственный интерфейс подключения к компьютеру - USB. Данный модем соответствует спецификации Universal Serial Bus Communication Device Class Abstract Control Model (USB CDC ACM) и поэтому использует стандартный драйвер acm из ядра. Для того, что бы загрузить драйвер acm необходимо проверить наличие нужных устройств в директории /dev:

 ls -l /dev/usb/ttyACM*

 должны получить:
 crw-rw----    1 root     uucp     166,   0 Янв 30  2003 /dev/usb/ttyACM0
 crw-rw----    1 root     uucp     166,   1 Янв 30  2003 /dev/usb/ttyACM1
 crw-rw----    1 root     uucp     166,  10 Янв 30  2003 /dev/usb/ttyACM10
 crw-rw----    1 root     uucp     166,  11 Янв 30  2003 /dev/usb/ttyACM11
 crw-rw----    1 root     uucp     166,  12 Янв 30  2003 /dev/usb/ttyACM12
 crw-rw----    1 root     uucp     166,  13 Янв 30  2003 /dev/usb/ttyACM13
 crw-rw----    1 root     uucp     166,  14 Янв 30  2003 /dev/usb/ttyACM14
 crw-rw----    1 root     uucp     166,  15 Янв 30  2003 /dev/usb/ttyACM15
 crw-rw----    1 root     uucp     166,   2 Янв 30  2003 /dev/usb/ttyACM2
 crw-rw----    1 root     uucp     166,   3 Янв 30  2003 /dev/usb/ttyACM3
 crw-rw----    1 root     uucp     166,   4 Янв 30  2003 /dev/usb/ttyACM4
 crw-rw----    1 root     uucp     166,   5 Янв 30  2003 /dev/usb/ttyACM5
 crw-rw----    1 root     uucp     166,   6 Янв 30  2003 /dev/usb/ttyACM6
 crw-rw----    1 root     uucp     166,   7 Янв 30  2003 /dev/usb/ttyACM7
 crw-rw----    1 root     uucp     166,   8 Янв 30  2003 /dev/usb/ttyACM8
 crw-rw----    1 root     uucp     166,   9 Янв 30  2003 /dev/usb/ttyACM9

Если этой информации нет, то необходимо создать эти устройства:

 mknod /dev/usb/ttyACM0 c 166 0
 mknod /dev/usb/ttyACM1 c 166 1
 и т.д.

Для удобства сделать линк на /dev/modem c /dev/usb/ttyACM0: ln -s /dev/usb/ttyACM0 /dev/modem если модем один, то этим и ограничиться... Пробуем загрузить драйвера в следующем порядке:

 insmod usbcore
 insmod usb-uhci (или usb-ohci)
 insmod acm

Если драйвер acm отсутствует, то нужно пересобрать ядро с поддержкой этого драйвера модулем, перегрузиться с новым ядром, и заново попробовать загрузить драйвера usbcore, usb-uhci (или usb-ohci), acm.

Примечание: Система автоконфигурирования kudzu находит модем и сама предлагает произвести установку драйвера, однако это может быть не корректно. Что бы не грузить каждый раз в ручную драйвер acm, можно вставить следущую строчку в /etc/modules.conf:

 alias char-major-166 acm

Примечание: Данный метод может не работать, тогда нужно будет произвести установку по рекомендациям для настройки hotplug устройств... man hotplug или посетить сайт http://linux-hotplug.sourceforge.net/

P.S. Для RedHat-8/9 не требуется редактировать /etc/modules.conf если установлена поддержка hotplug, система сама автоматически находит нужные модули для загрузки и не требует какой-либо дополнительной конфигурации.


15.09.2003 McMCC <mcmcc@mail.ru>



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости