如何在龙芯小本(8089b)实现电信3G CDMA2000上网

软硬件环境

1) 龙芯小本:龙梦公司的yeeloong 8089b, cpu: loongson 2f 800MHz
2) 中国电信天翼CDMA2000 上网卡: 华为 EC1260
3)操作系统: Debian 5.0  Linux 2.6.30
ps. 都是从刘工的那里下载安装的。如果安装可以参见我的另外一篇blog。至于内核,也不一定要那么高版本,只要查上上网卡后,lsusb能找到就好了,至少2.6.27就可以识别出来了。

方法概览
网上有很多在x86架构、Linux上,使用cdma2000上网卡的文章,其大部分使用了wvdial。但是此方法在loongson下不适用,至少我没有成功。一个问题是在Debian lenny 安装的glibc 2.7版本,函数getcontext在mips架构下没有实现,造成wvdial调用失败,这个需要升级到glibc 2.9-9以上版本解决(Debian squeeze就可以了)。
另一个问题,在解决了getcontext之后,wvdial还是会在拨号的时候退出,输出如下:
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATX0
ATX0
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
^HRSSILVL:40
--> Modem initialized.
--> Sending: ATM1L3DT#777
--> Waiting for carrier.
ATM1L3DT#777

此时就会退回shell,不会显示CONNECT,启动pppd等。

所以,需要直接使用pppd进行拨号。我主要参考这篇文章

http://www.geocities.com/kream77/internet_gentoo_linux_connect_reliance_...


具体步骤如下:

1)将上网卡插到本上,使用lsusb,看看是否被识别出来,比如我的输出为
Bus 004 Device 009: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem
只要类似就可以了。

2)使用pppconfig配置pppd。有几个要点
(a)电话好嘛是 #777
(b)用户名是 ctnet@mycdma.cn
(c)密码是 vnet.mobi
(d) 设备是 /dev/ttyUSB0
在设置设备的时候,我使用pppconfig总是不能输入正确的值,后来我直接修改的 /etc/ppp/peers 目录下的连接文件,比如缺省的就是provider
(e) 端口波特率是 460800
(f) 认证方式是 PAP

如下是我的provider文件内容:
# This optionfile was generated by pppconfig 2.3.18.
#
#
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/provider"
debug
/dev/ttyUSB0
460800
defaultroute
noipdefault
user "ctnet@mycdma.cn"
remotename provider
ipparam provider


3) 在shell下,运行pon 拨号上网,poff断线。可以查看 /var/log/messages 输出信息。
比如我的信息为:
Jul 29 14:34:41 yeeloong pppd[10077]: pppd 2.4.4 started by root, uid 0
Jul 29 14:34:41 yeeloong pppd[10077]: Removed stale lock on ttyUSB0 (pid 9939)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (BUSY)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (NO CARRIER)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (VOICE)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (NO DIALTONE)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (NO DIAL TONE)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (NO ANSWER)
Jul 29 14:34:42 yeeloong chat[10080]: abort on (DELAYED)
Jul 29 14:34:42 yeeloong chat[10080]: send (ATZ^M)
Jul 29 14:34:43 yeeloong chat[10080]: expect (OK)
Jul 29 14:34:43 yeeloong chat[10080]: ATZ^M^M
Jul 29 14:34:43 yeeloong chat[10080]: OK
Jul 29 14:34:43 yeeloong chat[10080]:  -- got it
Jul 29 14:34:43 yeeloong chat[10080]: send (ATDT#777^M)
Jul 29 14:34:43 yeeloong chat[10080]: expect (CONNECT)
Jul 29 14:34:43 yeeloong chat[10080]: ^M
Jul 29 14:34:43 yeeloong chat[10080]: ATDT#777^M^M
Jul 29 14:34:43 yeeloong chat[10080]: CONNECT
Jul 29 14:34:43 yeeloong chat[10080]:  -- got it
Jul 29 14:34:43 yeeloong chat[10080]: send (\d)
Jul 29 14:34:44 yeeloong pppd[10077]: Serial connection established.
Jul 29 14:34:44 yeeloong pppd[10077]: Using interface ppp0
Jul 29 14:34:44 yeeloong pppd[10077]: Connect: ppp0 <--> /dev/ttyUSB0
Jul 29 14:34:47 yeeloong pppd[10077]: PAP authentication succeeded
Jul 29 14:34:47 yeeloong pppd[10077]: local  IP address 115.171.236.27
Jul 29 14:34:47 yeeloong pppd[10077]: remote IP address 115.168.64.80
Jul 29 14:34:47 yeeloong pppd[10077]: primary   DNS address 219.141.136.10
Jul 29 14:34:47 yeeloong pppd[10077]: secondary DNS address 219.141.140.10

评论

对了,这篇博文就是用小本+电信3g写的。

速度还不错,哈哈。

不错

有个小问题, lsusb能够看到,并不代表能够驱动,

在dmesg里能够看到, 并且在/dev/ttyACMx或者  /dev/ttyUSBx能出来,才行。

我在编译所有的内核的时候,usb的串口是肯定要全部编译成模块的, 就是为了各种杂七杂八的2G,2.5G,3G上网卡,哈哈

呵呵,是的。但是至

呵呵,是的。但是至少lsusb要能看到。如果没有/dev/ttyUSBx之类的东西,blog中提到的那篇参考文献里面也有一些提示办法。

此外,感谢你编译好的内核:-) 省了我们很多事情,哈哈。