在ARM+LINUX上使用pppd拔号上网(GPRS)流程

发布者:RadiantGlow最新更新时间:2016-06-20 来源: eefocus关键字:ARM  LINUX  pppd拔号上网 手机看文章 扫描二维码
随时随地手机看文章
我的编程环境是vmware + fedora9, ARM目标板为ATMEL 9G45,LINUX内核2.6.30, GPRS模块为TELIT公司的GC864-DUAL-V2,使用3线制串口连接(TXD RXD GND)


1.修改2.6.30内核选项,
 make menuconfig
Device drivers -> Networking device support -> PPP(point to point protocol) support
 我选了以下模块(以M方式即module方式)
PPP support for async serial ports
PPP support for sync tty ports
PPP Deflate compression
PPP BSD-Compress compression
SLIP(serial line) support
之后编译:make && make install && make modules && make modules_install
得到了几个ko形式的内核库文件,拷贝它们到ARM目标板上,并在/etc/init.d/rcS中动态加载:
insmod /etc/ppp/slhc.ko                                        
insmod /etc/ppp/ppp_generic.ko                                 
insmod /etc/ppp/ppp_async.ko                                   
insmod /etc/ppp/ppp_synctty.ko                                 
insmod /etc/ppp/ppp_deflate.ko                                 
insmod /etc/ppp/bsd_comp.ko                                    
insmod /etc/ppp/slip.ko
注意加载顺序,我记得好象必须把slhc.ko先加载

2. 移植ppp与连接网络过程,  
1) ppp2.4.4 源码编译过程

#./configure

#make CC=arm-linux-gcc 注意指定arm-linux-gcc的路径,或是直接用绝对路径指定

需要拷贝到ARM目标板的文件有:
pppd
pppdump
pppstatus
chat
2 ) 脚本准备
有4个脚本需要准备,一个是规则文件/etc/ppp/gprs-connect-chat,一个是参数文件/etc/ppp/peers/gprs, 还有认证文件:pap-secret和chap-secret。(其实我这里只用到了pap-secret, 至于chap-secret 没有有到。anyhow,把它们全创建上)
(1) 脚本 #gprs-connect-chat:
TIMEOUT 15
ABORT '\nBUSY\r'
ABORT '\nNO ANSWER\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
#'' AT
#'OK-+++\c-OK' ATH0
TIMEOUT         40
''              \rAT
OK              AT+FLO=0          #这个是GC864-DUAL-V2特别要设置的,就是要关闭流控
OK              ATS0=0
OK              ATE0V1
OK              AT+CGDCONT=1,"IP","CMNET" #连接中国移动cmnet网
OK              ATDT*99*1#
CONNECT         ''
(2) 脚本gprsoptions
#/etc/ppp/peers/gprsoptions
# Usage:   root>pppd call gprsoptions
/dev/ttyS4
115200
nocrtscts
modem
#noauth
#auth
#-pap
#+chap
lock
debug
nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
user cmnet
#user smsong
0.0.0.0:0.0.0.0
ipcp-accept-local
#ipcp-accept-remote
#lcp-echo-failure  12
#lcp-echo-interval 3 
noccp                
#novj                
#novjccomp           
persist              
connect '/etc/ppp/chat -s -v -f /etc/ppp/gprs-connect-chat'
(3) 认证文件pap-secrets 根据需要来改
/etc/ppp # cat pap-secrets 
# Secrets for authentication using PAP
# client    server     secret                    IP addresses
cmnet   *       cmnet   *
(4) 认证文件 chap-secrets 根据需要来修改,现在暂时没用到
/etc/ppp # cat chap-secrets 
# Secrets for authentication using CHAP
# client    server     secret                    IP addresses
''      *       ''      *

3) 调用过程
ifconfig eth0 down //先关闭有线网卡,以免与拔号初始化冲突
/etc/ppp/pppd call gprs& //启动/etc/ppp/peers/gprs脚本
ifconfig eth0 up //重新开有线网卡
来看连接的显示日志内容:
/etc/ppp # ./pppd call gprs&
/etc/ppp # timeout set to 15 seconds
abort on (\nBUSY\r)
abort on (\nNO ANSWER\r)
abort on (\nRINGING\r\n\r\nRINGING\r)
timeout set to 40 seconds
send (^MAT^M)
expect (OK)
AT^M^M
OK
 -- got it

send (AT+FLO=0^M)
expect (OK)
^M
AT+FLO=0^M^M
OK
 -- got it

send (ATS0=0^M)
expect (OK)
^M
ATS0=0^M^M
OK
 -- got it

send (ATE0V1^M)
expect (OK)
^M
ATE0V1^M^M
OK
 -- got it

send (AT+CGDCONT=1,"IP","CMNET"^M)
expect (OK)
^M
^M
OK
 -- got it

send (ATDT*99*1#^M)
expect (CONNECT)
^M
^M
CONNECT
 -- got it

send (^M)
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyS4
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
sent [LCP ConfReq id=0x1 ]
rcvd [LCP ConfAck id=0x1 ]
rcvd [LCP ConfReq id=0x1 ]
sent [LCP ConfAck id=0x1 ]
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
sent [PAP AuthReq id=0x1 user="cmnet" password=]
rcvd [PAP AuthAck id=0x1 "Welcome!"]
Remote message: Welcome!
PAP authentication succeeded
sent [IPCP ConfReq id=0x1 ]
rcvd [IPCP ConfReq id=0x1 ]
sent [IPCP ConfAck id=0x1 ]
rcvd [IPCP ConfRej id=0x1 ]
sent [IPCP ConfReq id=0x2 ]
rcvd [IPCP ConfNak id=0x2 ]
sent [IPCP ConfReq id=0x3 ]
rcvd [IPCP ConfAck id=0x3 ]
local  IP address 10.176.120.186
remote IP address 192.168.202.0
primary   DNS address 218.201.96.130
secondary DNS address 211.137.191.26

4)  查看网络设置与ping实验
/etc/ppp # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.176.120.186  P-t-P:192.168.202.0  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:64 (64.0 B)  TX bytes:82 (82.0 B)
来ping 一下看看
/etc/ppp # ping www.163.com -c 3
PING www.163.com (221.204.240.161): 56 data bytes
64 bytes from 221.204.240.161: seq=0 ttl=46 time=466.873 ms
64 bytes from 221.204.240.161: seq=1 ttl=46 time=435.762 ms
64 bytes from 221.204.240.161: seq=2 ttl=46 time=414.000 ms

--- www.163.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 414.000/438.878/466.873 ms

3.其它问题

1 )  设置DNS地址
/etc/ppp 下会由拔号自动产生resolv.conf 文件, 但它和 /etc/resolv.conf 并不是同一个文件,所以有的时候不能解析DNS。
一个好办法是,首先保证存在/etc/resolv.conf, 然后在/etc/ppp下创建软链接ln -s /etc/ppp/resolv.conf /etc/resolv.conf
这样在拔号成功后,在/etc/resolv.conf中会有类似以下内容:
nameserver 218.201.96.130
nameserver 211.137.191.26
2) 只能ping IP地址,不能ping域名的现象
在busybox的命令帮助页面有这样一段话:
引用:
LIBC NSS
When used with glibc, the BusyBox 'networking' applets will similarly require that you install at least some of the glibc NSS stuff (in particular, /etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*).
于是把arm-linux工具链的lib目录下的 libnss_dns* , libnss_files* , libresolv* 拷贝到ARM目标板的/lib下。可以ping域名啦 
/etc/ppp # ping www.163.com
PING www.163.com (221.204.240.161): 56 data bytes
64 bytes from 221.204.240.161: seq=0 ttl=46 time=641.269 ms
64 bytes from 221.204.240.161: seq=1 ttl=46 time=435.801 ms
64 bytes from 221.204.240.161: seq=2 ttl=46 time=446.776 ms
64 bytes from 221.204.240.161: seq=3 ttl=46 time=381.381 ms
64 bytes from 221.204.240.161: seq=4 ttl=46 time=468.495 ms

--- www.163.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 381.381/474.744/641.269 ms


3) 如何实现拔号与中国联通的3G 联网?
换用TELIT公司的UC864-E, 使用USB连接方式。指定串口为ttyUSB0
对于ppp方面,只需要更改4个脚本中的少量内容
a. 更改options脚本
  把gprsoptions更名为g3options, 把里面的这一行参数/dev/ttyS4 更改为/dev/ttyUSB0,
把connect '/etc/ppp/chat -s -v -f /etc/ppp/gprs-connect-chat'
更改为connect '/etc/ppp/chat -s -v -f /etc/ppp/g3-connect-chat'
b. 更改chat脚本
TIMEOUT 15
ABORT '\nBUSY\r'
ABORT '\nNO ANSWER\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
#'' AT
#'OK-+++\c-OK' ATH0
TIMEOUT         40
''              \rAT
OK              AT+FLO=0
OK              ATS0=0
OK              ATE0V1
OK              AT+CGDCONT=1,"IP","UNINET" #UNINET是代表中国联通网的意思
#OK              AT+CGDCONT=1,"IP","CMNET"
OK              ATDT*99*1#
CONNECT    
c. 更改pap-secrets
# Secrets for authentication using PAP
# client    server     secret                    IP addresses
#cmnet   *       cmnet   *  #如果是中国移动GPRS就用cmnet
uninet *       uninet  * #如果是中国联通3G就用uninet

d. 更改chap-secrets
同上pap-secrets

关键字:ARM  LINUX  pppd拔号上网 引用地址:在ARM+LINUX上使用pppd拔号上网(GPRS)流程

上一篇:在ARM linux上使用usb接口的触屏
下一篇:arm linux上建立nfs文件系统

推荐阅读最新更新时间:2024-03-16 14:57

