Linux 使用pppd和ppp程序进行3G/4G拨号
2017-05-25 14:15
771 查看
Linux 使用pppd和ppp程序进行3G/4G拨号
参考连接:http://blog.csdn.net/zhang_danf/article/details/43567559
http://www.cnblogs.com/cryhuang/p/5649372.html
在openwrt的平台上,已经有完整的针对3G/4G模块进行ppp拨号的流程。由于要移植到LSDK上,所以进行了简单的研究,总结如下:
试验环境:Linux 3.3.8/Linux 3.18.23, 通讯模块: 加载成ttyUSB*设备; 目标:使用通讯模块进行3G4G拨号连接互联网 方法:使用pppd和ppp程序,进行拨号连接 前提:安装了ppp、pppd两个程序 摘要:涉及的文件ppp的chat-script拨号脚本(针对不通通讯设备情况需要有所调整,此处不考虑这些情况,大部分都可以使用)、
1. 需要拨号的chat脚本
此处2个脚本都是openwrt中的。1)移动:
diff --git a/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat b/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat new file mode 100644 index 0000000..6656240 --- /dev/null +++ b/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat @@ -0,0 +1,12 @@ +ABORT BUSY +ABORT 'NO CARRIER' +ABORT ERROR +REPORT CONNECT +TIMEOUT 10 +"" "AT&F" +OK "ATE1" +OK 'AT+CGDCONT=1,"IP","$USE_APN"' +SAY "Calling UMTS/GPRS" +TIMEOUT 30 +OK "ATD$DIALNUMBER" +CONNECT ' '
2)电信
diff --git a/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat b/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat new file mode 100644 index 0000000..de49e41 --- /dev/null +++ b/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat @@ -0,0 +1,17 @@ +# This is a simple chat script based off of the one provided by Sierra Wireless +# for CDMA connections. It should work for both Sprint and Verizon networks. + +ABORT BUSY +ABORT 'NO CARRIER' +ABORT ERROR +ABORT 'NO DIAL TONE' +ABORT 'NO ANSWER' +ABORT DELAYED +REPORT CONNECT +TIMEOUT 10 +'' AT +OK ATZ +SAY 'Calling CDMA/EVDO' +TIMEOUT 30 +OK ATDT#777 +CONNECT
3. ppp自动connect脚本
Example:1) Mobile: ./nb-iot mobile
2) Telecom: ./nb-iot telecom
3) Stop the pppd: ./nb-iot stop
测试发现dns不能自动更新,所以增加了一个简单的流程。可能不规范,后期再优化。
diff --git a/rootfs/tozedap-router_4g_industry/etc/nb-iot b/rootfs/tozedap-router_4g_industry/etc/nb-iot new file mode 100755 index 0000000..c0fc783 --- /dev/null +++ b/rootfs/tozedap-router_4g_industry/etc/nb-iot @@ -0,0 +1,84 @@ +#!/bin/sh + +# debug infomation +#set -x + +CONNECT_FILE=/etc/ppp/peers/ppp-connect +CHAT_NAME= + +DEVICE=/dev/ttyUSB1 +USER=cmnet +PASSWORD=cmnet +USE_APN=cmnet +DIALNUMBER=*99***1# + +conf_init() +{ +cat << EOF >> $CONNECT_FILE + $DEVICE + 115200 + debug + #nodetach + crtscts + usepeerdns + noauth + noipdefault + novj + novjccomp + noccp + defaultroute + ipcp-accept-local + ipcp-accept-remote + ms-dns 8.8.8.8 + ms-dns 8.8.4.4 + user $USER + password $PASSWORD + connect 'USE_APN=$USE_APN DIALNUMBER=$DIALNUMBER /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/$CHAT_NAME' + connect 'USE_APN=$USE_APN DIALNUMBER=$DIALNUMBER /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/$CHAT_NAME' +# ipv6-up-script "/lib/netifd/ppp-up" +# ip-down-script "/lib/netifd/ppp-down" +# ipv6-down-script "/lib/netifd/ppp-down" +EOF + + echo > /tmp/resolv.conf.ppp +} + +update_dns() +{ + while true + do + dns=`grep -inr "nameserver" /tmp/resolv.conf.ppp` + if [ "$dns" != "" ]; then + cp /tmp/resolv.conf.ppp /etc/resolv.conf + exit 0 + fi + done +} + +start() +{ + conf_init + pppd call ppp-connect + update_dns +} + +stop() +{ + kill -9 `cat /var/run/ppp0.pid` +} + +case $1 in + telecom) + CHAT_NAME=evdo.chat + start + ;; + mobile) + CHAT_NAME=3g.chat + start + ;; + stop) + stop + ;; +esac + +exit 0
4. 部分log
1)模块枚举[71845.710000] usb 1-1.4: new high-speed USB device number 7 using ehci-platform [71845.820000] option 1-1.4:1.0: GSM modem (1-port) converter detected [71845.830000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0 [71845.840000] option 1-1.4:1.1: GSM modem (1-port) converter detected [71845.850000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1 [71845.850000] option 1-1.4:1.2: GSM modem (1-port) converter detected [71845.860000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2 [71845.870000] option 1-1.4:1.3: GSM modem (1-port) converter detected [71845.880000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3 [71845.890000] option 1-1.4:1.4: GSM modem (1-port) converter detected [71845.890000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB4
2)/dev/ttyUSB*
root@OpenWrt:/# ls /dev/ttyUSB* -al crw-r--r-- 1 root root 188, 0 May 25 02:53 /dev/ttyUSB0 crw-r--r-- 1 root root 188, 1 May 25 02:53 /dev/ttyUSB1 crw-r--r-- 1 root root 188, 2 May 25 02:53 /dev/ttyUSB2 crw-r--r-- 1 root root 188, 3 May 25 02:53 /dev/ttyUSB3 crw-r--r-- 1 root root 188, 4 May 25 02:53 /dev/ttyUSB4 root@OpenWrt:/# ls /dev/ppp -al crw-r--r-- 1 root root 108, 0 May 23 13:26 /dev/ppp
3)拨号logread
root@OpenWrt:/# logread -f Tue May 23 14:59:14 2017 daemon.notice pppd[8293]: pppd 2.4.6 started by root, uid 0 Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (BUSY) Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (NO CARRIER) Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (ERROR) Tue May 23 14:59:15 2017 local2.info chat[8295]: report (CONNECT) Tue May 23 14:59:15 2017 local2.info chat[8295]: timeout set to 10 seconds Tue May 23 14:59:15 2017 local2.info chat[8295]: send (AT&F^M) Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK) Tue May 23 14:59:15 2017 local2.info chat[8295]: AT&F^M^M Tue May 23 14:59:15 2017 local2.info chat[8295]: OK Tue May 23 14:59:15 2017 local2.info chat[8295]: -- got it Tue May 23 14:59:15 2017 local2.info chat[8295]: send (ATE1^M) Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK) Tue May 23 14:59:15 2017 local2.info chat[8295]: ^M Tue May 23 14:59:15 2017 local2.info chat[8295]: ATE1^M^M Tue May 23 14:59:15 2017 local2.info chat[8295]: OK Tue May 23 14:59:15 2017 local2.info chat[8295]: -- got it Tue May 23 14:59:15 2017 local2.info chat[8295]: send (AT+CGDCONT=1,"IP","cmnet"^M) Tue May 23 14:59:15 2017 local2.info chat[8295]: timeout set to 30 seconds Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK) Tue May 23 14:59:15 2017 local2.info chat[8295]: ^M Tue May 23 14:59:15 2017 local2.info chat[8295]: AT+CGDCONT=1,"IP","cmnet"^M^M Tue May 23 14:59:15 2017 local2.info chat[8295]: OK Tue May 23 14:59:15 2017 local2.info chat[8295]: -- got it Tue May 23 14:59:15 2017 local2.info chat[8295]: send (ATD*99***1#^M) Tue May 23 14:59:16 2017 local2.info chat[8295]: expect (CONNECT) Tue May 23 14:59:16 2017 local2.info chat[8295]: ^M Tue May 23 14:59:16 2017 local2.info chat[8295]: ATD*99***1#^M^M Tue May 23 14:59:16 2017 local2.info chat[8295]: CONNECT Tue May 23 14:59:16 2017 local2.info chat[8295]: -- got it Tue May 23 14:59:16 2017 local2.info chat[8295]: send ( ^M) Tue May 23 14:59:16 2017 daemon.debug pppd[8293]: Script /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/4g.chat finished (pid 8294), status = 0x0 Tue May 23 14:59:16 2017 daemon.info pppd[8293]: Serial connection established. Tue May 23 14:59:16 2017 daemon.debug pppd[8293]: using channel 10 Tue May 23 14:59:16 2017 daemon.info pppd[8293]: Using interface ppp0 Tue May 23 14:59:16 2017 daemon.notice pppd[8293]: Connect: ppp0 <--> /dev/ttyUSB2 Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x5a83eff5>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfReq id=0x15 <asyncmap 0x0> <auth chap MD5> <magic 0xb09fd017> <pcomp> <accomp>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: No auth is possible Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfRej id=0x15 <auth chap MD5> <pcomp> <accomp>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x5a83eff5>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfReq id=0x16 <asyncmap 0x0> <magic 0xb09fd017>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfAck id=0x16 <asyncmap 0x0> <magic 0xb09fd017>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x0 magic=0x5a83eff5] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP DiscReq id=0x17 magic=0xb09fd017] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x0 magic=0xb09fd017 5a 83 ef f5] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfReq id=0xe] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfNak id=0xe <addr 0.0.0.0>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfNak id=0x1 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfReq id=0x2 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfReq id=0xf] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfAck id=0xf] Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfAck id=0x2 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>] Tue May 23 14:59:17 2017 daemon.warn pppd[8293]: Could not determine remote IP address: defaulting to 10.64.64.64 Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: local IP address 10.108.204.190 Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: remote IP address 10.64.64.64 Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: primary DNS address 221.179.38.7 Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: secondary DNS address 120.196.165.7 Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: Script /lib/netifd/ppp-up started (pid 8308) Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: Script /lib/netifd/ppp-up finished (pid 8308), status = 0x0 Tue May 23 14:59:18 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x1 magic=0x5a83eff5] Tue May 23 14:59:18 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x1 magic=0xb09fd017 5a 83 ef f5] Tue May 23 14:59:19 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x2 magic=0x5a83eff5] Tue May 23 14:59:19 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x2 magic=0xb09fd017 5a 83 ef f5]
4)测试
root@OpenWrt:/# ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:10.79.90.44 P-t-P:10.64.64.64 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:280 (280.0 B) TX bytes:362 (362.0 B) root@OpenWrt:/# root@OpenWrt:/# ping -I ppp0 www.baidu.com PING www.baidu.com (183.232.231.172): 56 data bytes 64 bytes from 183.232.231.172: seq=0 ttl=54 time=21.993 ms 64 bytes from 183.232.231.172: seq=1 ttl=54 time=85.652 ms ^C --- www.baidu.com ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 21.993/53.822/85.652 ms root@OpenWrt:/# root@OpenWrt:/# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0 10.64.64.64 * 255.255.255.255 UH 0 0 0 ppp0 192.168.0.0 * 255.255.255.0 U 0 0 0 br-lan root@OpenWrt:/#
5. 注释
相关文章推荐
- 使用Gnu gprof进行Linux平台下的程序分析
- 使用Gnu gprof进行Linux平台下的程序分析
- 3G 拨号出现”couldn't open ppp database /var/run/pppd2.tdb“错误
- 在linux下使用PPPOE程序拨号连接小区宽带xDSL的方法
- Linux C++程序进行性能分析工具gprof使用入门
- 使用Gnu gprof进行Linux平台下的程序分析
- linux下使用3G拨号上网
- 使用Gnu gprof进行Linux平台下的程序分析
- 使用eclipse进行调试嵌入式Linux程序
- 如何使用Linux Epoll来进行网络程序开发(译文)
- 破除校园网使用linux的一大障碍,802.1x拨号程序你自己也可以写
- 使用Gnu gprof进行Linux平台下的程序分析
- 使用Gnu gprof进行Linux平台下的程序分析
- GDB arm-linux交叉编译移植和使用方法(特别是对于正在运行的程序或者段错误的程序进行分析)
- 在linux下进行各厂商的GPRS,CDMA,WCDMA,CDMA200模块PPP拨号总结
- 在Linux下使用screen使用退出远程终端后程序依然自动进行
- 在linux下如何使用Makefile对fortran程序进行编译
- Linux下利用ppp-on脚本进行GPRS拨号上网
- Linux下adb驱动问题Linux下使用手机USB调试模式连接ADB进行Android程序的调试
- Linux C++程序进行性能分析工具gprof使用入门