GPRS模块在Linux平台上ppp拨号上网总结与心得

由于一个嵌入式平台上项目开发的需要,在arm平台上实施ppp拨号上网。说起这个Linux平台的ppp拨号上网,也许很多人觉很简单,网上的成功的例子很多!不错,你说的对,但是我还要给点我的看法,就是这个简单的ppp拨号折腾了我的时间之长,我都不好意思讲。但是,现在看来这个过程学到了好多的东西,得到很多分析能力的锻炼。现在成功移植到arm开发板上。特写日志于此,分享我的这段时间以来的总结:

Linux平台的ppp拨号上网,(注明:这里只谈命令行拨号,用Linux就要习惯和熟练使用命令行) 在网上常见的有三种方式:1.使用智能的ppp拨号软件wvdial:2.使用3个脚本的方式:即ppp-on,ppp-on-dialer,ppp-off以及网上很多成功的案例注:以上两种方式各有自己的优缺点,第一种方式智能稳定,他不需要chat程序,使用集成的wvdial工具包直接连接ISP,安全稳定,可以断线自动重拨。第二方式,使用chat程序,但是很多的参数需要自己去配置,虽然比较灵活,但是如果遇到了拨号错误以后,你若不清ppp协议拨号实现的具体机制和每个参数的含义,你就会很吃力,也许运气好的时候,你运行的环境正好和本地的移动isp配置吻合,恭喜你能上网了,但是你遗憾的是没有学到东西,想了解 ppp机制的朋友,可以试试第2种方式,在了解大体了解ppp协议的前提下,观察思考/var/log/messages中的信息。

3.使用命令pppd call somescript的方式:

我使用就是该方式,下面列出ppp拨号相关配置文件并作适当的解释;注意:我使用的gprs模块是HUAWEI GTM900A/B两种,不同的模块的内部设置有差异,所以配置文件中的某些参数配置有差异,另外还有自身的pc机或者arm开发板的环境以及所处的地点的信号,移动ISP都有关,在出现问题的时候要考虑这些潜在的可能因素。错误排查的过程是个枯燥难受的过程,但是反过来去看,这个过程之后会收获很多。

默认情况在/etc/ppp/目录下建立文件gprs-connect-chat,内容如下(每个参数解释在ppp-howto中有详细解释。它是在ppp 底层会话的时候给chat进程的参数每行是一个“期望/发送”的组合序列。当出现一些经典的错误如: “LCP: timeout sending Config-Requests” ,”serial line is not 8 bit clean…”,“serial line is looped back”等,去参看方式2提到的两个文档,或者google。注意,为什么不能确切地给出解决的方式,原因是打印出来的同一个错误信息,我称之为现象,同一现象可能是由很多种原因造成的,需要自己实地排查。)

#/etc/ppp/gprs-connect-chatTIMEOUT 15ABORT ‘\nBUSY\r’ ABORT ‘\nNO ANSWER\r’ ABORT ‘\nRINGING\r\n\r\nRINGING\r’ #” AT #’OK-+++\c-OK’ ATH0 TIMEOUT 40” \rATOK ATS0=0 #这些都是标准的at命令,建议查看随模块的at命令手册OK ATE0V1OK AT+CGDCONT=1,”IP”,”CMNET” #设置isp接入网关为中国移动的cmnet,如果你想 获得更多访问资源的话OK ATDT*99***1# #中国移动gprs的接入号吗CONNECT ”+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++建立文件/etc/ppp/peers/gprs,它的作用是给pppd进程提供配置参数(详见man 8 pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:#/etc/ppp/peers/gprs# Usage: root>pppd call gprs/dev/s3c2410_serial1 #改成自己的端口名115200 #改成自己串口波特率nocrtscts #可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtsctsmodem #这个参数使得pppd进程将等待模块发回的CD (Carrier Detect)信号,与local真好相反#noauthdebug #把调试信息输出到/var/log/messages,在调试成功后去掉它,以减少垃圾的产生。nodetach #hide-passwordusepeerdns #以下的3个参数一般不可少noipdefaultdefaultroute user smsong #设置接入的用户名,在chap-secrets或者pap-secets中使用0.0.0.0:0.0.0.0 #本地和远端的ip都设为0使得接入的isp分配本地的ip地址ipcp-accept-local #要求peer也就是isp给自己非配动态的IP地址#ipcp-accept-remote#lcp-echo-failure 12#lcp-echo-interval 3noccp #不需要压缩控制协议,有可能对端不需要,根据自己的isp的情况#novj#novjccomppersist #保证在连接断开的情况下不退出,并尝试重新打开连接connect ‘/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat’ #pppd调用chat会话进程接入对端isp,,启动对端的pppd,然后本地pppd与对端的pppd一起进行协#商网络参数和chap/pap认证,成功后,再进行ncp层的ip的分配。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#/etc/ppp/chap-secets# Secrets for authentication using CHAP# client server secret IP addresses####### RedHat-config-network will overwrite this part!!! (begin) ################# redhat-config-network will overwrite this part!!! (end) ############smsong * 123456 *有点地区的GPRS可能使用pap方式认证接入用户,所以在同一级目录下,创建pap-secets文件,内容与chap-secets类似有4项的内容第2和第4项一般不限制就用*(星号)代表。反正要你在/etc/ppp/下放着这两个文件就好。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++在建立了ppp0连接以后可以使用ctrl+c或者下面的脚本程序ppp-off断开ppp连接#/etc/ppp/ppp-off#!/bin/sh######################################################################## Determine the device to be terminated.#if [ “$1” = “” ]; thenDEVICE=ppp0elseDEVICE=$1fi######################################################################## If the ppp0 pid file is present then the program is running. Stop it.if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid`## If the kill did not work then there is no process running for this# pid. It may also mean that the lock file will be left. You may wish# to delete the lock file at the same time. if [ ! “$?” = “0” ]; then rm -f /var/run/$DEVICE.pid echo “ERROR: Removed stale pid file” exit 1 fi## Success. Let pppd clean up its own junk. echo “PPP link to $DEVICE terminated.” exit 0fi## The ppp process is not running for ppp0echo “ERROR: PPP link is not active on $DEVICE”exit 1

旅行还在继续,这个过程是艰难而又孤单的。

GPRS模块在Linux平台上ppp拨号上网总结与心得

相关文章:

你感兴趣的文章:

标签云: