天天看點

在嵌入式Linux下GPRS上網方案

硬/軟體環境

基于S3C2410的嵌入式系統,COM1連接配接PC,COM2連接配接SIM300 GPRS子產品。

該系統運作在Linux 2.6.14作業系統下,使用ppp套件通過SIM300進行PPP撥号。

讓Linux核心支援PPP

進入Linux核心目錄,執行#make menuconfig

Network Device Support à

       <*> PPP (point-to-point protocol) support

       [*]   PPP multilink support

       <*> PPP support for async serial ports

       <*> PPP support for sync tty ports

       <*> SLIP (serial line) support

       [*]   CSLIP compressed headers

ppp套件安裝

Ø         下載下傳ppp:ftp://ftp.samba.org/pub/ppp ×最新版本為2.4.4

Ø         将ppp-2.4.4.tar.gz解壓至目錄

×這裡預設ppp源碼目錄為$(PPP)

              #tar zxvf ppp-2.4.4.tar.gz

Ø         然後交叉編譯ppp:

              #cd $(PPP)

#./configure

#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc ×這裡指定交叉編譯器

Ø         将ppp套件安裝至嵌入式系統中:

×這裡預設可執行檔案在嵌入式系統下的目錄為$(EMB_BIN)

#cp $(PPP)/chat/chat $(EMB_BIN)

#cp $(PPP)/pppd/pppd $(EMB_BIN)

#cp $(PPP)/pppdump/pppdump $(EMB_BIN)

#cp $(PPP)/pppstats/pppstats $(EMB_BIN)

              ×這裡預設嵌入式系統的etc目錄為$(EMB_ETC)

              #mkdir $(EMB_ETC)/ppp

              #cp $(PPP)/etc.ppp/* $(EMB_ETC)/ppp

ppp套件配置

$(EMB_BIN)/dial-on.sh (GPRS啟動腳本)

#!/bin/sh

#define dial_on function

dial_on()

{

       #test if pppd is running

       pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

       if [ $pppd_stat -gt 0 ]

       then

              echo "ppp connection's already started."

       else

              #close ethernet interface

              ifconfig eth0 down

              #ppp start

              pppd modem /dev/ttyS1 57600 nocrtscts lock connect "chat -v -f /etc/ppp/gprs-connect" user "" noauth debug defaultroute

              # pppd配置說明:

              # ttyS1:連接配接GPRS子產品SIM300的序列槽

              # 57600:GPRS的撥号速率

              # nocrtscts:無流控

              # lock:鎖定裝置

              # connect “chat –v –f /etc/ppp/gprs-connect”:GPRS連接配接腳本檔案

              # user “”:使用者名,這裡是無

              # noauth:無需認證

              # debug:輸出調試資訊

              # defaultroute:此撥接上網作為預設路由

              echo "ppp is starting..."

       fi

}

#dial on gprs

dial_on

#wait for ppp's init

sleep 5

pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

if [ $pppd_stat -eq 0 ]

then

       echo "trying 2nd time to call ppp"

       dial_on

       sleep 5

fi

pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

if [ $pppd_stat -eq 0 ]

then

       echo "pppd error!"

       echo "please check pppd's config files"

fi

#open ethernet interface

ifconfig eth0 up

#end

$(EMB_BIN)/dial-off.sh (關閉GPRS連接配接腳本)

#!/bin/sh

#get pppd's pid

pid=`pidof pppd`

#if pppd process is running

if [ -n $pid ]

then

       #kill pppd

       kill $pid

       #open the ethernet interface

       ifconfig eth0 up

       echo "ppp connection is closed."

else

       echo "ppp connection isn't existed."

fi

#end

$(EMB_ETC)/ppp/gprs-connect (GPRS連接配接配置檔案)

#GPRS連接配接逾時設定

TIMEOUT      60

#若MODEM遇到BUSY、ERROR、NO CARRIER等資訊時,停止撥号

ABORT   "BUSY"

ABORT   "ERROR"

ABORT   "NO CARRIER"

#外送“AT”指令

'' AT

#當得到“OK”回應時,外送AT+CGDCONT=1,"IP","CMNET"指令

"OK" "AT+CGDCONT=1,/042IP/042,/042CMNET/042"

#當得到“OK”回應時,外送ATDT*99***1#指令

"OK" "ATDT*99***1#"

#當得到“CONNECT”回應時,撥号結束,程式退出

"CONNECT"

$(EMB_ETC)/ppp/pap-secrets (GPRS認證配置檔案)

# Secrets for authentication using PAP

# client    server     secret                    IP addresses

''      *     ''      *

說明

(1)       還需要在$(EMB_ETC)/ppp目錄下建立指向$(EMB_ETC)/resolv.conf的連結,用于指定PPP連接配接的DNS。

(2)       在ppp連接配接時,需要關閉eth連接配接。在腳本中已經設定好了,首先關閉eth連接配接,然後進行ppp連接配接,在ppp連接配接完成時,再開啟eth連接配接。

(3)       最好在系統中開啟syslogd程序,這樣在/var/log/messages檔案中會記錄GPRS進行撥号的DEBUG資訊,便于調試。

(4)       運作撥号腳本後,可以使用#ifconfig檢視PPP連接配接資訊。

繼續閱讀