ubuntu10.10 使用ppp拨号接入GPRS的经验
一实验目标和环境: 实验目标: 1.最终的目标是在嵌入式的linux下使用sim4200进行3g制式TD-SCDMA的拨号上网,使得嵌入式能够连接入网络。 2.初步目标:在unbuntu10.10下使用sim4200通过usb转串口来进行GPRS拨号,熟悉拨号环境。 实验环境: ubuntu10.10 Sim4200 pppd2.4.5
二.解决思路 和PPP连接关系密切的有两个脚本是chat和options两个脚本。其中,chat脚本是用来进行AT呼叫和控制的脚本,而options脚本就影响PPP连接的。
1. CHAT脚本 一个简单的chat脚本有下面的结构: "" AT OK ATDT dialnumber CONNECT "" 一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串。这个脚本每一项的具体含义是这样的: 1) MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT; 2) 期望收到“OK”字符串,然后发送字符串“ATDT dialnumber” 3) 如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。 这样的chat脚本是最简单的,如果需要进行超时控制,就可以加入如下字段: TIMEOUT 10 如果要增加对特殊情况的处理,就加入下面字段: ABORT BUSY ABORT NO ANSWER ABORT RINGING 这三行语句的意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。 所以在考虑到各种特殊情况下,配置一个PPP连接的CHAT脚本就可以像下面这样: TIMEOUT 30 ABORT BUSY ABORT NO ANSWER ABORT RINGING "" AT OK ATDT dialnumber CONNECT ""
2.OPTIONS脚本 OPTIONS脚本的内容,为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等。 例如下面的options脚本: ttyS0 ---- 指定连接使用的设备,例如:ttyS0、ttyS1等 57600 ---- 设置连接使用的控制字符传输速率,可以设置为57600、115200等 debug ---- 如果需要加入调试信息,就加入参数debug logfile /var/ ppplog ---- 将连接过程中的信息输入到某个文件中 mtu 1500 -detach noipdefault ---- 不使用默认IP就可以加入参数noipdefault defaultroute usepeerdns ---- 使用服务器端协商的DNS就可以设置参数usepeerdns lcp-echo-failure 4 ---- 当连续4次没有收到发出的LCP回声请求时,就认为服务器端已不再响应,就退出执行。这里的失败次数可以灵活来决定。 -ccp ---- 不使用压缩控制协议 -vj ---- 关掉式IP头压缩 -chap ---- 不使用chap鉴权 -mschap-v2 ---- 不使用mschap鉴权 user hide-password connect "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat脚本的位置。加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。-t 6 指定了执行chat该命令的时间为6s。chat脚本的位置可以位于/etc/目录下,也可以位于/var下,这个可以更加需要灵活设置。 persist --- 永久链接(自动重拨) crtscts --- 告诉ppp使用modem的硬件流量控制 modem --- 使ppp使用DCD信号来判断连接是否正常,有无掉线现象 deflate --- 使pppd使用defalte压缩方式 idle --- 设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接 lock --- 则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。 demond --- 参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送
3. 鉴权脚本 一般情况下,PPP连接是需要进行身份认证的。签权方式有两种,一种是PAP鉴权,另一种是CHAP鉴权。鉴权需要的用户名和密码是存放在PAP-secrets和chap-secrets脚本中,以如下方式存放: Username * password 需要进行鉴权时,通过在options脚本中指定鉴权方式为PAP或CHAP,PPP模块就会从PAP-secrets和chap-secrets脚本中读出用户名和密码,附加到PPP的鉴权包中,发送到服务器端进行身份认证。
4. PPP拨号过程与脚本之间的关系 脚本设置成功以后,怎么和pppd2.4.4一起工作呢?这个需要从pppd程序的主函数入手。 这个过程是这样的: Pppd程序启动以后,就会按照pathname.h中所指定的文家位置去寻找options脚本文件。这个可以按照需要指定文件的位置,确保pppd能够准确找到该文件。 Pppd找到options文件后,按顺序读入参数行。在这里,就可以获取系统要使用的是哪个设备来进行联网、设备的速率是多少。 Pppd 将配置的参数解析为程序当中的全局变量标识符,进行pppd连接控制。
三.试验脚本 二里面的信息我参考别人的其测试环境是pppd2.4.4,而自己采用的是pppd2.4.5。所以请自己甄别。 **************************************************************************** (1)chat脚本(文件信息/etc/ppp/gprs-connect-chat)内容如下,前面的1 2 3 标号是vim的行号:
1 TIMEOUT 15 2 ABORT BUSY 3 ABORT "NO CARRIER" 4 ABORT "NO ANSWER" 5 ABORT RINGING 6 TIMEOUT 40 7 8 '' \rAT 9 OK ATSO=0 10 #OK ATEOV1 11 '' ATZ 12 OK ATE1 13 OK AT+CGDCONT=1,"IP","CMNET" 14 OK ATDT*99***1# 15 CONNECT ''
#有些是介绍采用AT+CGDCONT=1,"IP","CMWAP",接入的网络服务点不一样的,可以尝试。 注意 chat文件中是不可以使用#........ 来进行注释的。
13 OK AT+CGDCONT=1,"IP","CMNET"#有些是介绍采用AT+CGDCONT=1,"IP","CMWAP" 如果13行改为这样就会冒出CME ERROR:100 的错误的,CME ERROR :100是unknown error 一般人为出错的可能行是很大的。 **************************************************************************** 2.options脚本(文件信息:/etc/ppp/peers/gprs)
- 1 # example configuration for a dialup connection authenticated with PAP or CHAP
-
2 #
-
3 # This is the default configuration used by pon(1) and poff(1).
-
4 # See the manual page pppd(8) for information on all the options.
-
5
-
6 # MUST CHANGE: replace myusername@realm with the PPP login name given to
-
7 # your by your provider.
-
8 # There should be a matching entry with the password in /etc/ppp/pap-secrets
-
9 # and/or /etc/ppp/chap-secrets.
-
10 #user "myusername@realm"
-
11
-
12 # MUST CHANGE: replace ******** with the phone number of your provider.
-
13 # The /etc/chatscripts/pap chat script may be modified to change the
-
14 # modem initialization string.
-
15 #connect "/usr/sbin/chat -s -v -f /etc/chatscripts/pap -T ********"
-
16
-
17 connect "/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat"
-
18 # Serial device to which the modem is connected.
-
19 #/dev/modem
-
20 #由于我自己采用的是usb转串口,所以是使用ttyUSB0
-
21 /dev/ttyUSB0
-
22
-
23 # Speed of the serial line.
-
24 # 波特率设置
-
25 115200
-
26
-
27 #没有硬件流量检测
-
28 nocrtscts
-
29
-
30 #使ppp使用DCD信号来判断连接是否正常,有无掉线现象
-
31 modem
-
32
-
33 #创建锁定文件,在ppp拨号时其他程序使用该串口时会发现已经被锁住
-
34 lock
-
35
-
36 #加入调试信息
-
37 debug
-
38
-
39 nodetach
- 40 # Assumes that your IP address is allocated dynamically by the ISP.noipdefault
41 # Try to get the name server addresses from the ISP. 42 usepeerdns 43 # Use this connection as the default route. 44 defaultroute 45 46 # Makes pppd "dial again" when the connection is lost. 47 persist 48 49 # Do not ask the remote to authenticate. 50 noauth 51 52 defaultroute 53 54 asyncmap 0 55 56 #设置接入的用户名,在chap-secrests 和pap-secrets中使用 57 user "ming" 58 59 0.0.0.0:0.0.0.0 #本地和远端的ip都设为0使得接入的isp分配本地的ip地址 60 61 ipcp-accept-local #要求peer也就是isp给自己分配动态的ip地址 62 63 #ipcp-accept-remote 64 #lcp-echo-failure 12 65 #lcp-echo-interval 3 66 noccp #不需要压缩控制协议,有可能对端不需要,根据自己的isp的情况确定 67 #novj 68 #novjccomp 69 #-mn 70 71 #更多其他参数含义请参照PPPD2.4.5中的option.c中的注释
**************************************************************************** 鉴权文件chap-secrets和pap-secrets的文件内容都一样的如下,(文件信息:/etc/ppp/pap-secrets /etc/ppp/chap-secrets):
- 1 # Secrets for authentication using CHAP
-
2 # client server secret IP addresses
-
3 ming * 123456 *
-
4
*************************************************************************** 启动方式: 在root权限下 进入/etc/ppp/peers 文件中 在终端里面输入 pppd call gprs 就进行拨号了 当回显示中有出现: local IP address 59.64.150.223 remote IP address 59.64.150.223 恭喜你,你的GPRS网络接通了。 ********************************************************************** 希望在嵌入式linux下实验网络接入的朋友都顺利。 接下来项目进展是进行TD-SCDMA网络的接入,敬请期待。 装载请说明文章来源:http://blog.chinaunix.net/space.php?uid=25617967&do=blog&id=199924 作者:Phenixwhite
参考文档: http://blog.csdn.net/linweig/archive/2010/04/02/5446429.aspx http://blogold.chinaunix.net/u3/90973/showart_1998886.html |