Linux ACM driver (перевод) (USB модемы и USB ISDN TA в Linux)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
c3OS
Сообщения: 15

Linux ACM driver (перевод)

Сообщение c3OS »

Linux ACM driver v0.16
© 1999 Vojtech Pavlik <vojtech@suse.cz> Sponsored by SuSE
----------------------------------------------------------------------------

0. Disclaimer
~~~~~~~~~~~~~
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Should you need to contact me, the author, you can do so either by e-mail - mail your message to <vojtech@suse.cz>, or by paper mail: Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic

For your convenience, the GNU General Public License version 2 is included in the package: See the file COPYING.

1. Использование
~~~~~~~~
Драйверы drivers/usb/acm.c работают с модемами USB и адаптерами USB ISDN terminal, которые соответствуют спецификации Universal Serial Bus Communication Device Class Abstract Control Model (USB CDC ACM).

Много модемов поддерживают это, вот список тех, о которых я знаю:

3Com OfficeConnect 56k
3Com Voice FaxModem Pro
3Com Sportster
MultiTech MultiModem 56k
Zoom 2986L FaxModem
Compaq 56k FaxModem
ELSA Microlink 56k

Я знаю об одном ISDN TA, который действительно работает с драйвером acm:

3Com USR ISDN Pro TA

К сожалению много модемов и большинство ISDN TAs используют частные интерфейсы и таким образом не будут работать с этим драйвером. Проверьте совместимость с ACM перед покупкой.

Драйвер (с devfs) создает эти устройства в /dev/usb/acm:

crw-r--r-- 1 root root 166, 0 Apr 1 10:49 0
crw-r--r-- 1 root root 166, 1 Apr 1 10:49 1
crw-r--r-- 1 root root 166, 2 Apr 1 10:49 2

И так далее, до 31, с пределом, который возможно изменить в acm.c до 256, так что Вы можете использовать до 256 модемов USB с одним компьютером (Хотя вы будете нуждаться для этого в трех платах USB).

Если Вы не используете devfs, то Вы можете создать device nodes с теми же самыми номерами minor/major, где Вы хотите, но вышеупомянутое местоположение или /dev/usb/ttyACM0 предпочтительны.

Чтобы использовать модемы, Вы нуждаетесь в этих загруженных модулях:

usbcore.o
usb-[uo]hci.o or uhci.o
acm.o

После этого модем [ы] должно быть доступны. Вы должны быть способны использовать minicom, ppp и mgetty с ними.

2. Проверка работоспособности
~~~~~~~~~~~~~~~~~~~~~~~~~~
Первым шагом должен быть проверен /proc/bus/usb/devices, это должно выглядеть следующим образом:

Код: Выделить всё

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=6800
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.00 Cls=02(comm.) Sub=00 Prot=00 MxPS= 8 #Cfgs=  2
P:  Vendor=04c1 ProdID=008f Rev= 2.07
S:  Manufacturer=3Com Inc.
S:  Product=3Com U.S. Robotics Pro ISDN TA
S:  SerialNumber=UFT53A49BVT7
C:  #Ifs= 1 Cfg#= 1 Atr=60 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=acm
E:  Ad=85(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
C:* #Ifs= 2 Cfg#= 2 Atr=60 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=acm
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=acm
E:  Ad=85(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms


Присутствие этих трех строк (и Cls= 'comm' и классы 'данных') важно, это означает, что это - устройство ACM. Driver=acm означает, что acm driver используется для устройства. Если Вы видите только Cls=ff(vend.), тогда Вам не повезло, Вы имеете устройство с частным интерфейсом производителя.

Код: Выделить всё

D:  Ver= 1.00 Cls=02(comm.) Sub=00 Prot=00 MxPS= 8 #Cfgs=  2
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=acm
I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=acm

В system log Вы должны видеть:

Код: Выделить всё

usb.c: USB new device connect, assigned device number 2
usb.c: kmalloc IF c7691fa0, numif 1
usb.c: kmalloc IF c7b5f3e0, numif 2
usb.c: skipped 4 class/vendor specific interface descriptors
usb.c: new device strings: Mfr=1, Product=2, SerialNumber=3
usb.c: USB device number 2 default language ID 0x409
Manufacturer: 3Com Inc.
Product: 3Com U.S. Robotics Pro ISDN TA
SerialNumber: UFT53A49BVT7
acm.c: probing config 1
acm.c: probing config 2
ttyACM0: USB ACM device
acm.c: acm_control_msg: rq: 0x22 val: 0x0 len: 0x0 result: 0
acm.c: acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
usb.c: acm driver claimed interface c7b5f3e0
usb.c: acm driver claimed interface c7b5f3f8
usb.c: acm driver claimed interface c7691fa0


Если все, это окажется успешным, запустите minicom для устройства ttyACM, который пробует напечатать 'AT'. Если это отвечает с 'OK', то все работает.
Спасибо сказали: