Linux环境使用中移动TD上网卡实录


[背景] 

上周三,高升桥有个会。到了会议室,赶紧拿出本本,想看看LINUX环境能否通过信息中心的无线上网安全认证,几经周折,CMCC的网络能连接上,网关也能ping通,但就TM不能打开网页。后来想想这种方式不用试也知道肯定是行不通的,因为信息中心早就要求过,要登录公司网络,必须安装安全认证终端软件。问题是这个软件只有WINDOWS版本,并无LINUX版本。其实,也有一个解决方案——WINEWINE全称叫Wine Is Not an Emulator,呵呵,又一个GNUGNU's Not Unix)风格的命名,典型的程序员玩笑。我这个人有点偏执,一直认为在LINUX环境下装个转换层来运行WIN程序是种不伦不类的行为,宁愿不用这个程序。没辙,这条路走不同,想其他方法。

09年夏,公司为增强员工移动办公效率(也可以视为福利啦),同时也是为测试TD网络,特为每人配备了一个G3上网卡。当时有两类品牌,华为和中兴,我选的是华为的,毕竟是国际大牌子,哈哈。以前在WINDOWS环境下用过几次,感觉效果还不错,下载电影一般能达到130KBS左右的速度(没买的赶快弄一个,@_@),后来转到LINUX环境,由于没有对应驱动,家里有宽带、单位又有台式机,也就没花时间去研究G3上网卡如何在LINUX中使用。嘿,这次找到使用场景了,想法在LINUX下驱动G3上网卡,以后开会就不会再回到没有网络的原始社会啦~~~

[环境]

笔记本:     THINKPAD T410I

操作系统:  openSUSE 11.3

内核:        2.6.34.7

G3上网卡: HUAWEI G3 ET 18,型号好像是这个,背面磨花了)

应用程序:  usb_modeswitchwvdial

 

[原理]

 

非常简单,先识别设备,再拨号联网,搞定。想急着操作的童鞋直接调到下节,要了解细节的朋友继续哈。

1.      系统识别G3上网卡。HUAWEI G3上网卡官方只发布过WIN下的驱动,并未见LINUX下的,如何让LINUX识别它?告诉你,其实你电脑里早就安装好它的驱动程序,只是你不知道罢了。不信,试试,先插好上网卡,执行lsusb | grep “Huawei”,系统提示Bus 002 Device 003: ID 12d1:1da1 Huawei Technologies Co., Ltd.信息则说明驱动程序已经安装好了。我明明没下载LINUX下的驱动程序,更没点击安装,怎么会自动就有了呢?这个还得说说LINUXWINDOWS对驱动程序的不同管理方式,简单地说,LINUX将世面常见设备驱动程序都包含在内核中,无须单独下载,WIN则需要到设备官网单独下载安装,至于为何LINUX要采用这种方式则不在本文探讨范围内。那系统既然已经识别到上网卡,是否可以立即使用?不行!LINUX虽识别到它,但默认是把他视为一个USB的存储设备,你必须想法告诉系统,这个东东不是简单的U盘,而是个具备拨号功能的MODEN,如何告诉,哒哒哒哒哒哒~~,上面让你准备的usb_modeswitch派上用场了,从这个程序名可以看出来,它能实现USB设备模式切换的功能;

2.      G3上网卡拨号上网。好了,现在系统正确识别到你的G3上网卡,执行拨号命令即可大功告成,wvdial,简单应用的拨号程序。

 

[操作]

 

1.      获取G3上网卡USB信息。执行

lsusb | grep “Huawei”

系统显示类似如下

Bus 002 Device 003: ID 12d1:1da1 Huawei Technologies Co., Ltd.

记录下你对应12d1:1da1位置的信息;

2.      G3上网卡从U盘模式转换为MODEN模式。

1)       指定要进行模式转换的设备。用如下信息替换/etc/usb_modeswitch.conf内容

DefaultVendor=0x12d1

DefaultProduct=0x1da1

TargetVendor=0x12d1

TargetProduct=0x1da1

HuaweiMode=1

2)       进行模式转换。执行

usb_modeswitch -c /etc/usb_modeswitch.conf

显示如下信息

Looking for target devices ...

 Found devices in target mode or class (1)

Looking for default devices ...

 Found devices in default mode or class (1)

Accessing device 012 on bus 001 ...

Using endpoints 0x05 (out) and 0x85 (in)

Inquiring device details; driver will be detached ...

Looking for active driver ...

 OK, driver found ("dummy")

 OK, driver "dummy" detached

 

SCSI inquiry data (for identification)

-------------------------

  Vendor String: HUAWEI

   Model String: Mobile CMCC CD

