1、 )、howto hook up ppp (http:/www.theory.physics.ubc.ca/ppp-linux.html) 以及网上很多成功的案例注:以上两种方式各有自己的优缺点,第一种方式智能稳定,他不需要chat程序,使用集成的wvdial工具包直接连接ISP,安全稳定,可以断线自动重拨。第二方式,使用chat程序,但是很多的参数需要自己去配置,虽然比较灵活,但是如果遇到了拨号错误以后,你若不清ppp协议拨号实现的具体机制和每个参数的含义,你就会很吃力,也许运气好的时候,你运行的环境正好和本地的移动isp配置吻合,恭喜你能上网了,但是你遗憾的是没有学到东西,想了解ppp机制
2、的朋友,可以试试第2种方式,在了解大体了解ppp协议的前提下,观察思考/var/log/messages中的信息。3.使用命令pppd call somescript的方式:参考案例:我使用就是该方式,下面列出ppp拨号相关配置文件并作适当的解释;注意:我使用的gprs模块是HUAWEIGTM900A/B两种,不同的模块的内部设置有差异,所以配置文件中的某些参数配置有差异,另外还有自身的pc机或者arm开发板的环境以及所处的地点的信号,移动ISP都有关,在出现问题的时候要考虑这些潜在的可能因素。错误排查的过程是个枯燥难受的过程,但是反过来去看,这个过程之后会收获很多。默认情况在/etc/ppp
3、/目录下建立文件gprs-connect-chat,内容如下(每个参数解释在ppp-howto中有详细解释。它是在ppp底层会话的时候给chat进程的参数每行是一个“期望/发送”的组合序列。当出现一些经典的错误如: LCP: timeout sendingConfig-Requests ,serial line is not 8 bit clean.,“serial line isloopedback”等,去参看方式2提到的两个文档,或者google。注意,为什么不能确切地给出解决的方式,原因是打印出来的同一个错误信息,我称之为现象,同一现象可能是由很多种原因造成的,需要自己实地排查。)#/e
4、tc/ppp/gprs-connect-chatTIMEOUT 15ABORT nBUSYrnNO ANSWERrnRINGINGrnrnRINGINGr# 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进程提供配置参数(详见
5、man 8 pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:#/etc/ppp/peers/gprs# Usage: rootpppd call gprs/dev/s3c2410_serial1 #改成自己的端口名115200 #改成自己串口波特率nocrtscts #可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtsctsmodem #这个参数使得pppd进程将等待模块发回的CD (Carrier Detect)信号,与local真好相反#noauthdebug #把调试信息输出到/var/l
6、og/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 3
7、noccp #不需要压缩控制协议,有可能对端不需要,根据自己的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# cl
8、ient server secret IP addresses# redhat-config-network will overwrite this part! (begin) # (end) #smsong * 123456 *有点地区的GPRS可能使用pap方式认证接入用户,所以在同一级目录下,创建pap-secets文件,内容与chap-secets类似有4项的内容第2和第4项一般不限制就用*(星号)代表。反正要你在/etc/ppp/下放着这两个文件就好。在建立了ppp0连接以后可以使用ctrl+c或者下面的脚本程序ppp-off断开ppp连接#/etc/ppp/ppp-off#!/bi
9、n/sh# Determine the device to be terminated.if $1 = ; then DEVICE=ppp0else DEVICE=$1fi# If the ppp0 pid file is present then the program is running. Stop it.if -r /var/run/$DEVICE.pid ; kill -INT cat /var/run/$DEVICE.pid# If the kill did not work then there is no process running for this# pid. It ma
10、y also mean that the lock file will be left. You may wish# to delete the lock file at the same time. if !$?0 rm -f /var/run/$DEVICE.pid echo ERROR: Removed stale pid file exit 1 fi# Success. Let pppd clean up its own junk.PPP link to $DEVICE terminated. exit 0# The ppp process is not running for ppp
11、0echo PPP link is not active on $DEVICEexit 1+做好上面的配置以后,输入pppd call gprs命令,注意如果你的gprs这个文件不在/etc/ppp/peers/目录下,在给出标注路径给pppdrootlocalhost ppp_scripts# pppd call gprstimeout set to 15 secondsabort on (nBUSYr)abort on (nNO ANSWERr)abort on (nRINGINGrnrnRINGINGr)timeout set to 40 secondssend (MATMM)expec
12、t (OK)MMOK - got itsend (ATS0=0MM)MATMsend (ATE0V1MM)send (AT+CGDCONT=1,MM)ATS0=0MMsend (ATDT*99*1#MM)expect (CONNECT)OKMATE0V1MMCONNECTsend (M)Serial connection established.using channel 20Using interface ppp0Connect: ppp0 /dev/ttyS0Warning - secret file /etc/ppp/pap-secrets has world and/or group
13、accesssent LCP ConfReq id=0x1 rcvd LCP ConfRej id=0x1 sent LCP ConfReq id=0x2 rcvd LCP ConfAck id=0x2 rcvd LCP ConfReq id=0x1 sent LCP ConfAck id=0x1 rcvd CHAP Challenge id=0x1 , name = Warning - secret file /etc/ppp/chap-secrets has world and/or group accesssent CHAP Response id=0x1 , name = smsong
14、rcvd CHAP Success id=0x1 CHAP authentication succeededsent CCP ConfReq id=0x1 sent IPCP ConfReq id=0x1 rcvd LCP ProtRej id=0x1 80 fd 01 01 00 0c 1a 04 78 00 18 04 78 00Protocol-Reject for Compression Control Protocol (0x80fd) receivedrcvd IPCP ConfReq id=0x1sent IPCP ConfNak id=0x1 rcvd IPCP ConfRej
15、 id=0x1 sent IPCP ConfReq id=0x2 rcvd IPCP ConfReq id=0x2sent IPCP ConfAck id=0x2rcvd IPCP ConfNak id=0x2 sent IPCP ConfReq id=0x3 rcvd IPCP ConfAck id=0x3 Could not determine remote IP address: defaulting to 10.64.64.64local IP address 10.144.202.159remote IP address 10.64.64.64primary DNS address
16、211.138.200.69secondary DNS address 211.103.13.101Script /etc/ppp/ip-up started (pid 4578)Script /etc/ppp/ip-up finished (pid 4578), status = 0x0使用ctrl+c可以断开连接,这样一般不太好测试是不是连接上了(遇有开发不上的控制台只有一个的原因),可以去掉/etc/ppp/peers/gprs文件中的nodetach参数,要用ping,你需要将eth0即网口给禁用掉,这样ping才会通过ppp0端口寻找路由连接外网。可以用命令tail -f /var/
17、log/messages看到日志:Mar 20 20:55:55 localhost pppd4557: pppd 2.4.4 started by root, uid 056 localhost chat4558: timeout set to 15 seconds abort on (nBUSYr) abort on (nNO ANSWERr) abort on (nRINGINGrnrnRINGINGr) timeout set to 40 seconds send (MATMM) expect (OK) MM OK - got it send (ATS0=0MM) M ATM send (ATE0V1MM) send (AT+CGDCONT=1,57 localhost chat4558: ATS0=0MM send (ATDT*99*1#MM) expect (CONNECT) OKM ATE0V1MM57 localhost chat455
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1