sim900GPRS模块ppp拨号上网

—————————————————————————————————————————————
主机操作系统:Centos 6.5
交叉编译器环境:arm-linux-gcc-4.5.4
开发板平台: FL2440
Linux内核版本: linux-3.0
开发模块: SIM900 GPRS
邮箱:luhu918@gmail.com

—————————————————————————————————————————————
开发提醒:在开发gprs模块ppp拨号上网之前需满足fl2440开发版能正常加载linux内核及文件系统,并且开发板的串口已经使能,同时需准备一张开通gprs流量的sim卡。
一:GPRS介绍

GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传输速率又可以分为GPRS模块、EDGE模块和纯短信模块。短信模块只支持语音和短信服务。GPRS,可说是GSM的延续。它经常被描述成“2.5G”,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间。GPRS的传输速率从56K到114Kbps不等,理论速度最高达171k。相对于GSM的9.6kbps的访问速度而言,GPRS拥有更快的访问数据通信速度,GPRS技术还具有在任何时间、任何地点都能实现连接,永远在线、按流量计费等特点。EDGE技术进一步提升了数据传输的速率到384K-473K,被称为”2.75G”,数据传输速率更2倍于GPRS。目前,国内的GSM网络普遍具有GPRS通讯功能,移动和联通的网络都支持GPRS,EDGE在部分省市实现了网络覆盖。
GPRS模块,是具有GPRS数据传输功能的GSM模块。GPRS模块就是一个精简版的手机,集成GSM通信的主要功能于一块电路板上,具有发送短消息、通话、数据传输等功能。GPRS模块相当于手机的核心部分,如果增加键盘和屏幕就是一个完整的手机。普通电脑或者单片机可以通过RS232串口与GPRS模块相连,通过AT指令控制GPRS模块实现各种基于GSM的通信功能。
GPRS模块区别于传统的纯短信模块,两者都是GSM模块,但是短信模块只能收发短信和语音通讯,而GPRS模块还具有GPRS数据传输功能。”


由于GPRS,串口都是设备,难道就不需要再在linux内核中使能驱动吗?是这样的,在一开始内核中就已经对串口驱动进行了使能,而GPRS模块中有GPRS模块的驱动,这个模块通过自身的串口不断的发送数据开发板需要做的就是读取然后处理就够了。


串口线将 GPRS模块的串口和开发板的串口连接起来(我连接的是开发的第二个串口(ttys1),因为第一个串口连接PC了(ttys0)),然后将可以使用的手机SIM卡插入 GPRS模块的卡槽;然后启动开发板,接通GPRS模块的电源,然后按下GPRS模块的SW1,让SIM开始工作,搜索网络这时发光二极管D3会闪烁。

二:编辑Linux内核,使其支持PPP拨号上网

[hulu@centos6 linux-3.0]$ make menuconfig
Device dirver --->Network device *** CAIF transport drivers *** <*>PPP (point-to-point protocol) support [*]PPP multilink support (EXPERIMENTAL) [*]PPP filtering <*>PPP support for async serial ports <*>PPP support for sync tty ports <*>PPP Deflate compression <*>PPP BSD-Compress compression <*>PPP MPPE compression (encryption) (EXPERIMENTAL) <*>PPP over Ethernet (EXPERIMENTAL)

三:编译ppp-2.4.4.tar.gz
下载ppp-2.4.4.tar.gz
http://download.csdn.net/detail/zhyustar/1531748
[hulu@centos6 ~]$ mkdir GPRS
[hulu@centos6 ~]$ cd GPRS
[hulu@centos6 GPRS]$ tar -xzf ppp-2.4.4.tar.gz
[hulu@centos6 GPRS]$ ls
ppp-2.4.4 ppp-2.4.4.tar.gz
[hulu@centos6 GPRS]$ cd ppp-2.4.4
[hulu@centos6 ppp-2.4.4]$ ls
sim900GPRS模块ppp拨号上网
文章图片

[hulu@centos6 ppp-2.4.4]$ ./configure
[hulu@centos6 ppp-2.4.4]$ cd chat/
[hulu@centos6 chat]$ ls
chat.8 chat.c Makefile Makefile.linux Makefile.sol2
[hulu@centos6 chat]$ vim chat.c
sim900GPRS模块ppp拨号上网
文章图片

[hulu@centos6 chat]$ vim Makefile
sim900GPRS模块ppp拨号上网
文章图片

