一、环境
  1.linux kernel 2.6.34
  2.华为E3131
二、相关工具
  1.usb-modeswitch-1.2.5
    http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.5.tar.bz2
  2.usb-modeswitch-data
    http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20121109.tar.bz2
  3.libusb-0.1.12
    http://sourceforge.net/projects/libusb/files/libusb-0.1%20%28LEGACY%29/0.1.12/
  4.usb_modeswitch-1.1.9-arm-static
    http://www.draisberghof.de/usb_modeswitch/usb_modeswitch-1.1.9-arm-static.bz2
三、交叉编译usb_modeswitch(不想编译的请使用usb_modeswitch-1.1.9-arm-static)
  1.交叉编译libusb
    CC="arm-linux-gcc" CXX="arm-linux-g++" ./configure --host=arm-linux --prefix=XXX
  2.交叉编译usb_modeswitch
    修改Makefile
      CC = arm-linux-gcc
      CFLAGS += -static -Wall -IXXX -LXXX //指向libusb的头文件和库文件
    拷贝usb-modeswitch-data-20121109/usb_modeswitch.d/12d1\:14fe作为配置文件
    修改为

 1 # T-Mobile NL (Huawei E352)
 2 
 3 DefaultVendor= 0x12d1
 4 DefaultProduct= 0x14fe
 5 
 6 TargetVendor= 0x12d1
 7 TargetProduct= 0x1506
 8 
 9 MessageEndpoint= 0x01
10 #MessageContent= "55534243000000000000000000000011060000000100000000000000000000"
11 MessageContent= "55534243123456780000000000000011062000000100000000000000000000"
12 CheckSuccess= 20

四、修改内核驱动

 1 --- ./linux-2.6.34_orig/drivers/usb/serial/option.c 2010-05-16 17:17:36.000000000 -0400
 2 +++ ./linux-2.6.34/drivers/usb/serial/option.c 2013-04-24 05:35:21.266102872 -0400
 3 @@ -167,6 +167,7 @@
 4 #define HUAWEI_PRODUCT_E143E 0x143E
 5 #define HUAWEI_PRODUCT_E143F 0x143F
 6 #define HUAWEI_PRODUCT_E14AC 0x14AC
 7 +#define HUAWEI_PRODUCT_E3131 0x1506
 8 
 9 #define QUANTA_VENDOR_ID 0x0408
10 #define QUANTA_PRODUCT_Q101 0xEA02
11 @@ -497,6 +498,7 @@
12 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
13 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
14 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
15 + { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E3131) },
16 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) },
17 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
18 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ 

五、利用usb_modeswitch进行模式转换

1 ./usb_modeswitch -W –c ./12d1\:14fe

如有以下打印即为成功:

 1 option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
 2 
 3 option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
 4 
 5 option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
 6 
 7 option1 ttyUSB3: GSM modem (1-port) converter now disconnected from ttyUSB3
 8 
 9 usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
10 
11 usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
12 
13 usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2
14 
15 usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3

六、交叉编译pppd和chat工具,并编写拨号脚本
  1.编译pppd和chat工具的过程比较简单,略。

1 pppd call WCDMA&

  2.脚本如下:

WCDMA:

 1 nodetach
 2 lock
 3 /dev/ttyUSB0
 4 115200
 5 user "card"
 6 password "card"
 7 crtscts
 8 show-password
 9 usepeerdns
10 noauth
11 noipdefault
12 novj
13 novjccomp
14 noccp
15 defaultroute
16 ipcp-accept-local
17 ipcp-accept-remote
18 connect '/opt/chat -s -v -f /opt/chat-wcdma-connect'
19 disconnect '/opt/chat -s -v -f /opt/chat-wcdma-disconnect'  

chat-wcdma-connect:

 1 ABORT 'NO CARRIER'
 2 ABORT 'ERROR'
 3 ABORT 'NO DIALTONE'
 4 ABORT 'BUSY'
 5 ABORT 'NO ANSWER'
 6 '' /rAT
 7 OK /rATZ
 8 OK /rAT+CGDCONT=1,"IP","3gnet",,0,0
 9 OK-AT-OK ATDT*99#
10 CONNECT /d/c

chat-wcdma-disconnect:

1 ABORT "BUSY"
2 ABORT "ERROR"
3 ABORT "NO DIALTONE"
4 SAY "/nSending break to the modem/n"
5 '' "/K"
6 '' "+++ATH"
7 SAY "/nGoodbay/n"

七、如拨号成功,要注意dns的设置和默认路由的设置

1 cat /etc/resolv.conf
2 route
posted on 2013-06-06 13:26  孜求嵌道  阅读(4327)  评论(0编辑  收藏  举报