android pppd流程,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程序的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值