Revision String: 1.25

-------------------------

 

USB description data (for identification)

-------------------------

Manufacturer: HUAWEI Mobile

     Product: HUAWEI Mobile System Solution

  Serial No.: 111111-11-111111

-------------------------

Sending Huawei control message ...

 OK, Huawei control message sent

-> Run lsusb to note any changes. Bye.

注:这一步可能命令执行过程可能僵死,重新插拔试下

3)       转换完成。执行第一步命令显示如下信息

Bus 002 Device 009: ID 12d1:1d09 Huawei Technologies Co., Ltd.

如果先前的1da1变为 1d09那么恭喜你,最重要一步已经成功了;

4)       确认是否生成对应设备。执行

ls /dev/ttyA*

输出

ttyACM0  ttyACM1  ttyACM2

3.      MODEN拨号上网。

1)       生成G3上网卡拨号配置文件。执行

wvdialconf

输出
Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

Modem Port Scan<*1>: S0 S1 S2 S3
WvModem<*1>: Cannot get information for serial port.
ttyACM0<*1>: ATQ0 V1 E1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 Z -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM0<*1>: Modem Identifier: ATI -- Manufacturer: HuaWei
ttyACM0<*1>: Speed 4800: AT -- OK
ttyACM0<*1>: Speed 9600: AT -- OK
ttyACM0<*1>: Speed 19200: AT -- OK
ttyACM0<*1>: Speed 38400: AT -- OK
ttyACM0<*1>: Speed 57600: AT -- OK
ttyACM0<*1>: Speed 115200: AT -- OK
ttyACM0<*1>: Speed 230400: AT -- OK
ttyACM0<*1>: Speed 460800: AT -- OK
ttyACM0<*1>: Max speed is 460800; that should be safe.
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
WvModem<*1>: Cannot get information for serial port.
ttyACM1<*1>: ATQ0 V1 E1 -- OK
ttyACM1<*1>: ATQ0 V1 E1 Z -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM1<*1>: Modem Identifier: ATI -- Manufacturer: HuaWei
ttyACM1<*1>: Speed 4800: AT -- OK
ttyACM1<*1>: Speed 9600: AT -- OK
ttyACM1<*1>: Speed 19200: AT -- OK
ttyACM1<*1>: Speed 38400: AT -- OK
ttyACM1<*1>: Speed 57600: AT -- OK
ttyACM1<*1>: Speed 115200: AT -- OK
ttyACM1<*1>: Speed 230400: AT -- OK
ttyACM1<*1>: Speed 460800: AT -- OK
ttyACM1<*1>: Max speed is 460800; that should be safe.
ttyACM1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
WvModem<*1>: Cannot get information for serial port.
ttyACM2<*1>: ATQ0 V1 E1 -- OK
ttyACM2<*1>: ATQ0 V1 E1 Z -- OK
ttyACM2<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM2<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM2<*1>: Modem Identifier: ATI -- Manufacturer: HuaWei
ttyACM2<*1>: Speed 4800: AT -- OK
ttyACM2<*1>: Speed 9600: AT -- OK
ttyACM2<*1>: Speed 19200: AT -- OK
ttyACM2<*1>: Speed 38400: AT -- OK
ttyACM2<*1>: Speed 57600: AT -- OK
ttyACM2<*1>: Speed 115200: AT -- OK
ttyACM2<*1>: Speed 230400: AT -- OK
ttyACM2<*1>: Speed 460800: AT -- OK
ttyACM2<*1>: Max speed is 460800; that should be safe.
ttyACM2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found an USB modem _disibledevent=0 &C1 &D2 +FCLASS=0"
ttyACM1<Info>: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
ttyACM2<Info>: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

2)       修改拨号配置文件。将/etc/wvdial.conf文件内容替换为

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Password = any
Phone = *99***1#
Modem Type = USB Modem
Stupid Mode = 1
Baud = 460800
New PPPD = yes
Modem = /dev/ttyACM0
ISDN = 0
username = any

3)       拨号。执行

wvdial

输出

--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT 2800000
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Mon Jun 22 11:11:50 2009
--> Pid of pppd: 4134
--> Using interface ppp0
--> local IP address 10.140.162.111
--> remote IP address 192.200.1.21
--> primary DNS address 221.130.33.60
--> secondary DNS address 221.130.33.52

--> Connected... Press Ctrl-C to disconnect

注:拨号前,必须先关闭系统自带的网络管理程序。在openSUSE中,你可以这样:Yast中,Network Devices --> Network Settings --> Globa Options --> Network Setup Methods --> Traditional method with ifup (instead of Network Manager)

 

好了,享受中移动TD高速上网的乐趣吧~~~

相关内容