linux ppp上网的文章
发布日期:2021-06-29 02:35:15 浏览次数:2 分类:技术文章

本文共 5108 字,大约阅读时间需要 17 分钟。

作者:admin 来源:未知

本文将说明如何在Linux下用CDMA modem完成拨号上网的工作。首先,读者需要对PPP协议有初步的了解,比如,读者至少应该知道LCPNCP是什么,以及PAPCHAP是做什么的;其次,读者可能需要安装pppdchat两个工具,通常系统中默认都是安装了这两个程序的。如果没有安装pppd,可以到下载最新版本。本文中作者所用的pppd版本为2.4.1chat版本为1.22

本文所使用的是联通掌中宽带包月2G流量CDMA上网卡。连接所需的拨号号码为#777,用户名为card,口令也为card。联通的服务器名为pdsn

Linux下,所有与ppp相关的配置文件都在/etc/ppp/目录下。其中/etc/ppp/pap-secrets文件保存的是PAP认证协议所需的用户名和口令,而/etc/ppp/chap-secrets文件保存着CHAP认证协议所需的用户名和口令。根据上面的说明,这两个文件的内容分别如下所示:

文件/etc/ppp/pap-secrets的内容(最后一行是作者手动添加的):
# /etc/ppp/pap-secrets
# Secrets for authentication using PAP
# client
server
secret
IP addresses

####### redhat-config-network will overwrite this part!!! (begin) ##########
####### redhat-config-network will overwrite this part!!! (end) ############
card
pdsn
card


文件/etc/ppp/chap-secrets的内容(最后一行是作者手动添加的):
# /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client
server
secret
IP addresses

####### redhat-config-network will overwrite this part!!! (begin) ##########
####### redhat-config-network will overwrite this part!!! (end) ############
card
pdsn
card


当服务器要求pppd给出用户身份认证信息的时候,如果协商采用PAP认证方式,pppd将到/etc/ppp/pap-secrets文件中取得用户口令;如果协商采用CHAP认证方式,则pppd将到/etc/ppp/chap-secrets文件中取得用户口令。

/etc/ppp/peers/目录下,是每个pppd连接所需的选项文件,每个文件对应一个连接,互不干涉。本文中,在/etc/ppp/peers/目录下创建了一个unicom文件,其内容如下:
# /etc/ppp/peers/unicom
# this is ppp script for use chinaunicom's CDMA data service
#
ttyS0
115200
crtscts
connect '/usr/sbin/chat -v -f /etc/ppp/chat/unicom'
debug
nodetach
ipcp-accept-local
ipcp-accept-remote
defaultroute
user card

解释一下这里的pppd选项:
l
ttyS0
表示CDMA modem连接到串口/dev/ttyS0上;

l
115200
表示串口波特率;

l
crtscts
表示采用modemrtscts信号线用于流控;

l
connect '/usr/sbin/chat -v -f /etc/ppp/chat/unicom'
表示用chat程序完成连接建立的会话过程,会话过程通过/etc/ppp/chat/unicom文件控制

l
debug
表示令pppd工作在调试模式

l
nodetach
表示不要让pppd启动之后转为后台进程

l
ipcp-accept-local
表示接受服务器分配的本机IP地址

l
ipcp-accept-remote
表示接受服务器指定的服务器IP地址

l
defaultroute
表示把服务器指定的服务器IP地址作为默认路由

l
user card
表示认证时的用户为cardpppd据此从/etc/ppp/pap-secrets或者/etc/ppp/chap-secrets文件中取得card用户对应的口令


以上就是对/etc/ppp/peers/unicom的说明。另外,最后还需要的一个文件是/etc/ppp/chat/unicom,这个文件用于告诉chat程序如何完成连接建立过程。该文件内容如下:
# /etc/ppp/chat/unicom
# this is the chat script for unicom
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
TIMEOUT 120
"" at
OK atdt#777
CONNECT

几个ABORT行的意思是如果modem返回诸如BUSY之类的信息,则取消chat过程,连接失败;TIMEOUT 120表示连接的超时值为120秒。首先发出一个at命令,期待modem返回一个OK,然后拨号#777,期待modem返回CONNECT,如果modem返回了CONNECT,则表明连接建立成功。

以上就是拨号所需要的四个文件的情况。通过下列命令拨号:
# pppd call unicom

如果拨号成功,将生成一个新的网络接口ppp0。服务器将自动为ppp0分配一个IP地址。然后,就可以通过这个连接上网了。

后记:作者试图通过Multilink PPP获得更大的带宽,但是似乎联通并不支持这一功能。

参考文档
[1] man pppd(8)
[2] man chat(8)

原文地址

另一个参考设计

3 软件设计

3.1 Linux内核编译

嵌入式系统资源有限,因此不可能在嵌入式系统之上进行程序的编译,需要在PC机上将程序编译成嵌入式系统识别的二进制代码,然后再移植到其上。交叉编译环境就是用来在PC机上编译嵌入式系统可识别代码的工具。这里用到的交叉编译环境是ARM-Linux。把对PPP的支持编译进Linux内核的方法为:在kernel目录,终端下输入make menuconfig,选择Network device support,[*]选择所有关于PPP的选项,然后保存退出编译即可。

3.2 PPP移植[1]

PPP(Point- to-Point Protocol)点到点,是为在点对点连接上传输多协议数据包提供了一个标准方法。本文用到的CDMA无线连网方法,就需要PPP协议的支持,这里用的版本是PPP-2.4.1和rp-PPPoE-3.7。其编译方法就是在建立的交叉编译环境下编译,生成pppd和chat等可执行文件,并写入文件系统 ramdisk的/bin目录中。编写三个拨号脚本文件放在文件系统/ppp目录下。

第一个脚本文件为chap-secrets:

“card” * “card”

其中card分别为用户名和密码,*表示对服务器没有限制。

第二个脚本文件为cdma1:

ttyS0 #CDMA Modem连接到串口1上

19200 #CDMA波特率

nocrtscts #不采用modem的rts和cts信号线流控

connect ‘/bin/chat –v –f /etc/ppp/chat/cdma2’ #用chat程序完成连接建立的会话过程,会话要通过/etc/ppp/chat/cdma2文件控制

debuf #表示pppd工作在调试模式

nodetach #表示不让pppd转入后台工作

ipcp-accept-local #表示接受服务器分配的本机IP地址

ipcp-accept-remote #表示接受服务器指定的服务器IP地址

defaultroute #表示把服务器指定的IP地址设定为默认的路由

user card #表示认证时用户名card,pppd根据该用户名,从chat-secrets文件中取得密码

第三个脚本文件为cdma2:

ABORT “NO CARRIER”

ABORT “NO DIALTONE”

ABORT “ERROR”

ABORT “NO ANSWER”

ABORT “BUSY”

TIMEOUT 120

“”at

OK atdt#777

connect

以上几行代码的意思是如果modem拨号过程中出现了例如NO CARRIER之类的返回信息,则取消chat过程,连接失败,TIMEOUT 120则表示为连接超时,atdt#777表示拨号至#777。

设置好后,在开发板环境下输入pppd,如果出现乱码,则说明ppp移植正确。键入拨号命令pppd call cdma1,生成一个新的网络接口ppp0,服务器自动分配一个IP地址。此时PPP的移植及设置结束,也就是说现在已经创造好了一个可以上网的嵌入式系统。

3.3 Email发送程序设计[2]

图片采集终端采集的图片要发送到Email中,需要以附件的形式发送。邮件发送过程中,需要对邮件地址、用户密码和附件内容进行加密处理,这里采用了 Base64加密法。Base64算法就是以3个字节为单位,当剩下的字符数量不足3个字节时,则应使用0进行填充,依次取6位数据并在前面补上两个0形成新的8位编码,由于3*8=4*6,这样3个字节的输入会变成4个字节的输出,长度上增加了1/3。相应地,输出字符则使用‘=’占位,因此编码后输出的文本末尾可能会出现1至2个‘=’。

邮件发送程序经过了以下几个过程[3]:

(1)socket(int domain,int type,int protocol);

该函数建立新的socket,以建立一个新的通信端口并获得文件描述符。函数中的参数domain确定一个协议族,这里定义为AF_INET,type指定套接字类型,该处使用SOCK_STREAM,protocol一般为0,使用默认协议。

(2)connect(int sockfd,struct sockaddr *address,size_t address_len);

当调用socket建立传输端口后,调用connect函数建立与远程服务器相连的连接线路。

(3) recv(int sockfd,void *buf,int len,unsigned int flags);

该函数用于接收从套接口传来的信息,socket用connect连接的套接口,buf是指向内存块的指针,用于存储接受的消息,len指明内存块的大小,flags是一个操作标志。

(4)Base64_Code();//对登陆信息或附件内容进行加密

(5)send(int sockfd,const void *msg,int len,unsigned int flags);

该函数是用来通过套接口向其它程序传递数据的。sockfd是用来传输数据的socked描述符,msg是一个指向要发送数据的指针,len是以字节为单位的数据的长度,flags一般情况下设置为0。

其中对附件文件的发送需要预先设定每次读取的字节数和每次发送的字节数,将附件分批读取编码发送。程序执行过程如图3:



图3 数据传输流程



4 总结

实验证明用CDMA无线网络发送数据,速度比较稳定,有时会由于网络原因发送失败,但是成功率较高,收到的图片数据丢帧现象不明显。该方法可用于工业现场的监视以及家庭监控系统以及远程的数据采集。由于图片是发送到Email中的,因此运行成本较低,有较大的推广空间。

本文创新点:目前基于GPRS的无线数据传输方法研究的较多,而CDMA网络的高性能特性,逐渐引起了研究者的注意,本文就结合CDMA网络设计了一套与嵌入式相结合的系统,,将采集的现场图片,以附件的形式发送到Email中。

转载地址:https://blog.csdn.net/yyyyyyyyyywwwwwwwwww/article/details/51086947 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:javascript特性杂谈
下一篇:CDMA2000 3G Chat 拨号

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月30日 02时38分54秒