前言:

fl2440开发板介绍:https://blog.csdn.net/PipiAvenger/article/details/79563996

目前,手机端基本普遍具有GPRS模块,该模块集成了手机常见的功能如:打电话、发短信、上网等功能,那么这些常见的功能能否提供给安装了Linux最小系统的开发板使用呢?答案是肯定的,当然要实现1个模块添加到一个新的开发板上,这需要解决许多问题,例如:它们的连接方式是什么?

怎么确认他们是否建立连接?他们成功建立之后交流方式又是什么?

本文介绍关于将一个安装了Linux系统(DIY)的开发板如何与GPRS模块连接,并且使用GPRS模块的特殊指令进行PPP拨号上网;

感兴趣可以了解一下关于开发板使用AT指令集进行打电话,接电话,挂电话,发短信,收短信测试,以及对应的编程:



工具准备:

本次使用搭载sim900b的GPRS模块;

以及FL2440实验板;

windows8.1及安装了CentOS6.7的虚拟机;

tftp下载软件;

一根ch340usb转串口的串口线;


一.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的通信功能。

本次使用搭载sim900b的GPRS模块;

以及FL2440实验板;

以下凡是localhost表示在在自己虚拟机(CentOS6.7)下操作

二.配置开发板的内核,以保证支持ppp拨号上网

(一)进行模块连接:

1.GPRS模块使用串口转usb连接到FL2440开发板上(并且各自插上电源);

2.用一根网线将PC和开发板相连(使用tftp下载方式,下载到开发板上,因此需要这一步);

3.额外需要一个usb转串口将PC与开发板相连(使用SecureCRT的方式登入进开发板系统);

(二)配置最小系统Linux内核对PPP拨号的支持:

按上述操作之后,还需要对FL2440开发板进行内核配置(系统内核选取linux3.0(可在Linux官网上下载的到,或者找我以前的博客,前面也有记录)),其中就需要设置内核对ppp和usb转串口的支持(注意usb的时钟线问题(可参考我的博客:常见问题故障));

首先找到开发板对应的内核:/home/guozhihao/Desktop/fl2440/linux/linux-3.0

然后在该路径下,输入make menuconfig进入以下界面:

[guozhihao@localhost linux-3.0]$ make menuconfig

Dvice Drivers --->Network device support --->

关于PPP拨号的勾选上;

完成PPP拨号内核的设置;

三.ppp工具下载

[guozhihao@localhost ppp]$ wget https://download.samba.org/pub/ppp/ppp-2.4.7.tar.gz

上述链接需要使用谷歌搜索,才可以找到,CSDN下载需要积分;且,该版本(2.4.7)

说明:

Linux下用ppp上网需要用到两个程序:一个是pppd还有一个是chat;这两个已包含在内;

pppd的功能是在成功获得分配的IP地址之后创建一个网络设备;

chat是用于与GPRS模块的AT命令交流,发送联网请求对应的AT命令;

四.解压并设置对应参数

(一)执行./configure使其生成对应的Makefile:

原因:前面有介绍关于configure Makefile 两者关系

 [guozhihao@localhost ppp]$ tar -xzf ppp-2.4.7.tar.gz[guozhihao@localhost ppp]$ cd ppp-2.4.7[guozhihao@localhost ppp-2.4.7]$ ls
Changes-2.3  contrib  linux    pppdump      README.eap-srp   README.MSCHAP81  README.sol2
chat         etc.ppp  modules  pppstats     README.linux     README.pppoe     scripts
common       FAQ      PLUGINS  README       README.MPPE      README.pppol2tp  SETUP
configure    include  pppd     README.cbcp  README.MSCHAP80  README.pwfd      solaris[guozhihao@localhost ppp-2.4.7]$ cd chat/

(二)修改对应的Makefile信息(添加使用最小内核系统使用的交叉编译器位置):

[guozhihao@localhost chat]$ vim Makefile

添加代码如下:(红色为添加代码)

CC =/opt/xtools/arm920t/bin/arm-linux-gcc

以及让其以静态的形式存放在arm-linux开发板上

    $(CC) -o chat chat.o --static    

(三)添加完后,执行make,产生chat文件:

[guozhihao@localhost chat]$ file chatchat: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped

可看到对应的chat文件为32位 ARM 静态可执行文件;

(四)与上一步相同步骤:

[guozhihao@localhost ppp-2.4.7]$ cd  pppd/

同样对pppd文件下的Makefile进行配置;

[guozhihao@localhost pppd]$ vim Makefile

添加代码:

CC = /opt/xtools/arm920t/bin/arm-linux-gcc
 [guozhihao@localhost pppd]$ file pppdpppd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped

五.编译完成后移植

以下方法可供参考,你也可以使用其他的方法进行移植:

