基于Linux利用PPP实现4G模块联网

1.编译ppp2.4.5

1.1.ppp程序包下载

下载路径:https://download.samba.org/pub/ppp/

1.2.解压ppp程序包

	tar -xzvf ppp-2.4.5.tar.gz

1.3进入并生成Makefile

	cd ./ppp-2.4.5
	./configure

1.4.指定交差编译工具make

	make CC=arm-linux-gcc

2.配置Linux内核(开发板使用的内核)

Device Drivers  --->
[*] Network device support  --->
<*>   PPP (point-to-point protocol) support
<*>     PPP BSD-Compress compression
<*>     PPP Deflate compression 
[*]     PPP filtering
<*>     PPP MPPE compression (encryption) 
[*]     PPP multilink support
<*>     PPP over Ethernet
<*>     PPP on L2TP Access Concentrator 
<*>     PPP on PPTP Network Server 
<*>     PPP support for async serial ports   
<*>     PPP support for sync tty ports

在这里插入图片描述
说明:本人使用了串口直接虚拟成网卡,没有通过usb转串口,需要用usb的可以自行打开即可。

3.PPP安装

编译ppp2.4.5过程将目录下pppd chat pppdump pppstats下可执行程序pppd, chat, pppdump, pppstats拷贝到开发板/usr/sbin目录下

chat:调制解调器的自动对话脚本,Chat程序定义了一个计算机和调制解调器之间对话交流,其主要目的是用来在本地PPPD和远端PPPD程序之间建立连接(简单说就是与4G模块进行AT命令交互的流程表,最终实现与ISP运营商的连接)。
pppd:点对点协议守护进程,其功能为实现ppp策略性的内容,包括所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。
pppdump:将使用pppd记录选项编写的文件转换为人类可读的格式。
pppstats:显示PPP连线状态。pppstats(point to point protocol status)。

4.脚本配置

在我们的开发平台(开发板)上建立两个文件夹。

	mkdir /etc/ppp
	mkdir /etc/ppp/peers

然后建立五个文件,如下:

(1)mkdir /etc/ppp/peers/4g-ppp

# /etc/ppp/peers/4g-ppp
# Usage:root>pppd call 4g-ppp

/dev/ttyS2 115200		# ttyname 串口端口,若非以”/“开头,则会自动补充”/dev/“  波特率:115200
crtscts					# 硬件流控(注意,如果没有流控就不要开,否则会导致chat总是没有回应)
user "test" password "123456"	
hide-password
noauth					# 无需身份验证
debug					# 调试模式 pppd将以可读形式记录发送或接收的所有控制数据包的内容
defaultroute			# 添加ISP网关至路由表,作为默认路由
noipdefault				# 启用本地ip,由ISP提供
novj					# 启用Van  Jacobson格式的tcp/ip报头
novjccomp			
noccp
ipcp-accept-local
ipcp-accept-remote
local
lock
modem
dump
nodetach				# 前台运行
remotename 3gppp
ipparam 3gppp

# 使能一下两个选项可以实现ppp掉线自动重播
lcp-echo-failure 6		# lcp连接失败尝试次数
lcp-echo-interval 10	# lcp echo发送间隔

persist					# 连接终止后不要退出,而是重新尝试连接,连接次数收到maxfail限制
ipcp-max-failure 30

# 向ISP请求2个dns服务器地址。这两个地址将以DNS1DNS2两个环境变量传送到/etc/ppp/ip-up脚本中,
# 并且将环境变USEPEERDNS量置为1
usepeerdns

# 断开连接
disconnect 'chat -s -v -f /etc/ppp/peers/4g-chat-disconnect'
# 启动ppp协议前,进行硬件拨号
connect 'chat -s -v -f /etc/ppp/peers/4g-chat-connect'

(2) mkdir /etc/ppp/peers/4g-chat-connect

# /etc/ppp/peers/4g-chat-connect
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
TIMEOUT 30
"" AT
OK ATE0
OK ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2
# Insert the APN provided by your network operator, default apn is 3gnet
OK AT+CGDCONT=1,"IP","3gnet",,0,0
OK ATD*99#
CONNECT

(3) mkdir /etc/ppp/peers/4g-chat-disconnect

# /etc/ppp/peers/quectel-chat-disconnect
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\nSending break to the modem\n"
""  +++
""  +++
""  +++
SAY "\nGoodbay\n"

(4) mkdir /etc/ppp/ip-up

说明1:由于rootfs文件系统是只读文件系统,所以这里使用自己建立的ip-up脚本,如果是可读可写的文件系统可直接拷贝ppp-2.4.5/scripts/下的ip-down.local.add、ip-up.local.add,然后把名字改一下,改成ip-up、ip-down。
说明2:这个脚本的作用是为了将4G模块获取到的DNS1和DNS1拷贝到/etc/resolv.conf里面而存在的。也就是说可以根据自己的情况去写这个脚本,只要能将DNS1和DNS1放到/etc/resolv.conf里面即可。

本人使用这种方式,但存在一个问题,就是网线接入的时候,过一会再将网线拔掉,DNS还是使用了网线的。所以这里需要各位自行处理,本人通过其他方式解决此问题。需要的可留言,因为是用在项目中的,所以相对比较复杂。

本人修改的脚本如下:

#!/bin/bash
#ip-up

if [ -f /etc/ppp/resolv.conf ]; then
	cp /etc/ppp/resolv.conf /etc/resolv.conf
elif [ -f /var/run/ppp/resolv.conf ]; then
	cp /var/run/ppp/resolv.conf /etc/resolv.conf
else

	echo nameserver $DNS1 > /etc/resolv.conf
	echo nameserver $DNS2 >> /etc/resolv.conf
	
	echo nameserver $DNS1 > /tmp/tmp_resolv.conf
	echo nameserver $DNS2 >> /tmp/tmp_resolv.conf
	
fi

原始脚本如下:

#!/bin/bash
#ip-up

dns_file="/etc/resolv.conf"

rm "$dns_file"
ln /etc/ppp/resolv.conf "$dns_file"

(5) mkdir /etc/ppp/ip-ip-down

#!/bin/bash
#ip-down
#set -vx
dns_file="/etc/resolv.conf"

rm $dns_file

cat > "$dns_file" <<EOF
# auto create by ip-down
nameserver 114.114.114.114
nameserver 8.8.8.8
EOF

chmod 755 "$dns_file"
/etc/init.d/networking restart
echo "Set dns for eth0" 

5. 进行拨号连接

执行以下命令即可:

	pppd call 4g-ppp &

也可以自己写个4g_up.sh脚本运行:

#!/bin/bash

pppd call 4g-ppp &

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值