Linux ACM 驱动 v0.16

版权所有 (c) 1999 Vojtech Pavlik <vojtech@suse.cz>

由 SuSE 赞助

0. 免责声明

本程序是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;可以选择许可证的第 2 版,或(根据您的选择)任何更高版本。

本程序的分发是希望它能发挥作用,但不提供任何担保;甚至不提供适销性或适用于特定用途的暗示担保。有关更多详细信息,请参阅 GNU 通用公共许可证。

您应该已收到随本程序一起分发的 GNU 通用公共许可证的副本;如果没有,请致信自由软件基金会,地址为 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA。

如果您需要联系我,即作者,可以通过电子邮件发送消息到 <vojtech@suse.cz> 或通过纸质邮件:Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic

为了您的方便,软件包中包含 GNU 通用公共许可证的第 2 版:请参阅文件 COPYING。

1. 用法

drivers/usb/class/cdc-acm.c 驱动程序适用于符合通用串行总线通信设备类抽象控制模型 (USB CDC ACM) 规范的 USB 调制解调器和 USB ISDN 终端适配器。

许多调制解调器都符合该规范,以下是我知道的一些列表:

  • 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

一些手机也通过 USB 连接。我知道以下手机可以使用:

  • 索尼爱立信 K800i

不幸的是,许多调制解调器和大多数 ISDN TA 使用专有接口,因此无法与此驱动程序配合使用。购买前请检查是否符合 ACM 标准。

要使用调制解调器,需要加载以下模块:

usbcore.ko
uhci-hcd.ko ohci-hcd.ko or ehci-hcd.ko
cdc-acm.ko

之后,应该可以访问调制解调器。您应该能够将 minicom、ppp 和 mgetty 与它们一起使用。

2. 验证是否正常工作

第一步是检查 /sys/kernel/debug/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’ 和 ‘data’ 类)的存在很重要,这意味着它是一个 ACM 设备。Driver=acm 表示该设备使用 acm 驱动程序。如果您只看到 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

在系统日志中,您应该看到:

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”,则一切正常。