由于下载包下载到虚拟机下,所以借助PC当中介,进行传输文件;

1.将之前的编译完成ELF文件,也就是pppd、chat使用tftp下载的方式,下载到开发板上;

以pppd文件为例:

[guozhihao@localhost pppd]$ sz pppdrzStarting zmodem transfer.  Press Ctrl+C to cancel.Transferring pppd...100%     671 KB  671 KB/s 00:00:01       0 Errors

2.在PC端打开tftp软件,设置好对应位置

然后在开发板上使用tftp服务下载到/GPRS/ppp        (下载失败请参照我之前的tftp服务常见问题参考参考:https://blog.csdn.net/PipiAvenger/article/details/79702084)

/GPRS/ppp >: tftp -gr chat 192.168.92.99chat                 100% |*******************************|   607k  0:00:00 ETA3.给下载的文件赋予权限/GPRS/ppp >: chmod 777 chat pppd

    

六.拨号上网测试

在开发板的/etc目录下新建/ppp/peers目录并在peers目录创建如下配置文件:可以参考man手册(对应命令man 8 pppd)进行配置脚本,并且教你使用的方法:以下是我参考配置而成的脚本

/etc/ppp/peers >: ls
wcdma                  wcdma-chat-connect     wcdma-chat-disconnect

以下是设置对应的脚本:

并且对应的设置参数可以在pppd.h中的全局变量之中查看对应的设置意思


  /etc/ppp/peers >: vim wcdma
#Copyright (c) 2018 guozhihao#设置调试信息,并将调试信息记录到/var/log/messages文件下
debug#lock锁定正在使用的串口,防止其他应用程序或者命令调用
nodetach
lock#设置串口位置
/dev/ttyUSB0#设置波特率
115200#set flowerate
crtscts     #硬件流控
show-password    #显示密码
usepeerdns    #使用peer路径下的dns,没有会自动创建
noauth     #取消认证
noipdefault #禁用默认IP
novj
novjccomp
noccp#Accept the peer's idea of our local IP address
ipcp-accept-local#ipcp-accept-remote
ipcp-accept-remote#对应的参数-s -v -f可以在使用 chat -h来了解是对应设置意思
connect '/GPRS/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
disconnect '/GPRS/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'

/etc/ppp/peers >: vim wcdma-chat-connect
ABORT 'NO CARRIER'            #判断AT返回值参见错误
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'BO ANSWER'
'' \rAT                                     #驱动GPRS模块必须命令
OK \rATZ                                #那所有当前参数设置为用户的自定义参数
OK \rAT+CGDCONT=1,"IP","cmnet"    #使用终端设备建立上下文,并设置PDP类型为IP类型,以及接入点为cmnet
#
OK-AT-OK ATDT*99***1#           #进行拨号连接(有些模块例如sim900a是使用ATD来进行拨号)CONNECT \d\c

说明:

AT+CGDCONT是设置上网接口的连接点(APN),三大运营商有各自不同的接点:


/etc/ppp/peers >: vim wcdma-chat-disconnect
ABORT "ERROR"        #ABORT对错误的返回值进行处理
ABORT "NO DIALTONE"
SAY "\n Sending break to the modem\n"
'' "\K"
'' "+++ATH"        #+++停止数据传输并且进入命令模式,ATH表示挂断拨号过程
SAY "\nGoodbay\n"

上述设置好后:

使用命令pppd call wcdma&

/etc/ppp/peers >: pppd call wcdma&
[1]-  Done(8)                    pppd call wcdma
/etc/ppp/peers >: abort on (NO CARRIER)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (BUSY)
abort on (BO ANSWER)
send (^MAT^M)
expect (OK)
^MAT^M^M
OK
-- got itsend (^MATZ^M)
expect (OK)
^M
^MATZ^M^M
OK
-- got itsend (^MAT+CGDCONT=1,"IP","cmnet"^M)
expect (OK)
^M
^MAT+CGDCONT=1,"IP","cmnet"^M^M
OK
-- got itsend (ATDT*99***1#^M)
expect (CONNECT)
^M
ATDT*99**:1#^M^M
CONNECT
-- got itsend (\d)
....

一堆的请求连接信息,最后连接成功,会分配IP地址,并且在你的网卡设备中多出一个ppp0:

此时,需要重新设置默认网卡,本开发板默认路由器为eth0而非ppp0所以:

/etc/ppp/peers >: route add default dev ppp0        //如果该语句没有设置,发现已经已经分配了地址,但是ping不通可参考这个语句;
/etc/ppp/peers >: ping 4.2.2.2
PING 4.2.2.2 (4.2.2.2): 56 data bytes
64 bytes from 4.2.2.2: seq=4 ttl=47 time=835.000 ms
64 bytes from 4.2.2.2: seq=7 ttl=47 time=855.000 ms
64 bytes from 4.2.2.2: seq=11 ttl=47 time=695.000 ms
64 bytes from 4.2.2.2: seq=15 ttl=47 time=815.000 ms
^C
--- 4.2.2.2 ping statistics ---
26 packets transmitted, 4 packets received, 84% packet loss
round-trip min/avg/max = 695.000/800.000/855.000 ms

ping 成功!

连上互联网后,不仅会分配IP地址,还会分配DNS:如果想查看分配的DNS,可以从查看/etc/ppp/peer/路径下的resolv.conf里面就是配置的分配的dns;

由于信号特别差:丢包率很高:达到70%~80%;

至此,成功上网;

GPRS模块--PPP手动拨号相关推荐

  1. sim900芯片—GPRS模块ppp拨号上网

    --------------------------------------- 主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4  开发板平台: FL2440 ...

  2. linux下GPRS模块ppp拨号上网

     交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900 ...

  3. linux ppp拨号 socket,请问GPRS模块ppp拨号不成功是什么原因

    成功了,增加了两个步骤 sd:AT+CGDCONT=1,"IP","CMNET" rv: OK 0D 0A 4F 4B 0D 0A sd:ATD*99***1# ...

  4. GPRS模块的使用(一)

    GPRS模块的使用(一) 为了做一个QT gprs模块用上网传输数据,我这里用的是BenQ  M23 GSM/GPRS模块. 首先我简单介绍一下: BENG公司的M23/M23模块是目前市场上的主流G ...

  5. 关于PPP拨号 和 AT指令实现GPRS模块联网的疑问

    以下内容摘抄自互联网: ppp拨号 与 at命令的疑问 GPRS模块在Linux平台上ppp拨号上网总结与心得 以PPP拨号实现GPRS与因特网的数据通信的具体实现流程 问: 我刚接触GPRS,了解A ...

  6. linux下通过gprs模块拨号上网(转)

    这几天做了一下gprs拨号上网,模块是西门子的mc39i.我的系统是fedora core 6.其实很简单,我又有高手指导,:-).   首先从/usr/share/doc/ppp-2.4.4/scr ...

  7. linux GPRS模块拨号上网

    使用GPRS模块拨号上网之前需要一直pppd和chat 首先配置内核中的ppp选项, Make menuconfig Device dirver --->Network device │ │   ...

  8. linux 串口4g ppp,在ARM-linux上实现4G模块PPP拨号上网

    原标题:在ARM-linux上实现4G模块PPP拨号上网 在ARM平台上实现 的 ,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚 ...

  9. 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)

    目录 一.EC20 4G模块简介 二.根据移远官方文档修改EC20 4G模组驱动   1.因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/u ...

