GPRS模块--PPP手动拨号
前言:
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手动拨号相关推荐
- sim900芯片—GPRS模块ppp拨号上网
--------------------------------------- 主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台: FL2440 ...
- linux下GPRS模块ppp拨号上网
交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900 ...
- linux ppp拨号 socket,请问GPRS模块ppp拨号不成功是什么原因
成功了,增加了两个步骤 sd:AT+CGDCONT=1,"IP","CMNET" rv: OK 0D 0A 4F 4B 0D 0A sd:ATD*99***1# ...
- GPRS模块的使用(一)
GPRS模块的使用(一) 为了做一个QT gprs模块用上网传输数据,我这里用的是BenQ M23 GSM/GPRS模块. 首先我简单介绍一下: BENG公司的M23/M23模块是目前市场上的主流G ...
- 关于PPP拨号 和 AT指令实现GPRS模块联网的疑问
以下内容摘抄自互联网: ppp拨号 与 at命令的疑问 GPRS模块在Linux平台上ppp拨号上网总结与心得 以PPP拨号实现GPRS与因特网的数据通信的具体实现流程 问: 我刚接触GPRS,了解A ...
- linux下通过gprs模块拨号上网(转)
这几天做了一下gprs拨号上网,模块是西门子的mc39i.我的系统是fedora core 6.其实很简单,我又有高手指导,:-). 首先从/usr/share/doc/ppp-2.4.4/scr ...
- linux GPRS模块拨号上网
使用GPRS模块拨号上网之前需要一直pppd和chat 首先配置内核中的ppp选项, Make menuconfig Device dirver --->Network device │ │ ...
- linux 串口4g ppp,在ARM-linux上实现4G模块PPP拨号上网
原标题:在ARM-linux上实现4G模块PPP拨号上网 在ARM平台上实现 的 ,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚 ...
- 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)
目录 一.EC20 4G模块简介 二.根据移远官方文档修改EC20 4G模组驱动 1.因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/u ...
最新文章
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置、移除图例)实战(density plot)
- 豆瓣评分 9.3 的 Java 巨著 | Bruce Eckel 重讲 Java 的编程思想
- unique_ptr使用介绍
- 小红伞和NOD32基于源码的免杀经验总结
- php 做fft,什么是numpy.fft.rfft和numpy.fft.irfft及其在MATLA...
- leetcode BFS(python+c++)
- keil和proteus的联调设置
- 推荐几款强大流行的BI系统
- 虚幻4地形怎么增加层_虚幻周报20200512 | 该来的总会来的!
- 练习:去除df某列里面字符串里面的空格, .str.strip(); series.str.replace(); df.replace()
- 使用NVM安装升级PNPM报错的问题
- 计算机远程操作之后怎么保护,电脑远程控制怎么操作 两种方法介绍
- 你不知道的常用 代码分析 规范
- echarts:基于上一篇我来给大家讲讲 如果你设置了自动播放但是鼠标放上去不生效 停留时间很短 应该怎么做呢???
- 安卓中Paint与Canvas用法
- 招商银行信用卡中心一面
- python123第五周随机密码生成_利用Python生成随机密码
- python中小学示范课_Python正课72 —— 继承
- 傻博士----物理层
- 加载大量图片内存暴增导致闪退 Terminated due to memory issue(内存暴增SDWebImage加载高清大图崩溃)