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\n"
"" +++ATH
SAY "\nGood bye\n"

獲取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程序的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM