嵌入式Linux开发中,移远4G模组通过ppp拨号上网,命令操作过程如下。

chat:调制解调器的自动对话脚本,Chat程序定义了一个计算机和调制解调器之间对话交流,其主要目的是用来在本地PPPD和远端PPPD程序之间建立连接(简单说就是与4G模块进行AT命令交互的流程表,最终实现与ISP运营商的连接)。

pppd:点对点协议守护进程,其功能为实现ppp策略性的内容,包括所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。

pppdump:将使用pppd记录选项编写的文件转换为人类可读的格式。

pppstats:显示PPP连线状态。pppstats(point to point protocol status)。

一、Test AT Function。

方法一:

root@ms:~# ls /dev/ttyU*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3  /dev/ttyUSB4
root@ms:~#
root@ms:~# cat /dev/ttyUSB2 &
[1] 1292
root@ms:~# echo -en "AT\r\n" > /dev/ttyUSB2
root@ms:~# ATOKATOKroot@ms:~#

方法二(本人测试没反应):

root@ms:~# busybox microcom /dev/ttyUSB2

二、Test PPP Function。

1、关闭其它网络,eth*和wlan*。不关闭,需手动更改默认路由。

root@ms:~# ifconfig eth0 down
root@ms:~#
root@ms:~# ifconfig
lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:16436  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:312 (312.0 B)  TX bytes:312 (312.0 B)root@ms:~#
root@ms:~# route add defatult 0.0.0.0 mask 255.255.255.255 10.64.64.64
route: resolving defatult
root@ms:~#

2、所需文件。移远EC20、EC25的Modem path为/dev/ttyUSB3。

必须文件:wcdma、wcdma-chat-connect、wcdma-chat-disconnect,目录为/etc/ppp/peers/。

不必须文件:ip-up、ip-down,目录为/etc/ppp。可从Ubuntu系统中拷贝。

/etc/ppp/ip-up、/etc/ppp/ip-down这两个文件分别在ppp链路成功、链接断开时执行一次。可以利用这个去实现pppoe断线自动重连。

3、启动ppp服务。

root@ms:~# pppd call wcdma &
[1] 1288
root@ms:~# pppd options in effect:
debug           # (from /etc/ppp/peers/wcdma)
nodetach                # (from /etc/ppp/peers/wcdma)
dump            # (from /etc/ppp/peers/wcdma)
noauth          # (from /etc/ppp/peers/wcdma)
user password           # (from /etc/ppp/peers/wcdma)
remotename 3gppp                # (from /etc/ppp/peers/wcdma)
/dev/ttyUSB3            # (from /etc/ppp/peers/wcdma)
115200          # (from /etc/ppp/peers/wcdma)
lock            # (from /etc/ppp/peers/wcdma)
connect /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect               # (from /etc/ppp/peers/wcdma)
disconnect /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect         # (from /etc/ppp/peers/wcdma)
crtscts         # (from /etc/ppp/peers/wcdma)
local           # (from /etc/ppp/peers/wcdma)
hide-password           # (from /etc/ppp/peers/wcdma)
novj            # (from /etc/ppp/peers/wcdma)
novjccomp               # (from /etc/ppp/peers/wcdma)
ipcp-accept-local               # (from /etc/ppp/peers/wcdma)
ipcp-accept-remote              # (from /etc/ppp/peers/wcdma)
ipparam 3gppp           # (from /etc/ppp/peers/wcdma)
noipdefault             # (from /etc/ppp/peers/wcdma)
defaultroute            # (from /etc/ppp/peers/wcdma)
usepeerdns              # (from /etc/ppp/peers/wcdma)
noccp           # (from /etc/ppp/peers/wcdma)
abort on (BUSY)
abort on (NO CARRIER)
abort on (NO DIALTONE)
abort on (ERROR)
abort on (NO ANSWER)
timeout set to 120 seconds
send (AT^M)
expect (OK)
AT^M^M
OK-- got itsend (^MATZ^M)
expect (OK)
^M
ATZ^M^M
OK-- got itsend (^MAT+CGDCONT=1,"IP","3gnet",,0,0^M)
expect (OK)
^M
AT+CGDCONT=1,"IP","3gnet",,0,0^M^M
OK-- got itsend (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT-- got itsend (\d)
Script /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect finished (pid 1289), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB3
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4794f369> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0xac3f292c> <pcomp> <accomp>]
No auth is possible
sent [LCP ConfRej id=0x0 <auth chap MD5>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x4794f369> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xac3f292c> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xac3f292c> <pcomp> <accomp>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [LCP DiscReq id=0x2 magic=0xac3f292c]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <addr 10.221.137.224> <ms-dns1 61.156.60.66> <ms-dns2 202.102.128.68>]
sent [IPCP ConfReq id=0x2 <addr 10.221.137.224> <ms-dns1 61.156.60.66> <ms-dns2 202.102.128.68>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfAck id=0x2 <addr 10.221.137.224> <ms-dns1 61.156.60.66> <ms-dns2 202.102.128.68>]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.221.137.224
remote IP address 10.64.64.64
primary   DNS address 61.156.60.66
secondary DNS address 202.102.128.68
Script /etc/ppp/ip-up started (pid 1295)
Script /etc/ppp/ip-up finished (pid 1295), status = 0x0root@ms:~#

4、检查IP/DNS/Route。

root@ms:~# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocolinet addr:10.221.137.224  P-t-P:10.64.64.64  Mask:255.255.255.255UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:3RX bytes:52 (52.0 B)  TX bytes:58 (58.0 B)root@ms:~#
root@ms:~# cat /etc/resolv.conf
meserver 61.132.163.68
nameserver 202.102.213.68root@ms:~#
root@ms:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
10.64.64.64     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
root@ms:~#
root@ms:~# ping www.baidu.com
PING www.baidu.com (14.215.177.38): 56 data bytes
64 bytes from 14.215.177.38: seq=0 ttl=50 time=55.281 ms
64 bytes from 14.215.177.38: seq=1 ttl=50 time=58.692 ms
64 bytes from 14.215.177.38: seq=2 ttl=50 time=60.334 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 55.281/58.102/60.334 ms
root@ms:~#

5、关闭PPP call。

root@ms:~# killall pppd
Terminating on signal 15
Connect time 3.0 minutes.
Sent 488 bytes, received 971 bytes.
Script /etc/ppp/ip-down started (pid 1305)
sent [LCP TermReq id=0x2 "User request"]
rcvd [LCP TermAck id=0x2]
Connection terminated.
root@ms:~# abort on (ERROR)
abort on (NO DIALTONE)
\send (\k"^M)
send (+++ATH"^M)Good bay
Script /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect finished (pid 1307), status = 0x0
Serial link disconnected.
Script /etc/ppp/ip-down finished (pid 1305), status = 0x0[1]+  Done(5)                 pppd call wcdma
root@ms:~#

6、查看网络节点。

root@ms:~# ifconfig
lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:16436  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)root@ms:~#

附:

1、指定网络节点ping命令:ping -I ppp0 www.baidu.com。

2、在拨号之前已经启用了以太网eth0,ping广域网失败,原因有两个,一个是路由表中的默认值为eth0生成的,另一个是默认dn服务器地址不能被ppp0识别。

3、默认网关解决如下。

在pppd脚本中使能了defaultroute后,pppd会在拨号成功后向路由表中添加一条默认网关信息,但是因为之前已经有一条默认网关了,于是添加失败,默认网关依然是之前eth设置的,因此在pppd call gprs之前我们应该先route del default来删除默认路由(最好写个脚本来实现删除默认路由–拨号等一系列操作)。

  或者将ppp0设置为默认路由。

  先删除原来路由,route del default

  再将ppp0设置为默认路由,route add default dev ppp0

4、dns问题解决如下。

在pppd脚本中使能了usepeerdns后,pppd会在拨号成功后,在/etc/ppp下生成resolv.conf,这是ISP运营商提供的dns,我们应该将拷贝或者连接到/etc目录下,当然这件事就可以交给ip-up来做。

按照ppp拨号过程中打印信息可以发现,在退出pppd进程时,会调用/etc/ppp/ip-down。因此删除默认网关,恢复dns就交由ip-down脚本做了。

ip-up脚本:

#!/bin/bash
#ip-up
dns_file="/etc/resolv.conf"rm "$dns_file"
ln /etc/ppp/resolv.conf "$dns_file"

ip-down脚本

#!/bin/bash
#ip-down
#set -vx
dns_file="/etc/resolv.conf"rm $dns_filecat > "$dns_file" <<EOF
# auto create by ip-down
nameserver 114.114.114.114
nameserver 8.8.8.8
EOFchmod 755 "$dns_file"/etc/init.d/networking restartecho "Set dns for eth0"

5、设置了断线重拨(lcp-echo-failure、lcp-echo-interval)。

嵌入式Linux,4G模组使用,命令,EC20、EC25...相关推荐

  1. 实测|飞凌嵌入式OK3588-C开发板4G模组的使用与测试

    本篇试用报告由发烧友  ouxiaolong提供,感谢ouxiaolong的支持.飞凌嵌入式会持续开展开发板有奖试用活动,更有京东E卡等着你!欢迎大家的持续关注. 飞凌嵌入式OK3588-C开发板是一 ...

  2. 移远 EC200x/EC600x/EG912Y 4G 系列模组 AT 命令 MQTT 接入 ThingsCloud 云平台

    移远 4G 系列模组 AT 命令 MQTT 接入 移远 4G 系列模组的 AT 命令支持 MQTT,请参考以下步骤,只需几分钟就可以接入云平台并上报数据,还可以从云平台下发命令实现远程实时控制. 如果 ...

  3. tinkerboard2 Android11系列-4G模组调试

    上一期介绍了一下tinkerboard2 Android11下面增加触摸和旋转的方式(https://blog.csdn.net/chenchen00000000/article/details/12 ...

  4. AliOS Things基于USB通道外接4G模组的方案

    1.概述 本文介绍AliOS Things关于USB外接广域网芯片连接入云的方案.物联网设备联网方案,可分为OpenCPU的方式与外接通信芯片的方式.OpenCPU的应用层与网络层运行在同一芯片上,该 ...

  5. 一个NB-IoT/4G模组的AT拨号联网流程

      在各类物联网应用中,NB或者4G网络是常见的通信介质,其最大的优势是可以借助现有的移动基站,无需额外建立基站,所以广泛应用在三表(水表.电能表.天然气表)无线抄表中.通常情况下,对于这类小流量的数 ...

  6. OneNET Studio云平台STM32物联网开发(2)- STM32+Air724UG(4G模组)数据采集显示上报

    实现效果视频 STM32 Air724UG 4G OneNET数据传输 本章教学视频(1) OneNET StudioSTM32+Air724UG -1 本章教学视频(2) OneNET Studio ...

  7. linux wifi模组网络延迟问题

    1.linux wifi模组:WiFi设置为sta模式后,连接上路由器,Ping路由器的时候发现数据传输的延时不稳定 解决的方法: <1>.修改驱动关闭power save低功耗Makef ...

  8. DTU网关开发方案——芯讯通4G模组C二次开发

    前言 物联网现在越来越热,去年给客户定制了一款低成本DTU网关,采用MCU(STM32)+4G模组的方案,支持协议定制.远程配置.断缓续传,成本不到同行一半,价钱便宜量又足 o( ̄︶ ̄)o 同时有些应 ...

  9. linux组的管理命令,Linux用户与组管理命令

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d" " -f1 | sort -u 或 who | cut -d ...

最新文章

  1. 麦当劳数字化转型中获得的6个数据科学经验
  2. POJ 1848 (一道不错的树形dp)
  3. CentOS 6.3系统安装配置KVM虚拟机
  4. matlab常用函数——方程函数
  5. Django项目部署(nginx1.18+uwgsi)
  6. SpringBoot整合Swagger生成接口文档
  7. 优酷路由宝 OpenWrt 刷机
  8. 《JAVA并发编程的艺术》之 Java并发编程实战
  9. 时间序列平稳性检验方法汇总
  10. vs code 简易使用教程(前端)
  11. linux系统显卡显存容量,Linux下检查显存大小
  12. 开发一个多用户商城系统多少钱
  13. FairyGUI个人使用手册 只有重点(1)
  14. 对nand flash设备进行升级
  15. 亿起发网站主获取CPS数据接口说明
  16. 自由幻想系统不能提供服务器,系统指南-自由幻想召集令-QQ自由幻想官方网站...
  17. DICOM:再次剖析fo-dicom中DicomService的自定义事件绑定
  18. 细数云计算产品和技术-云计算安全
  19. 云大计算机初试最高分,2019年云南大学考研初试成绩及总分排名查询通知
  20. 【计算机视觉】基于BOW的图像检索

热门文章

  1. linux vi行首加符号,vi/vim 中如何在每行行首或行尾插入指定字符
  2. Android中在自己的程序中打开另一个apk(应用)
  3. Linux最低可用内存设置,linux下可用内存只有不到4G
  4. Vega数据可视化工具——教你轻松玩转大数据可视化 | 附代码
  5. 2021年国产软硬件行业发展研究报告
  6. docker 设计原理
  7. vc mysql教程视频教程_vc++_vc++教程_vc++视频教程 _课课家
  8. Django计算机毕业设计创意摄影交流平台python(源码程序+lw+远程部署)
  9. 二本学历做Java程序员还有出路吗?本科生和研究生程序员差别大吗
  10. 关于Keil5编译器报错:ARMLMD_LICENSE_FILE: unset - 解决