zoukankan      html  css  js  c++  java
  • pppd调试心得.md

    描述

    1. pppd是用于驱动3g模块的一种方式,其本质是和运营商APN协商,建立连接
    2. 其与运营商之间使用ppp协议,而用户在应用层使用系统提供的socket即可,从而忽略底层使用的时何种接口的设备,避免因硬件不同而造成应用程序不同

    pppd的命令一般 为

    pppd call [option]

    进入pppd程序之后,可能会占用前台,此时使用CTRL-C推出,同时也会结束pppd,或在命令后加上'&',让其在另一个线程运行,防止控制台被占用

    流程

    我归类为两个过程:

    1. chat
    2. ppp协商

    chat

    1. 使用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
    "
    "" +++ATH
    SAY "
    Good bye
    "
    

    获取IP成功之后,设备即可通过ppp接口上网

    其中:

    1. AT+COPS?可以获取运营商
    2. AT+CGREG? 可以查看模块是否已经注网,回复+CGREG: 0,1 表示已经注册上网了
    3. AT+CGDCONT是设置APN的命令,因为不同运营商的APN不同,而使用错误的运营商可能导致卡被锁
    4. 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
    

    其中:

    1. prsist 是重连参数,maxfail设置最大重连次数
    2. -detach 设置ppp为后台运行,不会打印和接收SIG信号,若使用nodetach则在前台运行,会答应和接收SIG信号

    心得

    1. 我的工作流程时每次pppd拨号之前会先拉4G模块的RESET重启模块,过1s再拉高(因为发现模块之后在重新上电或重启之后才会取读SIM卡)
    2. 再过15s,开始拨号,因为模块重启之后,系统会需要进行USB的重新枚举,这需要一段时间
    3. 执行pppd call quectel-ppp进行ppp连接,此时如过卡注网较慢,可能会第一次注网失败,指示,pppd option中的persist就发挥作用了,其会在失败之后15s进行重试,一般这时模块已经注网了,这样模块就成功连接上网络了
    4. 而APN,我则是通过LTE_APN=CMNET,以shell脚本内部变量的方式传递给pppd程序的
  • 相关阅读:
    PyCharm的常用方法
    python的基本语法
    Python 环境搭建----windows
    Python 特点
    DML语句
    DDL语句
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
  • 原文地址:https://www.cnblogs.com/answerinthewind/p/11691942.html
Copyright © 2011-2022 走看看