最新文章

  1. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置、移除图例)实战(density plot)
  2. 豆瓣评分 9.3 的 Java 巨著 | Bruce Eckel 重讲 Java 的编程思想
  3. unique_ptr使用介绍
  4. 小红伞和NOD32基于源码的免杀经验总结
  5. php 做fft,什么是numpy.fft.rfft和numpy.fft.irfft及其在MATLA...
  6. leetcode BFS(python+c++)
  7. keil和proteus的联调设置
  8. 推荐几款强大流行的BI系统
  9. 虚幻4地形怎么增加层_虚幻周报20200512 | 该来的总会来的!
  10. 练习:去除df某列里面字符串里面的空格, .str.strip(); series.str.replace(); df.replace()
  11. 使用NVM安装升级PNPM报错的问题
  12. 计算机远程操作之后怎么保护,电脑远程控制怎么操作 两种方法介绍
  13. 你不知道的常用 代码分析 规范
  14. echarts:基于上一篇我来给大家讲讲 如果你设置了自动播放但是鼠标放上去不生效 停留时间很短 应该怎么做呢???
  15. 安卓中Paint与Canvas用法
  16. 招商银行信用卡中心一面
  17. python123第五周随机密码生成_利用Python生成随机密码
  18. python中小学示范课_Python正课72 —— 继承
  19. 傻博士----物理层
  20. 加载大量图片内存暴增导致闪退 Terminated due to memory issue(内存暴增SDWebImage加载高清大图崩溃)

热门文章

  1. POJ2027No Brainer
  2. c语言作业的心得土灰,作业心得体会范文4篇
  3. matlab仿真建立机器臂模型并得到其D-H参数表
  4. CatBoost 是如何自动高级处理类别型特征的?
  5. 引入文件报错的解决方法(bootstrap+jquery项目)
  6. EasyScheduler学习(一):部署与安装
  7. 智慧园区可视化设计思路
  8. C语言入门项目——BMI指数计算器
  9. Mysql的连接分类和详解
  10. 一套手机点餐收银系统源码,系统功能完善、页面美观,开源分享!