在ARM+LINUX上使用pppd拔号上网(GPRS)流程
转载地址:http://www.eeworld.com.cn/mcu/article_2016062027121.html
我的编程环境是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拔号上网(GPRS)流程相关推荐
- boa linux arm修改网卡,Boa服务器在ARM+Linux上的移植
Boa服务器在ARM+Linux上的移植 一.Boa服务器介绍 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右. 作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会 ...
- 配置管理小报110221:在linux上用真实帐号发mail的方法
为什么80%的码农都做不了架构师?>>> Ø 作者:王**(zbwangjian@***.cn) 在linux上用真实帐号发mail的方法 ...
- 多种模块拔号上网驱动开发调试
拔号上网 前后调试了几种上网卡模块,现在把几种模块调试记录下来,并做一下备份. 操作系统:Linux (none) 2.6.30 #112 Thu Sep 7 16:01:33 CST 2017 ar ...
- 开机自动拔号上网(无路由器)
一般我们用ADSL上网是每次开机都要重新拔号才可以上网,为了更便揵,我给大家分享下如何开机自动拔号上网: 方法一:开机自动启动批处理文件 文件内容: @echo off RASDIAL 宽带连接名称 ...
- Linux上搭建SpringBoot项目部署环境和流程分享
Linux上搭建SpringBoot项目部署环境和流程分享 背景介绍 环境搭建 1.JDK 2.Mysql 数据库 3.Redis 4.Nginx 项目部署 总结 背景介绍 最近在开发一个 Sprin ...
- Linux下使用PPTP ×××拔号的实现
环境:SuSE Linux 1. PPTP ××× 客户端软件 我使用的PPTP客户端软件的名称就叫作"PPTP Client". 软件的主页是 http://pptpclient ...
- 4G模块SIMCOM7100 LTE在ARM Linux下使用PPPD上网
尝试了网上其他人的方法,没有成功,最终自己看文档搞定了,希望写下来方便其他人,节省时间. 材料 4G硬件: SIM7100-PCIE-EVB_V1.01 HostPC: Linux hexiongju ...
- linux usb网卡驱动 ko,qf9700 USB网卡在x86 linux和arm linux上的驱动安装以及配置
最近要在一块老板子上面移植openwrt,需要扩展网口,于是选择了qf9700这款USB网卡,附赠的光盘里面有提供在linux下面安装的驱动源代码,所以我们要自己编译驱动源代码生成内核加载模块,加载模 ...
- linux dns及时添加,在ARM Linux上成功实现添加DNS库
工作需要要在嵌入Linux上实现DNS, 从Delphi的Indy9中移植了一个DNS,用了半年了还可以. 今日偶然看到了网上有源码(竟然原来没有搜到ftp://ftp.isc.org/isc/bin ...
- ros在arm linux上移植,ROS在Zedboard上的移植
ROS全称robot operaring system,一般ROS是应用在Ubuntu系统中,本次移植是将ROS移植到Zedboard上的Linaro系统中去. 移植环境 开发板 : Zedboard ...
最新文章
- ajax和promise的结合使用
- EL表达式的内置对象(待梳理)
- vue项目实现按需加载的3种方式
- yum第三方安装-软件包没签名及更新错误
- 云原生时代,底层性能如何调优?
- Linux学习总结(35)——CentOS 7.X设置服务开机启动
- 学硕论文选题计算机,计算机硕士论文题目分享
- 一篇文章快速搞懂C++生成随机数
- HDU 1133 Buy the Ticket
- Java基础篇:构造函数
- python去重排序_python文本去重并排序
- NGINX 结合 lua 动态修改upstream
- 很值得看看的中文翻译The Django Book
- java中根据秒生成cron表达式_在线Cron表达式生成器
- Ribbon详解与实例
- 百度商桥修改服务器,百度商桥在线客服设置的操作步骤
- 易福门电感式接近开关IGS200
- 猿创征文|【实用工具tcping】ping tcping的区别,使用命令,超全超详细使用手册(建议收藏)
- golang构建htpp服务
- 泛函分析笔记3:内积空间
热门文章
- 数学建模(2)topsis分析法
- 基于Java的仓库管理系统
- 怎样做中国的自由译者
- java mencoder_java 用ffmpeg和mencoder进行视频转码
- Mcafee(麦咖啡) 无法升级的解决办法 附:进程详解,设置指南
- 2018年传智博客黑马程序员python人工智能培训就业班视频下载
- cad标注桩号lisp_cad桩号标注插件下载
- vb adodb mysql_PHP_ADODB类使用,MySQL的例子PHP中最通用的数据 - phpStudy
- 前端用户体验提升系列(一)最常见的用户体验指标和提升方式
- Android基础入门教程——4.4.2 ContentProvider再探——Ducument Provider