Chinaunix首页 | 论坛 | 博客
  • 博客访问: 576149
  • 博文数量: 836
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 4995
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 16:55
文章分类

全部博文(836)

文章存档

2008年(836)

我的朋友

分类: LINUX

2008-08-22 17:41:35

 
一直用着一款波乐5100的CDMA无线上网卡,PCMCIA插槽式的。早先在WINDOWS下,该卡的安装就特别蹊跷,需要先插卡,然后运行驱动程序安装包,期间需要将卡拔出,再次插卡才能识别。

而现在系统替换为SUSE10.2,我还能方便的使用它吗?我很疑惑。动手之前,我的理解是,首先,该卡插到PCMCIA后,系统应该能够将它识别为一个modem设备,否则就无法拨号。基于这一考虑,我将卡插入了PCMCIA槽。在YaST里,系统似乎没有自动识别出任何modem设备——这很让我遗憾。开始上网查找资料,试图借鉴其它人的成功经验来解决此问题。然而结果更加让我遗憾,大多数的文章似乎都出自一人之手,其它人都只是不加任何修饰的转载抄袭。这些文章主要聚焦于USB口的CDMA上网卡连接LINUX后的上网问题,并不适用于我的情况。仅有一篇文章在提到该问题时提到过,在LINUX下,PCMCIA设备最终也是通过USB设备模拟来工作的,并且提供了一个通过对内核编译加入对PCMCIA支持的链接。

仔细查看了SUSE10。2的内核编译选项,发现它已经支持PCMCIA了。道路似乎已经走到尽头,怎么办?发扬自力更生的精神,自己解决吧!

使用root登录系统后,开个终端窗口,在窗口中运行:
tail-f/var/log/message

将CDMA卡从槽中拔出插入,看到窗口中的输出:
Oct221:20:34SuSE-Brookskernel:pccard:cardejectedfromslot0
Oct221:20:40SuSE-Brookskernel:pccard:PCMCIAcardinsertedintoslot0
Oct221:20:40SuSE-Brookskernel:pcmcia:registeringnewdevicepcmcia0.0
Oct221:20:40SuSE-Brookskernel:ttyS1:detectedcaps00000700shouldbe00000100
Oct221:20:40SuSE-Brookskernel:0.0:ttyS1atI/O0x6100(irq=3)isa16C950/954

显然,SuSE已经认识我的PCMCIA槽,并且能够将该槽中插入的设备登记到ttyS1上了!这确实是个非常让人振奋的消息,至少说明我并不需要到处去找驱动,到处去编译安装!但是为什么YaST中的modem安装为什么没能找到这个设备呢?我们手工来测试测试吧。测试前需要准备一个软件:wvdial。在我的系统中,安装的是:wvdial-1.54-103。没有安装该软件的话,请到YaST的软件安装中搜索该软件并装上它。

wvdial提供了两个有用的程序:wvdial、wvdialconf,前者用于进行拨号连接,后者用于拨号配置,并产生文件:/etc/wvdial.conf。

在窗口中运行wvdialconf:
wvdialconf/etc/wvdial.conf
Scanningyourserialportsforamodem.

ttyS0<*1>:ATQ0V1E1--failedwith2400baud,nexttry:9600baud
ttyS0<*1>:ATQ0V1E1--failedwith9600baud,nexttry:115200baud
ttyS0<*1>:ATQ0V1E1--andfailedtooat115200,givingup.
ttyS1<*1>:ATQ0V1E1--failedwith2400baud,nexttry:9600baud
ttyS1<*1>:ATQ0V1E1--failedwith9600baud,nexttry:115200baud
ttyS1<*1>:ATQ0V1E1--andfailedtooat115200,givingup.
PortScan<*1>:S2S3
ttyS4:Nosuchdeviceoraddress
PortScan<*1>:S4
ttyS5:Nosuchdeviceoraddress
PortScan<*1>:S5
ttyS6:Nosuchdeviceoraddress
PortScan<*1>:S6
ttyS7:Nosuchdeviceoraddress
PortScan<*1>:S7

Sorry,nomodemwasdetected!Isitinusebyanotherprogram?
Didyouconfigureitproperlywithsetserial?

PleasereadtheFAQat

Ifyoustillhaveproblems,sendmailtowvdial-list@lists.nit.ca.

wvdialconf似乎扫描到ttyS0和ttyS1,并依次扫描到ttyS7,从输出中看出,ttyS0和ttyS1设备存在但是设备无法工作,而其它设备不存在。

运行wvdial碰碰运气:
SuSE-Brooks:~#wvdial
-->WvDial:Internetdialerversion1.54.0
-->Cannotopen/dev/modem:Nosuchfileordirectory
-->Cannotopen/dev/modem:Nosuchfileordirectory
-->Cannotopen/dev/modem:Nosuchfileordirectory

看来wvdial缺省就是使用/dev/modem设备,这可能与wvdialconf产生的/etc/wvdial.conf文件中的
[DialerDefaults]
Modem=/dev/modem

有关。ll/dev/modem,无此文件或设备。我们来创建一个/dev/modem设备吧:
SuSE-Brooks:~#ln-sf/dev/ttyS1/dev/modem
SuSE-Brooks:~#ll/dev/modem
lrwxrwxrwx1rootroot1010-0221:31/dev/modem->/dev/ttyS1

设备有了,再次运行wvdialconf,提示与第一次运行仍然相同。运行wvdial:
SuSE-Brooks:~#wvdial
-->WvDial:Internetdialerversion1.54.0
-->Initializingmodem.
-->Sending:ATZ
-->Sending:ATQ0
-->Re-Sending:ATZ
-->Modemnotresponding.

看来它能够通过我们上面建立的连接访问ttyS1。为什么会失败呢?会不会与通讯速率有关?要知道我们的波乐5100工作在153600bps上而不是57600bps上。怎样改变ttyS1的通讯速率?试试setserial工具。没装的请使用YaST安装吧,在此略过安装方法。

SuSE-Brooks:~#setserial/dev/ttyS1baud_base153600

接下来我们是否可以手工编辑一下/etc/wvdial.conf:
[DialerDefaults]
Modem=/dev/modem
Baud=57600
Init1=ATZ
Init2=ATQ0V1E1S0=0&C1&D2
Init3=
FlowControl=Hardware(CRTSCTS)
AreaCode=
Phone=#777
Username=CARD
Password=CARD
AskPassword=0
DialCommand=ATDT
StupidMode=1
Compuserve=0
ForceAddress=
IdleSeconds=300
DialMessage1=
DialMessage2=
ISDN=0
AutoDNS=1

保存退出后,运行:wvdial,还是提示modemnotresponse。怀疑波特率设置有问题,重来一次:
SuSE-Brooks:/#setserial/dev/ttyS1baud_base230400
SuSE-Brooks:/#-->WvDial:Internetdialerversion1.54.0
-->Initializingmodem.
-->Sending:ATZ
ATZ
OK
-->Sending:ATQ0V1E1S0=0&C1&D2
ATQ0V1E1S0=0&C1&D2
OK
-->Modeminitialized.
-->IdleSeconds=300,disablingautomaticreconnect.
-->Sending:ATDT#777
-->Waitingforcarrier.
ATDT#777
CONNECT
-->Carrierdetected.StartingPPPimmediately.
-->StartingpppdatTueOct222:01:312007
-->pidofpppd:4766
-->Usinginterfaceppp0
-->pppd:AreaCode
-->pppd:AreaCode
-->pppd:AreaCode
-->pppd:AreaCode
-->localIPaddress220.205.44.39
-->pppd:AreaCode
-->remoteIPaddress220.192.0.5
-->pppd:AreaCode
-->primaryDNSaddress220.192.0.130
-->pppd:AreaCode
-->secondaryDNSaddress220.192.8.58
-->pppd:AreaCode
-->Script/etc/ppp/ip-uprunsuccessful
-->DefaultrouteOk.
-->Nameserver(DNS)Ok.
-->Connected...PressCtrl-Ctodisconnect
-->pppd:AreaCode

拨号成功!让我们来上网试试,打开浏览器,无法浏览?再检查:
SuSE-Brooks:/#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
220.192.0.5*255.255.255.255UH000ppp0
loopback*255.0.0.0U000lo
default*0.0.0.0U000ppp0

按说没问题啊,试着:
SuSE-Brooks:/#routedeldefault
SuSE-Brooks:/#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
220.192.0.5*255.255.255.255UH000ppp0
loopback*255.0.0.0U000lo
SuSE-Brooks:/#routeadd-netdefaultnetmask0.0.0.0gw220.192.0.5
SuSE-Brooks:/#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
220.192.0.5*255.255.255.255UH000ppp0
loopback*255.0.0.0U000lo
default220.192.0.50.0.0.0UG000ppp0


再来访问,一切OK!我的这张波乐5100PCMCIA的CDMA卡,终于工作在SuSE10.2下了!

值得注意的是,在拨号阶段经常会发现,有时候明明已经开始拨号了,CDMA卡也有响应了,但是就是没有下一步的反应:
SuSE-Brooks:/#wvdial&

SuSE-Brooks:/#-->WvDial:Internetdialerversion1.54.0
-->Initializingmodem.
-->Sending:ATZ
-->Sending:ATQ0
ATQ0
OK
-->Re-Sending:ATZ
ATZ
OK
-->Initializingmodem.
-->Sending:ATZ
-->Sending:ATQ0
ATQ0
OK
-->Re-Sending:ATZ
ATZ
OK
-->Initializingmodem.
-->Sending:ATZ
-->Sending:ATQ0
ATQ0
OK
-->Re-Sending:ATZ
ATZ
OK

[1] Exit1wvdial

只需要将/etc/wvdial.conf中的Init2注销或打开即可。找不到原因,并且发现有时候注释掉是可以拨号的,而有时候打开是可以拨号的,怀疑可能是工作状态不稳定造成的。

综述:
1、检查message中查看pcmcia是否能够被识别,如果能够识别,就不需要去找pcmcia的支持;

2、setserial可以修改modem的通信波特率,注意,由于没有硬件厂商提供的驱动程序,硬件并不一定会工作在它指定的波特率上,多试;

3、硬件工况可能并不稳定,此时需要观察工作状态,再做调整;

4、拨号成功后,只要获得了IP地址就说明连接已经OK了,上不了网的话很可能是你的路由表的问题,注意调整。

阅读(627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~