基于MB86R01的ARM嵌入式汽车数字化虚拟仪表
  文中主要介绍了富士通的系统LSI芯片MB86R01的工作机制,以及集成在单芯片上的ARM926EJ-S核心,图像显示控制器(GDC),车载通信功能,各种媒体接口的功能特点。该芯片可处理来自汽车导航器件或数字仪表板的数据和车载网络的信息,以提高驾驶环境的舒适性,同时实现高质量的图像和视频显示。   随着汽车、通信、信息电器、医疗、军事等行业的巨大的智能化需要,嵌入式软件及系统发展迅速。微处理器从8位到16位、32位甚至64位,从支持单一品种的CPU芯片到支持多品种的,从单一内核到除了内核外还提供其它功能模块。而且随着硬件技术的不断革新,硬件平台的处理能力不断增强,成本不断下降,嵌入式软件已成为产品的数字化改造、智能化增值的关
[嵌入式]
ARM学习笔记4——加载存储指令
一、字数据传送指令 作用:用于把单一的数据传入或者传出一个寄存器。   1、LDR指令     1.1、作用       根据 addr_mode 所确定的地址模式从内存中将一个32位的字段读取到目标寄存器 Rd ,如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。     1.2、语法格式       LDR{ condition } Rd , addr_mode     1.3、参数说明        Rd 确定使用哪个通用寄存器作为目标寄存器        addr_mode 确定了指令编码中的I、P、U、W、Rn和 addr_mode 位   2、STR指令     2.1、作用       将
[单片机]
<font color='red'>ARM</font>学习笔记4——加载存储指令
Azure ARM (11) ARM模式下,创建虚拟机并配置负载均衡器
  在前几章中,我们做了准备工作:   1.创建ARM Resouce Group,叫LeiResourceGroup   2.创建ARM Storage Account,叫leistorageaccount   3.创建ARM Virtual Network,叫LeiARMVNet   在本章中,笔者将介绍如何在ARM模式下,创建虚拟机VM。主要分为以下几步:   1.创建第一台ARM VM LeiARMWeb01,Azure会自动创建一个网卡NIC。我们可以制定这个ARM VM是否有固定PIP地址,记住要设置Availability Set   2.快速创建第2台ARM VM LeiARMWeb02,记住要设置Avai
[单片机]
Azure <font color='red'>ARM</font> (11) <font color='red'>ARM</font>模式下,创建虚拟机并配置负载均衡器
ARM架构与体系学习(三)——ARM处理器状态
ARM7有两套指令系统,分别为ARM指令集和Thumb指令集。 ARM指令集为32位长,具有最完整的功能;Thumb指令集为16位长度,能实现ARM指令集的大部分功能。 Thumb指令集具有极高的代码密度(平均缩减30%的代码量)。 ARM处理器有两个处理器状态与这2套指令集分别对应。 以 当前程序状态寄存器CPSR 中的控制位T反映处理器正在操作的状态,即哪种指令集正在执行。T=0时,处理器处于ARM状态,执行ARM指令。T=1时,处理器处于Thumb状态,执行Thumb指令。其中处理器在系统上电时默认为ARM状态。 无论处理器处于何种状态,ARM指令集与Thumb指令集不同同时混合使用。 BX指令可以实现将ARM内核的
[单片机]
ARM宣布LG成为Cortex A50首席合作伙伴
新浪科技讯 北京时间5月28日晚间消息,芯片设计公司ARM本周宣布,LG将成为Cortex A50系列芯片的首席合作伙伴。   ARM Cortex A50系列芯片可能是该公司到目前为止最重要的设计,采用了支持64位技术的ARMv8架构。A50系列芯片将包括Cortex A57和下一代的Mali GPU(图形处理单元)。   ARM表示,该公司与LG之间的协议意味着LG将可以提供一系列片上系统(SoC)芯片,同时也可以更好地利用ARM下一代Mali GPU的GPU运算功能。   LG高级副总裁Bo-ik Sohn表示:“随着解决方案从32位向64位的转移,CPU和GPU之间的紧密互动正越来越重要。Full Profile G
[手机便携]
第七篇:gcc和arm-linux-gcc常用选项
一、gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细过程 -o Place the output into 指定输出文件名为file,这个名称不能跟源文件名同名 -E Preprocess only; do not compile, assemble or link 只预处理,不会编译、汇编、链接 -S Compile only; do not assemble or link 只编译,不会汇编、链接 -c Compile and assemble, but do not link 编译和汇编,不会链接 举例 //举例一: gcc hell.c
[单片机]
第七篇:gcc和<font color='red'>arm</font>-<font color='red'>linux</font>-gcc常用选项
Linux系统下的Bootloader详解
对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。在这里我们就为大家详细介绍Bootloader,Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。 对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系
[单片机]
具有X86到ARM二进制翻译和执行功能的SoC系统设计
  二进制翻译是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另外一种处理器上执行。它使得不同处理器之间的二进制程序可以很容易的相互移植,扩大了硬件/软件的适用范围,有助于打破处理器和支持软件之间的相互扼制的局面。二进制翻译技术的优点为:不需要重编译源码就可以实现软件从旧平台到新平台的移植;快速为新机器提供软件,包括移植操作系统和编译器;充分利用新机器的特性优化代码;减少培训费用,因为使用的是相同的软件,所以不必在新平台上重新培训员工;降低了多平台软件的费用。    1 SOC架构设计   1.1 处理器的确定   通用处理器与硬件逻辑是SoC设计的主流架构。在一些需要大量数据处理的应用中,这
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved