Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1222324
  • 博文数量: 105
  • 博客积分: 127
  • 博客等级: 入伍新兵
  • 技术积分: 962
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-29 15:22
文章分类

全部博文(105)

文章存档

2021年(1)

2019年(3)

2018年(1)

2017年(11)

2016年(47)

2015年(32)

2014年(4)

2012年(6)

我的朋友

分类: LINUX

2015-09-01 14:40:12

         Linux pppd gprs 3g 拨号上网

这几年用过很多linux 下的GPRS,3G,4G上网模块,但也没有什么总结,其中还是有一些小细节,值得我去
写成一个小的记录片段。更多的是为了回忆一下原来的过程。

我所使用的pppd版本是2.4.5,当时是最新的吧。源码网址: style="font-family:宋体;font-size:18px;">。看了看,
最新的都到
2.4.7了。移植这里就不说了,网上大把资料,相对来说,问题也不大。

关于硬件连接。

GPRS模块需要两个串口,流控一般模块是可以主动选择开或者不开。3G模块则只需要一个usb接口。另外
这里也不得不提一下,模块上关于
resetPIN脚,这个管脚需要与GPIO口相连。其目的有两个,一个是为了
随时能控制其复位,另一个是为了在系统重启时能同时重启此模块。看起来这两点是一样的,其实不是一样
的,分别应对我在使用这些模块时,遇到的两种问题。当然不同的模块,
reset脚的时序还是有差别的。如果
另辟蹊径,采用控制模块的电源,也是可以的。不要觉得这个方法奇葩,我所遇到的硬件工程师,很多喜欢
这样去设计。

关于内核配置。

GPRS相对来说简单,只需要配置串口就好了。3G模块则需要配置如下选项:

DEVICE DRIVERS 下(USB转串口)



同时还要配置ppp协议

Device drivers / Network device support 下(ppp 协议)



另外在内核driver/usb/serial/option.c 添加对应3G模块的VID,PID。打开这个文件就知道怎么添加了。有些模块
资料上,还找不到
 VID,PID。可能还需要联系供应商的FAE。最终会在终端设备的/dev/目录下面产生几个ttyUSB*
的设备节点。不同的厂家不一样,可能是三个,也可能是五个。这些不同的节点代表着不同的意义,正如GPRS
块的两个串口一样。
AT调试口,MODEM口等等。

 

 关于拨号脚本。

 GPRS3G脚本区别不大,可以统一。主要是针对运营商区。拨号脚本目录树如下:


pppd拨号脚本放在etc 目录下面。

peers , gprs-connect-chat , gprs-disconnect-chat 为脚本文件,以GPRS为例如下:

peers 文件

点击(此处)折叠或打开

  1. debug
  2. kdebug 7
  3. nodetach //禁止后台运行
  4. lock
  5. /dev/ttySP0 //指定拨号串口
  6. 115200 //波特率
  7. nocrtscts //无流控
  8. user card
  9. password card
  10. hide-password
  11. usepeerdns
  12. persist //永久自动重连
  13. noauth
  14. noipdefault
  15. defaultroute
  16. novj
  17. novjccomp
  18. noccp
  19. ipcp-accept-local
  20. ipcp-accept-remote
  21. connect "/sbin/chat -s -v -f /etc/ppp/chat/gprs-connect-chat"
  22. disconnect "/sbin/chat -s -v -f /etc/ppp/chat/gprs-disconnect-chat"

gprs-connect-chat 文件

点击(此处)折叠或打开

  1. ABORT 'NO CARRIER'
  2. ABORT 'ERROR'
  3. ABORT 'NO DIALTONE'
  4. ABORT 'BUSY'
  5. ABORT 'NO ANSWER'
  6. '' AT
  7. OK ATH
  8. OK AT&K0 //特定模块
  9. OK AT#SII=2 //特定模块,打开串口2
  10. OK AT+CGDCONT=1,\"IP\",\"CMNET\" //不同运营商不一样,见下表
  11. OK ATD*99***1# //不同运营商不一样,见下表
  12. CONNECT ''

上面针对运营商的部分,参考下表


来自于http://blog.csdn.net/duloveding/article/details/8287758

gprs-disconnect-chat文件

点击(此处)折叠或打开

  1. ABORT OK
  2. ABORT BUSY
  3. ABORT DELAYED
  4. ABORT "NO ANSWER"
  5. ABORT "NO CARRIER"
  6. ABORT "NO DIALTONE"
  7. ABORT VOICE
  8. ABORT ERROR
  9. ABORT RINGING
  10. TIMEOUT 12
  11. "" \K
  12. "" \K
  13. "" \K
  14. "" +++ATH
  15. "" +++ATH
  16. "" +++ATH
  17. "" \K
  18. "" AT+CGATT=0
  19. SAY "\nGoodbye\n"

电信3G拨号脚本:ppp_cdma2000_evdo.rar

联通3G拨号脚本:ppp_wcdma.rar

移动2G拨号肢本:ppp_gprs_EGDE.rar

调用则是  pppd call gprs(peers下面的脚本名)


关于一些琐碎的事。

1,  拨号脚本中,有些模块是需要加user ,password才可以拨得上网。

2,  不同厂家的模块会有区别,复位时序,AT指令。

3,  重启系统时,需要给模块一个复位信号,以便模块也重启。

4,  断线后重连。在拨号的正常状态中,有可能断线,这时候需要一个很好的机制保证其断线重连。
persist 这个选项很重要。但往往配置了这个选项,还是会出现意外情况。所以程序中需要去检测
模块在线情况。

参考脚本:http://blog.chinaunix.net/uid-23381466-id-58634.html

点击(此处)折叠或打开

  1. dns1="211.95.193.97"
  2. dns2="211.136.20.203"

  3. sleep 8
  4. /bin/pppd call gprs-siem &
  5. sleep 12
  6. while true
  7. do
  8.        ping -s 1 -c 1 $dns1 ……去PING第一个DNS
  9.        if [ "$?" != "0" ] ……假如PING不通
  10.        then
  11.            ping -s 1 -c 2 $dns2 ……去PING第二个DNS
  12.            if [ "$?" != "0" ] ……假如PING不通
  13.            then
  14.               killall pppd ……结束PPPD进程
  15.               pppd call gprs-siem & ……再去拨号
  16.               sleep 12 ……等待12秒
  17.            else
  18.               sleep 5 ……如果是PING DNS2通的话就直接等待5秒
  19.            fi
  20.        else
  21.               sleep 5 ……如果是PING DNS1通的话就直接等待5秒(一般要设置多长时间去PING请改这里)

  22.        fi
  23. done

5,  AT 指令参考

at+cdv 
atd        打电话

at+chv

at+chup  挂断电话

ate1   打开回显

at+creg?  查看注册信号

at+cpos?   查看是否识别到卡

at+cpin?  查询命令

at+cfun=1  开启全功能

at+csq?    查看信号

at+sysinfo 查看所有状态

at+ccid 获得SIM卡标识

at+cfun 设置模块运行状态

at+cgmr  返回软件版本

 





阅读(9067) | 评论(0) | 转发(0) |
0

上一篇:脚本语言 ahk

下一篇:linux 线程

给主人留下些什么吧!~~