[hulu@centos6 chat]$ cd ../pppd
[hulu@centos6 pppd]$ vim auth.c
sim900GPRS模块ppp拨号上网
文章图片

[hulu@centos6 pppd]$ vim Makefile
sim900GPRS模块ppp拨号上网
文章图片

sim900GPRS模块ppp拨号上网
文章图片

[hulu@centos6 ppp-2.4.4]$ make
[hulu@centos6 ppp-2.4.4]$ cd chat
[hulu@centos6 chat]$ ls
chat chat.8 chat.c chat.o Makefile Makefile.linux Makefile.sol2
[hulu@centos6 chat]$ file chat
chat: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
[hulu@centos6 pppd]$ file pppd
pppd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

把生成的pppd 和chat 下载到自己的开发板上,放在/usr/sbin中,并修改权限
如:chmod 777 chat

四:制作脚本文件

gprs模块ppp拨号上网的时候需要如下几个配置文件:
<1> /etc/ppp/peers/gprs
<2> /etc/ppp/chat-gprs-connect
默认情况在开发板的/etc/ppp/目录下建立文件gprs-connect-chat,它是在ppp底层会话的时候给chat进程的参数,每行是一个“期望/发送”的组合序列。


一个简单的chat脚本有下面的结构:
“” AT
OK ATDT dialnumber
CONNECT “”
1) MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT;
2) 期望收到“OK”字符串,然后发送字符串“ATDT dialnumber”
3) 如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。
4)如果需要进行超时控制,就可以加入如下字段:
TIMEOUT 10
5)如果要增加对特殊情况的处理,就加入下面字段:
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。

编写chat脚本如下:以下都是在开发板上操作
~>cd /etc
~>mkdir ppp
~>cd ppp
~>vi gprs-connect-chat
#/etc/ppp/gprs-connect-chat #Copyright (c) 2016 hulu luhu918@gmail.com # This is second part of the ppp dial script. It will perform the connection ABORT'BUSY' ABORT'NO ANSWER' ABORT'NO CARRIER' ABORT'NO DIALTONE' ABORT'ERROR' ABORT'\nRING\r\n\r\nRING\r'''\rAT OK ATE0 SAY "Press CTRL-C to break the connection process.\n" OK 'AT+CGDCONT=1,"IP","3GNET"'//isp接入网关为中国联通的3GNET OK ATDT*99#//这里要改成自己的运营商号码。。我的这个号码是联通的 #拨号上网 SAY "Waiting for connect...\n" CONNECT '' SAY "Connect Success!\n"

sim900GPRS模块ppp拨号上网
文章图片

编写gprs配置文件:
它的作用是给pppd进程提供配置参数(详见man 8 pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:
~>mkdir peers
~>cd peers
~>vi gprs
#/etc/ppp/peers/gprs # Usage: root>pppd call gprs #set seriral /dev/ttyS1# set baudrate 115200# set flowdate 可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtscts nocrtscts#set debug ,send message to /var/log/messages debug#To keep pppd on the terminal nodetach# Accept the peer's idea of our local IP address ipcp-accept-local # Accept the peer's idea of its (remote) IP address ipcp-accept-remote#dial up connetion as the default route defaultrouteusepeerdns Noipdefault #user huluconnect '/usr/sbin/chat -s -v -f /etc/ppp/chat-gprs-connect'


pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协商网络参数和chap/pap认证,成功后,再进行ncp层的ip的分配。

【sim900GPRS模块ppp拨号上网】五:在开发板上测试ppp拨号

要用ping,你需要将eth0即网口给禁用掉,这样ping才会通过ppp0端口寻找路由连接外网

~>ifconfig eth0 down
~>pppd call gprs & //&是后台执行的意思。。只有这条后台执行。。我们才能在前台检测是否上网
sim900GPRS模块ppp拨号上网
文章图片


如果出现ping得通4.2.2.2,却png不通www.baidu.com,那就是DNS的问题
解决办法:
你可能需要将/etc/ppp/resolv.conf(内容被新获得的dns取代)内容拷贝到/etc/resolv.conf中或者做一个到/etc/resolv.conf的链接
也可以直接编辑/etc/resolv.conf

~>vi /etc/resolv.conf
nameserver 4.2.2.2
nameserver 8.8.8.8
~>ifconfig
sim900GPRS模块ppp拨号上网
文章图片

至此关于sim900GPRS模块ppp拨号上网成功实现,各位读友们有问题直接私聊我!!

    推荐阅读