pppd调试心得.md
描述
- pppd是用于驱动3g模块的一种方式,其本质是和运营商APN协商,建立连接
- 其与运营商之间使用ppp协议,而用户在应用层使用系统提供的socket即可,从而忽略底层使用的时何种接口的设备,避免因硬件不同而造成应用程序不同
pppd的命令一般 为
pppd call [option]
进入pppd程序之后,可能会占用前台,此时使用CTRL-C推出,同时也会结束pppd,或在命令后加上'&',让其在另一个线程运行,防止控制台被占用
流程
我归类为两个过程:
- chat
- ppp协商
chat
- 使用AT指令,使模块连接到制定APN,并进入PPP模式
我分享下自己chat脚本:
quectel-chat-connect
#!/bin/sh
exec /opt/usr/bin/chat -s -v \
ABORT "BUSY" \
ABORT "NO CARRIER" \
ABORT "NO DIALTONE" \
ABORT "NO ANSWER" \
TIMEOUT 5 \
"" AT \
'OK-+++\c-OK' ATE0 \
OK ATI \
OK AT+CSQ \
OK AT+CPIN? \
OK AT+COPS? \
OK AT+CGREG? \
0,1 AT+CGDCONT=1,"IP","$LTE_APN",,0,0 \
OK ATDT*99# \
CONNECT
quectel-chat-disconnect
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
"" +++ATH
SAY "\nGood bye\n"
获取IP成功之后,设备即可通过ppp接口上网
其中:
- AT+COPS?可以获取运营商
- AT+CGREG? 可以查看模块是否已经注网,回复+CGREG: 0,1 表示已经注册上网了
- AT+CGDCONT是设置APN的命令,因为不同运营商的APN不同,而使用错误的运营商可能导致卡被锁
- ATDT命令是拨号命令 *99#是号码,我实验时移动/联通用这个号码都可以上网
ppp 协商
ppp协商时与APN服务器进行协商,确定通讯时使用的参数并且获取本机IP
quectel-ppp
hide-password
noauth
connect /etc/ppp/peers/quectel-chat-connect
disconnect '/opt/usr/bin/chat -E -s -v -f /etc/ppp/peers/quectel-chat-disconnect'
debug
/dev/ttyUSB2
19200
# If you want to use the HSDPA link as your gateway
defaultroute
# pppd must not propose any IP address to the peer
noipdefault
# No ppp compression
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local
# For sanity, keep a lock on the serial line
lock
dump
logfile /var/log/pppd_log
-detach
# retry when failed
persist
maxfail 10
user "test" password "test"
crtscts
remotename 3gppp
ipparam 3gppp
# Ask the peer for up to 2 DNS server addresses
usepeerdns
其中:
- prsist 是重连参数,maxfail设置最大重连次数
- -detach 设置ppp为后台运行,不会打印和接收SIG信号,若使用nodetach则在前台运行,会答应和接收SIG信号
心得
- 我的工作流程时每次pppd拨号之前会先拉4G模块的RESET重启模块,过1s再拉高(因为发现模块之后在重新上电或重启之后才会取读SIM卡)
- 再过15s,开始拨号,因为模块重启之后,系统会需要进行USB的重新枚举,这需要一段时间
- 执行pppd call quectel-ppp进行ppp连接,此时如过卡注网较慢,可能会第一次注网失败,指示,pppd option中的persist就发挥作用了,其会在失败之后15s进行重试,一般这时模块已经注网了,这样模块就成功连接上网络了
- 而APN,我则是通过LTE_APN=CMNET,以shell脚本内部变量的方式传递给pppd程序的
pppd调试心得.md的更多相关文章
- LPC2478_调试心得(转)
1.在调试“E:\htwang\smart2200v201\ARM嵌入式系统实验教程(二)\开发板出厂编程程序\液晶显示程序\LCM_Disp”的程序时,想使用外部RAM进行仿真调试,在将ADS1.2 ...
- MIPI接口LCD屏调试心得(转)
源: MIPI接口LCD屏调试心得
- VGA调试心得
以前自己调试过视频信号,无非就时钟加行场同步加数据线,如果视频信号出问题,第一看现象,第二测频率,反正出问题不是消隐信号出问题,就是时钟频率出问题.通过这种方式也调试成功过几个显示屏,然后就以为自己对 ...
- js断点调试心得
虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点 ...
- React Native调试心得
在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...
- Pycharm Debug调试心得
1.操作步骤: 1-1.添加断点:直接在标记处点击鼠标左键即可.(删除断点只需再点击断点处即可) 1-2.Debug下运行代码 1-3.按照所需调试进行代码调试.Debug的调试方式如下所示: 分别为 ...
- IE漏洞的调试心得
在调试漏洞的过程中,个人感觉最棘手的就是ie浏览器的漏洞和flash player的漏洞了.这里打算记录一下学习过程中的心得(主要是基于uaf类),以方便新人学习. 首先,ie漏洞与众不同的是,程序的 ...
- iOS 调试心得
修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...
- (原)阅读Android-Camera2Video的demo源码和调试心得
转载请注明出处:http://www.cnblogs.com/lihaiping/p/6142512.html 最近因为项目需要使用到camera的功能,所以针对官方的demo源码进行一番阅读,并 ...
随机推荐
- Redis列表类型
列表类型(list) 可以存储一个有序的字符串列表.常用的操作是向列表两端添加元素. 一个列表类型键最多能容纳2^32 -1个元素. 命令 向列表两端增加元素 LPUSH key value [val ...
- VMware安装GHOST版XP不成功的解决
VMware安装GHOST版XP不成功的解决 1. A:\GHOSTERR.TXT 失败 分析产生的原因是没有对造作系统的分区进行激活操作. 为什么安装盘就不用管什么激活不激活的? 因为,使 ...
- 线程与IO
pread/pwrite 定位和读取成为原子操作
- ls查看所有文件
ls -al 查看所有文件,包括隐藏文件
- Matplotlib 图形绘制
章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...
- Problem A: Assembly Required K路归并
Problem A: Assembly Required Princess Lucy broke her old reading lamp, and needs a new one. The cast ...
- greenplum 数组操作
参考:http://gpdb.docs.pivotal.io/4390/admin_guide/query/topics/functions-operators.html Table 4. Advan ...
- JMeter-响应断言设置
针对如上请求,可以设置3种相应断言: 1. 2. 3.
- Readiness 探测【转】
除了 Liveness 探测,Kubernetes Health Check 机制还包括 Readiness 探测. 用户通过 Liveness 探测可以告诉 Kubernetes 什么时候通过重启容 ...
- CentOS下安装Orcale
以前没有安装过,最近安装了.感觉在Liunx安装真的超麻烦.这是技术文档,分享给大家. LINUX安装oracle数据库步骤: 1.安装依赖包 yum -y install gcc gcc-c ...