传统3G上网卡几乎都采用modem形式,支持usb插口。通过usb指令转串口指令发给modem实现modem初始化并实现上网.
由此可以考虑在linux下实现usb指令到串口指令转换的驱动以驱动modem实现上网,各个平台的linux内核中都有usbserial
模块,该模块是可以驱动modem上网的,因此可以考虑使用usbserial模块驱动3G网卡上网。
Usb_modeswitch是对USB设备的工作模式进行转换一种万能工具,当然这种宝贝,只有在linux下才能体现其巨大的作用。
随着移动通信,无线通信的发展,越来越多的设备被制作成USB接口,像一些无线网卡,3G数据卡等等。
这些设备的厂家一般都会提供windows 下驱动,这些设备在第一次插上机子的时候,它们处于CDROM+闪存模式,
可以从中提供驱动程序安装驱动,在驱动程序安装完成后,驱动会转换成3G模式,此时就会出现usb modem设备,
目前的3G卡片全都是这样,这就是所谓的“ZeroCD”。
而在linux下我们可没有那么好的待遇,厂家一般不会给我们提供linux下面的驱动,而目前的内核还不能自动识别并驱动。
所以我们需要用usb_modeswitch这个工具来进行模式转换,设备模式依赖usb-storage和usbserial模式,
所以,在开发板上需要有这两种模块的支持,设备并能够正常工作于这两种模式下。
usb_modeswitch的正常工作依赖于Libusb所以我们还需要在内核中添加这个库。
如果内核中不包括上述工具可以到一下地址下载:
libusb源码下载: http://sourceforge.net/projects/libusb/files/libusb-1.0/
usb_modeswitcch下载: http://www.draisberghof.de/usb_modeswitch/
usb-modeswitch-data: http://www.draisberghof.de/usb_modeswitch/
Device Drivers
Network device support --->
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
[*] PPP filtering
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
< > PPP MPPE compression (encryption) (EXPERIMENTAL)
<*> PPP over Ethernet (EXPERIMENTAL)
< > PPP over L2TP (EXPERIMENTAL)
< > PPTP (Point-to-Point Tunneling Protocol) (EXPERIMENTAL)
(ppp用于拨号)
Device Drivers
USB support --->
[*] USB device filesystem
<*> USB Modem (CDC ACM) support
USB Serial Converter support --->
[*] USB Generic Serial Driver
<*> USB driver for GSM and CDMA modems
(用于支持usb转串口)
Library Configuration --->
[*] Build libusb-0.1.12
(添加libusb库)
Miscellaneous Applications --->
[*] usb_modeswitch
Pl2303.h:
#define ZTE_VENDOR_ID 0x19d2
#define ZTE_PRODUCT_ID 0xfff5
这里两个数值可以通过在linux环境下用lsusb查询到
Pl2303.c:
在static struct usb_device_id id_table []最后加入
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_ID) },
option.c :
首先加入
#define ZTE_PRODUCT_CDMA_TECH6 0xfff1
其中0xfff1为运行过usb_modeswitch之后设备被转换成的编号,可以在pc机上试验取得
然后在static struct usb_device_id option_ids[]最后加入
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH6) },
其内容为:
DefaultVendor= 0x19d2
DefaultProduct= 0xfff5
TargetVendor= 0x19d2
TargetProduct= 0xfff1
MessageContent="5553424312345678c00000008000069f030000000000000000000000000000"
MessageEndpoint=0x0a
-----------------------------------------------------------------------------------------------------------------------------------------------------
到这里上网卡移植就结束了,然后进行拨号:
pppd connect 'chat -v "" "AT" "OK" "ATZ" "OK" "ATDT#777 CONNECT"' user card password card /dev/ttyUSB0 115200 nodetach noauth nocrtscts modem noipdefault debug usepeerdns defaultroute ipcp-accept-local noccp
由此可以考虑在linux下实现usb指令到串口指令转换的驱动以驱动modem实现上网,各个平台的linux内核中都有usbserial
模块,该模块是可以驱动modem上网的,因此可以考虑使用usbserial模块驱动3G网卡上网。
Usb_modeswitch是对USB设备的工作模式进行转换一种万能工具,当然这种宝贝,只有在linux下才能体现其巨大的作用。
随着移动通信,无线通信的发展,越来越多的设备被制作成USB接口,像一些无线网卡,3G数据卡等等。
这些设备的厂家一般都会提供windows 下驱动,这些设备在第一次插上机子的时候,它们处于CDROM+闪存模式,
可以从中提供驱动程序安装驱动,在驱动程序安装完成后,驱动会转换成3G模式,此时就会出现usb modem设备,
目前的3G卡片全都是这样,这就是所谓的“ZeroCD”。
而在linux下我们可没有那么好的待遇,厂家一般不会给我们提供linux下面的驱动,而目前的内核还不能自动识别并驱动。
所以我们需要用usb_modeswitch这个工具来进行模式转换,设备模式依赖usb-storage和usbserial模式,
所以,在开发板上需要有这两种模块的支持,设备并能够正常工作于这两种模式下。
usb_modeswitch的正常工作依赖于Libusb所以我们还需要在内核中添加这个库。
如果内核中不包括上述工具可以到一下地址下载:
libusb源码下载: http://sourceforge.net/projects/libusb/files/libusb-1.0/
usb_modeswitcch下载: http://www.draisberghof.de/usb_modeswitch/
usb-modeswitch-data: http://www.draisberghof.de/usb_modeswitch/
以中兴AC2726为例进行移植过程如下:
-----------------------------------------------------------------------------------------------------------------------------------------------------
Device Drivers
Network device support --->
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
[*] PPP filtering
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
< > PPP MPPE compression (encryption) (EXPERIMENTAL)
<*> PPP over Ethernet (EXPERIMENTAL)
< > PPP over L2TP (EXPERIMENTAL)
< > PPTP (Point-to-Point Tunneling Protocol) (EXPERIMENTAL)
(ppp用于拨号)
Device Drivers
USB support --->
[*] USB device filesystem
<*> USB Modem (CDC ACM) support
USB Serial Converter support --->
[*] USB Generic Serial Driver
<*> USB driver for GSM and CDMA modems
(用于支持usb转串口)
Library Configuration --->
[*] Build libusb-0.1.12
(添加libusb库)
Miscellaneous Applications --->
[*] usb_modeswitch
(添加usb_modeswitch模块)
-----------------------------------------------------------------------------------------------------------------------------------------------------
内核配置到这里就已经完成,然后需要修改option.c , Pl2303.c , Pl2303.h手动添加所要移植的3g设备信息;
(windows下使用usbviewer查看网卡的信息,主要是VENDOR_ID,PRODUCT_ID,MessageEndpoint)
Pl2303.h:
#define ZTE_VENDOR_ID 0x19d2
#define ZTE_PRODUCT_ID 0xfff5
这里两个数值可以通过在linux环境下用lsusb查询到
Pl2303.c:
在static struct usb_device_id id_table []最后加入
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_ID) },
option.c :
首先加入
#define ZTE_PRODUCT_CDMA_TECH6 0xfff1
其中0xfff1为运行过usb_modeswitch之后设备被转换成的编号,可以在pc机上试验取得
然后在static struct usb_device_id option_ids[]最后加入
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH6) },
-----------------------------------------------------------------------------------------------------------------------------------------------------
其内容为:
DefaultVendor= 0x19d2
DefaultProduct= 0xfff5
TargetVendor= 0x19d2
TargetProduct= 0xfff1
MessageContent="5553424312345678c00000008000069f030000000000000000000000000000"
MessageEndpoint=0x0a
-----------------------------------------------------------------------------------------------------------------------------------------------------
到这里上网卡移植就结束了,然后进行拨号:
pppd connect 'chat -v "" "AT" "OK" "ATZ" "OK" "ATDT#777 CONNECT"' user card password card /dev/ttyUSB0 115200 nodetach noauth nocrtscts modem noipdefault debug usepeerdns defaultroute ipcp-accept-local noccp