Linux 下移植移远 EC200T-CN,实现 ppp拨号上网

目录

ppp 协议简介

PPP协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输

EC200T驱动移植

  1. 按官方文档修改驱动并编译进kernel

  2. 检查是否有USB driver for GSM and CDMA modems驱动
    如果有该驱动,当插入EC200T模块时在/dev目录下会有ttyUSB1~ttyUS3设备。可以使用命令lsusb查看所有的usb设备(usb的vid和pid),EC200T usb 设备的vid 和 pid 分别是2c7c, 6026。

ppp(4.8.0) 交叉编译

  1. 配置交叉编译环境
    (此处省略)

  2. 下载源码,并配置
    ./configure

  3. 编译
    make CC=arm-linux-gcc

  4. 拷贝
    将 编译后的chat 、pppd 、pppdump、pppstats拷贝到板子的 /usr/sbin/目录下。

chat:调制解调器的自动对话脚本,Chat程序定义了一个计算机和调制解调器之间对话交流,其主要目的是用来在本地PPPD和远端PPPD程序之间建立连接(简单说就是与4G模块进行AT命令交互的流程表,最终实现与ISP运营商的连接)。
pppd:点对点协议守护进程,其功能为实现ppp策略性的内容,包括所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。
pppdump:将使用pppd记录选项编写的文件转换为人类可读的格式
pppstats:显示PPP连线状态。pppstats(point to point protocol status)文件。

ppp 相关配置

  1. 新建目录用于放置pppd脚本
    mkdir -p /etc/ppp/peers

  2. 复制脚本至目录
    将供应商提供的脚本移动到/etc/ppp/peers目录下,主要是以下五个文件:
    quectel-ppp:pppd的配置文件。
    quectel-chat-connect:主要用来通过AT命令完成4G模块的拨号过程。
    quectel-chat-disconnect:pppd断开连接执行的脚本。
    ip-up:主要配置dns。
    quectel-ppp-kill:断开ppp的连接脚本,也可以用killall pppd命令。

  3. 修改quectel-ppp配置
    修改usb串口名,提供的脚本默认是ttyUSB3,EC200S模块的串口是ttyUSB2。波特率不变115200。
    修改卡的移动卡拨号的用户名和密码,中国移动的用户名和密码是空的,所以要改为user "" password "",脚本默认是user "test" password "test"。

    运营商(ISP) APN 拨号号码 账号 密码
    中国联通WCDMA 3GNET *99#
    中国电信CDMA #777 ctnet@mycdma.cn vnet.mobi
    中国移动TD-SCDMA CMNET 981#
    中国移动GPRS/EGDE CMNET 99***1#
  4. 修改quectel-chat-connect配置
    主要修改中国移动的APN参数(其它运行商的参数信息参考上表),具体修改如下:
    OK AT+CGDCONT=1,"IP","CMNET",,0,0
    OK ATD*99***1#
    其中CMNET就是移动的APN,99***1#就是拨号号码。

  5. 启动pppd进程
    使用pppd call quectel-ppp &命令启动进程,如果启动成功,则会有pppd进程在后台运行,另外使用ifconfig命令查看会多出一个ppp0虚拟网卡。

  6. 检验设备是否可以联网
    ping www.baidu.com 如果ping得通则配置成功,若不能检查/etc/resolv.conf文件

配置分析

chat脚本分析

# /etc/ppp/peers/quectel-chat-connect
ABORT "BUSY"  
ABORT "NO CARRIER"  
ABORT "NO DIALTONE"  
ABORT "ERROR"  
ABORT "NO ANSWER"  
TIMEOUT 30  
"" AT  
OK ATE0 #关闭回显,ATE打开回显  
OK ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2  
这是多个指令的缩写,分别如下:  
ATI 获取产品标识信息  
AT+CSUB 返回SubEdition: V04  
AT+CSQ 获取信号强度和误码率  
AT+CPIN? 查询PIN输入状态,返回READY则表示已输入  
AT+COPS? 查询当前操作符状态  
AT+CGREG?查询网络注册状态  
AT&D2 #切换至命令模式  
#Insert the APN provided by your network operator, default apn is 3gnet  
OK AT+CGDCONT=1,"IP","CMNET",,0,0 #设置PDP上下文  
OK ATD*99***1# #设置拨号号码  
CONNECT #期望收到CONNECT  

PPP配置脚本分析

PPP的配置脚本值得是供应商提供的quectel-ppp脚本,逐个分析下:

# /etc/ppp/peers/quectel-ppp
# Usage:root>pppd call quectel-ppp
#Modem path, like /dev/ttyUSB3,/dev/ttyACM0, depend on your module, default path is /dev/ttyUSB3
/dev/ttyUSB2 115200
#Insert the username and password for authentication, default user and password are test
user "" password ""
#The chat script, customize your APN in this file
connect 'chat -s -v -f /etc/ppp/peers/quectel-chat-connect'
#The close script
disconnect 'chat -s -v -f /etc/ppp/peers/quectel-chat-disconnect'
#Hide password in debug messages
hide-password
#The phone is not required to authenticate
noauth #不需要对等体验证自身
#Debug info from pppd
debug
#If you want to use the HSDPA link as your gateway
defaultroute #协商完成之后,在系统路由表中添加一个默认路由表
#pppd must not propose any IP address to the peer
noipdefault #当本地 IP地址未指定时关闭使用 hostname生成本地 IP地址的
行为。使用该选项,对端在 IPCP协商时必须指定本端的本地 IP地址。
#No ppp compression
novj #在发送和接收方向禁用Van Jacobson风格的TCP/IP报头压缩
novjccomp #在Van Jacobson风格的TCP/IP报头压缩中禁用连接id压缩选项。有了这个选项,pppd将不会省略来自Van Jacobson压缩TCP/IP报头的连接id字节,也不会要求对等端这样做。
noccp #关闭CCP(压缩控制协议)协商。只有当对等端有bug并且被pppd的CCP协商请求困惑时,才需要这个选项。
ipcp-accept-local #将接受对端配置的本端的本地 IP地址
ipcp-accept-remote #将接受对端给出的自己的 IP地址即远端 IP地址
local #不使用调制解调器的控制信号线,设置该选项, pppd会忽略
调制解调器的 CD(Carrier Detect) 信号的状态。该选项与 modem选项功能相反。
#For sanity, keep a lock on the serial line
lock #创建一个锁定文件,其他程序发现存在这个文件后,就能得
知相应的串口已经被使用
modem
dump #创建一个锁定文件,其他程序发现存在这个文件后,就能得
知相应的串口已经被使用
nodetach #成功建立连接(即拨号成功)继续在前台执行
#Hardware flow control
nocrtscts #关闭硬件流控制
remotename 3gppp #设置对端假设名字
ipparam 3gppp #给ip-up 、ip-pre-up 和ip-down 脚本提供附加的参数,
 字符串作为这些脚本的第六个参数。
ipcp-max-failure 30 #设置若接收到的 IPCP configure-NAK 次数超过 <n>则发送 IPCP configure-Reject ,默认为 10。
#Ask the peer for up to 2 DNS server addresses
usepeerdns #向对等端请求最多2个DNS服务器地址。对等体提供的地址(如果有的话)被传递到环境变量DNS1和DNS2中的/etc/ppp/ip-up脚本,环境变量USEPEERDNS将被设置为1。此外,pppd将创建一个/var/run/ppp/resolv.conf文件,其中包含一个或两个名称服务器行,其中包含对等体提供的地址

linux pppd源码分析

//TODO

QA

Q:CME ERROR, 错误码为0x7
A:一般是由于sim卡没有识别导致,或者拨号错误需要重新上电。

Q: ping 百度延迟很大,达到几秒
A:可能卡被限速了,换张卡试试

打赏作者