歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> GPRS模塊在Linux平台上ppp撥號上網總結與心得

GPRS模塊在Linux平台上ppp撥號上網總結與心得

日期:2017/2/28 16:38:51   编辑:Linux教程

由於一個嵌入式平台上項目開發的需要,在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-chat
TIMEOUT 15
ABORT '\nBUSY\r'
ABORT '\nNO ANSWER\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
#'' AT
#'OK-+++\c-OK' ATH0
TIMEOUT 40
'' \rAT
OK ATS0=0 #這些都是標准的at命令,建議查看隨模塊的at命令手冊
OK ATE0V1
OK 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,硬件流控的,這是由你的串口決定的,一般嵌入式系統的串口沒有帶硬件流控,也不需要就加nocrtscts
modem #這個參數使得pppd進程將等待模塊發回的CD (Carrier Detect)信號,與local真好相反
#noauth
debug #把調試信息輸出到/var/log/messages,在調試成功後去掉它,以減少垃圾的產生。
nodetach
#hide-password
usepeerdns #以下的3個參數一般不可少
noipdefault
defaultroute
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
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
# 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" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi######################################################################
#
# 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 0
fi
#
# The ppp process is not running for ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1

Copyright © Linux教程網 All Rights Reserved