硬/軟件環境
基於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連接信息。