一、環境
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