csdnyasin 2010-09-03
我们知道,网络的发展也嵌入到了移动通信当中。那么对于在一些移动设备上加入一些设置,就需要嵌入式的操作。那么这里我们就来讲解一下,基于嵌入式Linux下GPRS上网方案中,Linux内核的PPP设置。
硬/软件环境
基于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 '' * '' *
Linux内核PPP设置说明
(1) 还需要在$(EMB_ETC)/ppp目录下创建指向$(EMB_ETC)/resolv.conf的链接,用于指定PPP连接的DNS。
(2) 在ppp连接时,需要关闭eth连接。在脚本中已经设置好了,首先关闭eth连接,然后进行ppp连接,在ppp连接完成时,再开启eth连接。