在嵌入式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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章