在嵌入式Linux下GPRS上網方案

/軟件環境

 

基於S3C2410的嵌入式系統,COM1連接PCCOM2連接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套件安裝

 

Ø         下載pppftp://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的串口

              # 57600GPRS的撥號速率

              # 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遇到BUSYERRORNO 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連接信息。

 

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章