2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 初步实现使用pppd连接GPRS上网

初步实现使用pppd连接GPRS上网

时间:2020-11-28 20:43:12

相关推荐

初步实现使用pppd连接GPRS上网

转载地址:/hybruce/article/details/40619843

(写这篇博客的目的为了以后能自己翻阅,也方便大家学习,提出改进意见)

背景:先说说移植这玩意的背景吧!公司需要做关于GPRS和S3C2416之间的驱动,便想到了使用现在成熟的PPP协议。目前用的GPRS为四频的SIM900,通过COM1与S3C2416连接,COM0为S3C2416的调试接口。设计硬件时需要注意的是SIM900为LVTTL电平,而S3C2416为TTL电平,通过串口连接时两者之间串连一个510欧姆的电阻即可。

在接触2416之前,做的毕业设计是利用SIM900A+STM32实现GPRS功能的,所以对GPRS调试有了一定的了解,发现用AT指令来调试GPRS还是有一定的鸡肋,使用成熟的上层协议会事半功倍。

基础:首先熟悉Linux基础知识是必须的,其次要对网络知识有一定的了解,不然在涉及到网络编程时很容易遇到基本的问题,DNS,IP,公网,内网等等。我研究过一段时间的网络知识,考了全网网工四级,所以网络方面还是有一定的概念的。在大三到大四期间,也学过很长时间的Linux基础知识,虽说那时候效率很低,但是慢慢摸索也懂得了一些。

硬件连接: S3C2416核心板为君益兴的Helper2416核心板 2416与SIM900通过COM1连接

好了,开始进入正题:

PPP移植步骤

①修改Linux内核,让其支持PPP(Linux内核需在2.6以上)

(1)在linux源代码根目录下查看自己的linux内核版本。

(2)进入图形界面模式:make menuconfig ARCH=arm

②下载并编译PPP套件,将所需文件放入嵌入式根文件系统对应目录。

(1)PPP套件下载链接地址ftp:///pub/ppp (笔者下载的是ppp-2.4.7)

(2)将ppp-2.4.7解压tar zxvf ppp-2.4.7.tar.gz

(3)进入解压目录,配置交叉编译PPP套件。

#.configure

#make CC=/Software/arm-jyxtec-linux-gnueabi/bin/arm-linux-gcc(指定交叉编译路径)

(4)编译成功后,将PPP套件安装至嵌入式系统中。

cp $(ppp-2.4.7)/chat/chat /home/roofs/bin

cp $(ppp-2.4.7)/pppd/pppd /home/roofs/bin

cp $(ppp-2.4.7)/pppdump/pppdump /home/roofs/bin

cp $(ppp-2.4.7)/pppstats/pppstats /home/roofs/bin

(/home/roofs/bin为笔者的嵌入式根文件系统共享的NFS所在位置的bin目录)

(5)在嵌入式文件系统的etc目录下创建ppp文件夹,并拷贝相关文件至此。

(/home/bruce/samba_share/etc)#mkdir ppp

(/home/bruce/samba_share/etc)#cp $(ppp-2.4.7)/etc.ppp/* /home/roofs/etc/ppp

③ 相关脚本准备

(1)GPRS启动脚本

文件名:dial-on.sh

存放位置:/home/roofs/bin

#!/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/ttySAC1 115200 nocrtscts lock connect "chat -v -f /etc/ppp/gprs-connect" user "" noauth debug defaultroute

# pppd配置说明:

# ttyS1:连接GPRS模块SIM900的串口

# 115200:GPRS的拨号速率

# nocrtscts:无流控

# lock:锁定设备

# connect “chat ???? ???? /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

(2)GPRS连接配置文件 (关于配置拨号脚本可参考SIM900官方指导手册,内有详细介绍拨号设置)

文件名:gprs-connect

存放位置:/home/roofs/etc/ppp

TIMEOUT 30

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO CARRIER"

'' AT

OK ATS0=0

OK ATE0V1

OK AT+CGDCONT=1,"IP","CMNET"

OK ATD*99***1#

CONNECT ''

(3)其实到这里为止,一个简单的PPP协议栈就搭建完成了,当然最重要的就是调试过程,要调试成可行的的确是很不容易的,笔者自己也摸索了很久,所以各位要有耐心,做Linux的研究就是这样,探索+前人的总结。直接运行dial-on.sh,查看是否已经连接上PPP,尝试ping某个可ping通的IP地址。如下图所示:

(4)其实现在如果去Ping域名的话,是ping不通的,返回bad address。那么需要修改/etc/resolv.conf,添加域名解析器的服务地址。比如我用的是浙江嘉兴的移动号,就去找浙江嘉兴移动的DNS,改掉保存再去ping就可以了。

(5)接下来会去研究关于PPP登录方式和PPP断线检测自动拨号的问题。期待大家一起讨论!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。