GPRS模块在Linux平台上ppp拨号上网总结与心得Word文件下载.docx
《GPRS模块在Linux平台上ppp拨号上网总结与心得Word文件下载.docx》由会员分享,可在线阅读,更多相关《GPRS模块在Linux平台上ppp拨号上网总结与心得Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
)、howtohookupppp(
http:
//www.theory.physics.ubc.ca/ppp-linux.html
)以及网上很多成功的案例
注:
以上两种方式各有自己的优缺点,第一种方式智能稳定,他不需要chat程序,使用集成的wvdial工具包直接连接ISP,安全稳定,可以断线自动重
拨。
第二方式,使用chat程序,但是很多的参数需要自己去配置,虽然比较灵活,但是如果遇到了拨号错误以后,你若不清ppp协议拨号实现的具体机制和每
个参数的含义,你就会很吃力,也许运气好的时候,你运行的环境正好和本地的移动isp配置吻合,恭喜你能上网了,但是你遗憾的是没有学到东西,想了解
ppp机制的朋友,可以试试第2种方式,在了解大体了解ppp协议的前提下,观察思考/var/log/messages中的信息。
3.使用命令pppdcallsomescript的方式:
参考案例:
我使用就是该方式,下面列出ppp拨号相关配置文件并作适当的解释;
注
意:
我使用的gprs模块是HUAWEI
GTM900A/B两种,不同的模块的内部设置有差异,所以配置文件中的某些参数配置有差异,另外还有自身的pc机或者arm开发板的环境以及所处的地点
的信号,移动ISP都有关,在出现问题的时候要考虑这些潜在的可能因素。
错误排查的过程是个枯燥难受的过程,但是反过来去看,这个过程之后会收获很多。
默
认情况在/etc/ppp/目录下建立文件gprs-connect-chat,内容如下(每个参数解释在ppp-howto中有详细解释。
它是在ppp
底层会话的时候给chat进程的参数每行是一个“期望/发送”的组合序列。
当出现一些经典的错误如:
"
LCP:
timeoutsending
Config-Requests"
,"
seriallineisnot8bitclean..."
“seriallineis
looped
back”等,去参看方式2提到的两个文档,或者google。
注意,为什么不能确切地给出解决的方式,原因是打印出来的同一个错误信息,我称之为现象,
同一现象可能是由很多种原因造成的,需要自己实地排查。
)
#/etc/ppp/gprs-connect-chat
TIMEOUT15
ABORT'
\nBUSY\r'
\nNOANSWER\r'
\nRINGING\r\n\r\nRINGING\r'
#'
'
AT
OK-+++\c-OK'
ATH0
TIMEOUT40
\rAT
OKATS0=0#这些都是标准的at命令,建议查看随模块的at命令手册
OKATE0V1
OKAT+CGDCONT=1,"
IP"
"
CMNET"
#设置isp接入网关为中国移动的cmnet,如果你想获得更多访问资源的话
OKATDT*99***1##中国移动gprs的接入号吗
CONNECT'
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
建立文件/etc/ppp/peers/gprs,它的作用是给pppd进程提供配置参数(详见man8pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:
#/etc/ppp/peers/gprs
#Usage:
root>
pppdcallgprs
/dev/s3c2410_serial1#改成自己的端口名
115200#改成自己串口波特率
nocrtscts
#可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtscts
modem#这个参数使得pppd进程将等待模块发回的CD(CarrierDetect)信号,与local真好相反
#noauth
debug#把调试信息输出到/var/log/messages,在调试成功后去掉它,以减少垃圾的产生。
nodetach
#hide-password
usepeerdns#以下的3个参数一般不可少
noipdefault
defaultroute
usersmsong#设置接入的用户名,在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-failure12
#lcp-echo-interval3
noccp#不需要压缩控制协议,有可能对端不需要,根据自己的isp的情况
#novj
#novjccomp
persist#保证在连接断开的情况下不退出,并尝试重新打开连接
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
#SecretsforauthenticationusingCHAP
#clientserversecretIPaddresses
#######redhat-config-networkwilloverwritethispart!
!
(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
#!
/bin/sh
######################################################################
#
#Determinethedevicetobeterminated.
if["
$1"
="
"
];
then
DEVICE=ppp0
else
DEVICE=$1
fi
#Iftheppp0pidfileispresentthentheprogramisrunning.Stopit.
if[-r/var/run/$DEVICE.pid];
kill-INT`cat/var/run/$DEVICE.pid`
#Ifthekilldidnotworkthenthereisnoprocessrunningforthis
#pid.Itmayalsomeanthatthelockfilewillbeleft.Youmaywish
#todeletethelockfileatthesametime.
if[!
$?
0"
rm-f/var/run/$DEVICE.pid
echo"
ERROR:
Removedstalepidfile"
exit1
fi
#Success.Letpppdcleanupitsownjunk.
PPPlinkto$DEVICEterminated."
exit0
#Thepppprocessisnotrunningforppp0
echo"
PPPlinkisnotactiveon$DEVICE"
exit1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
做好上面的配置以后,输入pppdcallgprs命令,注意如果你的gprs这个文件不在/etc/ppp/peers/目录下,在给出标注路径给pppd
[root@localhostppp_scripts]#pppdcallgprs
timeoutsetto15seconds
aborton(\nBUSY\r)
aborton(\nNOANSWER\r)
aborton(\nRINGING\r\n\r\nRINGING\r)
timeoutsetto40seconds
send(^MAT^M^M)
expect(OK)
^M^M
OK
--gotit
send(ATS0=0^M^M)
^M
AT^M
send(ATE0V1^M^M)
send(AT+CGDCONT=1,"
^M^M)
ATS0=0^M^M
send(ATDT*99***1#^M^M)
expect(CONNECT)
OK^M
ATE0V1^M^M
CONNECT
send(^M)
Serialconnectionestablished.
usingchannel20
Usinginterfaceppp0
Connect:
ppp0/dev/ttyS0
Warning-secretfile/etc/ppp/pap-secretshasworldand/orgroupaccess
sent[LCPConfReqid=0x1]
rcvd[LCPConfRejid=0x1]
sent[LCPConfReqid=0x2]
rcvd[LCPConfAckid=0x2]
rcvd[LCPConfReqid=0x1]
sent[LCPConfAckid=0x1]
rcvd[CHAPChallengeid=0x1,name="
]
Warning-secretfile/etc/ppp/chap-secretshasworldand/orgroupaccess
sent[CHAPResponseid=0x1,name="
smsong"
rcvd[CHAPSuccessid=0x1"
CHAPauthenticationsucceeded
sent[CCPConfReqid=0x1]
sent[IPCPConfReqid=0x1]
rcvd[LCPProtRejid=0x180fd0101000c1a04780018047800]
Protocol-Rejectfor'
CompressionControlProtocol'
(0x80fd)received
rcvd[IPCPConfReqid=0x1]
sent[IPCPConfNakid=0x1]
rcvd[IPCPConfRejid=0x1]
sent[IPCPConfReqid=0x2]
rcvd[IPCPConfReqid=0x2]
sent[IPCPConfAckid=0x2]
rcvd[IPCPConfNakid=0x2]
sent[IPCPConfReqid=0x3]
rcvd[IPCPConfAckid=0x3]
CouldnotdetermineremoteIPaddress:
defaultingto10.64.64.64
localIPaddress10.144.202.159
remoteIPaddress10.64.64.64
primaryDNSaddress211.138.200.69
secondaryDNSaddress211.103.13.101
Script/etc/ppp/ip-upstarted(pid4578)
Script/etc/ppp/ip-upfinished(pid4578),status=0x0
使用ctrl+c可以断开连接,这样一般不太好测试是不是连接上了(遇有开发不上的控制台只有一个的原因),可以去掉/etc/ppp
/peers/gprs文件中的nodetach参数,要用ping,你需要将eth0即网口给禁用掉,这样ping才会通过ppp0端口寻找路由连接外
网。
可以用命令tail-f/var/log/messages看到日志:
Mar2020:
55:
55localhostpppd[4557]:
pppd2.4.4startedbyroot,uid0
56localhostchat[4558]:
timeoutsetto15seconds
aborton(\nBUSY\r)
aborton(\nNOANSWER\r)
aborton(\nRINGING\r\n\r\nRINGING\r)
timeoutsetto40seconds
send(^MAT^M^M)
expect(OK)
^M^M
OK
--gotit
send(ATS0=0^M^M)
^M
AT^M
send(ATE0V1^M^M)
send(AT+CGDCONT=1,"
57localhostchat[4558]:
ATS0=0^M^M
send(ATDT*99***1#^M^M)
expect(CONNECT)
OK^M
ATE0V1^M^M
57localhostchat[455