Linux內(nèi)核PPP套件設(shè)置
我們知道,網(wǎng)絡(luò)的發(fā)展也嵌入到了移動通信當(dāng)中。那么對于在一些移動設(shè)備上加入一些設(shè)置,就需要嵌入式的操作。那么這里我們就來講解一下,基于嵌入式Linux下GPRS上網(wǎng)方案中,Linux內(nèi)核的PPP設(shè)置。
硬/軟件環(huán)境
基于S3C2410的嵌入式系統(tǒng),COM1連接PC,COM2連接SIM300 GPRS模塊。該系統(tǒng)運行在Linux 2.6.14操作系統(tǒng)下,使用ppp套件通過SIM300進(jìn)行PPP撥號。
讓Linux內(nèi)核支持PPP
進(jìn)入Linux內(nèi)核目錄,執(zhí)行#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解壓至目錄
×這里默認(rèn)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套件安裝至嵌入式系統(tǒng)中:
×這里默認(rèn)可執(zhí)行文件在嵌入式系統(tǒng)下的目錄為$(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)
×這里默認(rèn)嵌入式系統(tǒng)的etc目錄為$(EMB_ETC)
#mkdir $(EMB_ETC)/ppp
#cp $(PPP)/etc.ppp/* $(EMB_ETC)/ppp
#p#
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:鎖定設(shè)備
# connect “chat –v –f /etc/ppp/gprs-connect”:GPRS連接腳本文件
# user “”:用戶名,這里是無
# noauth:無需認(rèn)證
# debug:輸出調(diào)試信息
# defaultroute:此撥號連接作為默認(rèn)路由
echo "ppp is starting..."
fi
}#dial on gprs
dial_on#wait for ppp's init
sleep 5pppd_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
fipppd_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 (關(guān)閉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連接超時設(shè)置
TIMEOUT 60
#若MODEM遇到BUSY、ERROR、NO CARRIER等信息時,停止撥號
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO CARRIER"
#外送“AT”指令
'' AT
#當(dāng)?shù)玫?ldquo;OK”回應(yīng)時,外送AT+CGDCONT=1,"IP","CMNET"命令
"OK" "AT+CGDCONT=1,\042IP\042,\042CMNET\042"
#當(dāng)?shù)玫?ldquo;OK”回應(yīng)時,外送ATDT*99***1#命令
"OK" "ATDT*99***1#"
#當(dāng)?shù)玫?ldquo;CONNECT”回應(yīng)時,撥號結(jié)束,程序退出
"CONNECT"$(EMB_ETC)/ppp/pap-secrets (GPRS認(rèn)證配置文件)
# Secrets for authentication using PAP
# client server secret IP addresses
'' * '' *
Linux內(nèi)核PPP設(shè)置說明
(1) 還需要在$(EMB_ETC)/ppp目錄下創(chuàng)建指向$(EMB_ETC)/resolv.conf的鏈接,用于指定PPP連接的DNS。
(2) 在ppp連接時,需要關(guān)閉eth連接。在腳本中已經(jīng)設(shè)置好了,首先關(guān)閉eth連接,然后進(jìn)行ppp連接,在ppp連接完成時,再開啟eth連接。
(3) 最好在系統(tǒng)中開啟syslogd進(jìn)程,這樣在/var/log/messages文件中會記錄GPRS進(jìn)行撥號的DEBUG信息,便于調(diào)試。
(4) 運行撥號腳本后,可以使用#ifconfig查看PPP連接信息。