树莓派搭载EC200U 4G模块(USB网卡上网和PPP拨号上网)

article/2025/9/19 21:16:57

文章目录

  • 一、EC200U模块4G模块介绍
  • 二、USB转串口驱动设置
    • (1)打开树莓派的串口
    • (2)lsusb是否有EC200U模块
    • (3)添加 VID 和 PID 信息
  • 三、USB网卡驱动上网
  • 四、PPP协议
    • (1)PPP协议介绍
      • 1.1什么是PPP协议
      • 1.2PPP建立通信
      • 1.3 PPP协议栈
    • (2)Linux中PPP的实现
  • 五、自动开启USB驱动和PPP拨号上网
    • (1)硬件准备
    • (2)软件准备
    • (3)自启动脚本

一、EC200U模块4G模块介绍

EC200U是移远推出的4G模块,技术参数如下:
在这里插入图片描述

二、USB转串口驱动设置

(1)打开树莓派的串口

树莓派开启串口通信,需要在主菜单中找到首选项,并打开Raspberry Pi Configuration,然后在新窗口单击Interfaces,最后找到Serial Port选项,勾选Enable,启用串口。

(2)lsusb是否有EC200U模块

在这里插入图片描述

(3)添加 VID 和 PID 信息

因为树莓派是自带option驱动的,只需要向sys/bus/usb-serial/drivers/option1/new_id这个文件添加 VID 和 PID 信息即可。

sudo modprobe option
sudo sh -c 'echo "2c7c 0901" > /sys/bus/usb-serial/drivers/option1/new_id'

当模块成功加载 USB 转串口 option 驱动后,Linux 会在/dev 目录下创建多个名称如 ttyUSB0、ttyUSB1、ttyUSB2 等的串口设备文件(Linux 系统下串口设备文件名称非固定,由系统自动分配可用的名称)。

查看设备,ttyUSB0~ttyUSB6为新增设备,如果没有的话多重启几次树莓派看看,我的偶尔设置了也没有,很奇怪。
在这里插入图片描述

不过很在每次关机重启之后都得重新执行步骤(3),进行USB转串口驱动设置,所以最好写个shell脚本,让树莓派开机之后自动执行这个脚本,进行进行USB转串口驱动设置,这样就免得每次开机手动设置了。这个我脚本后面讲PPP拨号上网我再写。

三、USB网卡驱动上网

当模块成功加载 USB 转串口 option 驱动后,Linux 会在/dev 目录下创建多个名称如 ttyUSB0、ttyUSB1、ttyUSB2 等串口设备文件(Linux 系统下串口设备文件名称非固定,由系统自动分配可用的名称)。可使用串口工具,如 minicom 或 busybox microcom,来测试 AT 功能。

模块支持 MBIM/RNDIS/ECM 三种网卡功能,Linux 系统默认支持这些 USB 网卡功能,系统内置驱动模块,不需要对 Linux 系统的驱动文件做任何修改,驱动源码由 GNU Linux 组织维护。模块连接到 Linux Host,并成功加载 USB 对应的网卡驱动后,将会在 Host 生成一个网卡。部分驱动还会生成一个 cdc-wdm 字符设备用于命令交互。模块的网卡模式可由 AT 命令配置,如下表所示:
在这里插入图片描述

进入AT端口

busybox microcom -t 50000  -s 115200 /dev/ttyUSB0

使用 AT Port ,发送 AT 指令将模块配置为 ECM 状态:AT+QCFG=“usbnet”,1 执
行完后,模块重启,然后查询设置是否生效:AT+QCFG=“usbnet” 返回是 1 即可。

发送 AT 指令拨号上网即可实现 ECM 上网:
AT+qnetdevctl=1,1,1----拨号;
AT+qnetdevctl=0,1,1----断开拨号;

ifconfig查看网络
在这里插入图片描述

使用4G模块网络ping百度,说明ok
在这里插入图片描述

四、PPP协议

(1)PPP协议介绍

1.1什么是PPP协议

PPP协议(Point-to-Point Protocol),是网络协议中最为基础的的协议,工作域数据链路层,其提供了全双工操作,按照顺序传递数据包。PPP为基于各种主机、网桥和路由器的简单链接提供了一种共通的解决办法。
PPP协议包括三个部分:
1、数据帧封装方法
2、链路控制协议LCP:用于对封装格式选项的自动协商,建立和终止连接。堂测链路的错误和配置错误。
3、网络控制协议NCP:PPP协议规定每一种网络层协议都有相应的网络控制协议,并用他们来管理哥哥协议的不同需求。

1.2PPP建立通信

先进行LCP协商,协商过后开始进入验证阶段(包括PAP或CHAP认证),PAP为两次握手,口令为明文;CHAP为三次握手认证,口令为密文。认证成功进入网络阶段协商,协商成功贼链路建立成功,可以开始传输网络层数据报文。
在这里插入图片描述

1.3 PPP协议栈

主要负责PPP层数据的封装、压缩与解压缩。还对普通数据包和PPP过程数据包进行分流,将普通数据包提交到更上层的TCP/IP协议栈,而将PPP过程的数据报放到/dev/ppp设备队列中,等待PPPD收取和处理。
在这里插入图片描述

(2)Linux中PPP的实现

PPP协议工作再数据链路层,丧友IP协议等网络层,下有以太网、串口等物理层,发送数据的时候,TCP/IP数据包经过PPP打包之后经过串口发送,接收时,从串口上来的数据经过PPP捷豹后上报TCP/IP协议层,Linux中的PPP架构图如下:
在这里插入图片描述
PPPD是用户空间的后台服务进程(daemon),PPPD实现了所有鉴权、压缩/解压缩和加密/解密等扩展功能的控制协议。PPPD只是一个普通的用户进程,PPPD和内核中的PPP协议处理模块之间通过设备文件(/dev/ppp)进行通信。PPPD有一个辅助工具chat,用来与GSM模组建立会话。它向串口发送AT命令,建立与GSM模组的会话,以便让PPP协议可以以再串口上传输数据包。

设备文件/dev/ppp。通过read系统调用,pppd可以读取PPP协议处理模块的数据包,当然,PPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrl系统调用,pppd可以设置PPP协议的参数,可以建立/关闭连接。

五、自动开启USB驱动和PPP拨号上网

PPP 拨号相对于 USB 网卡上网方式,有如下缺点:
⚫ 使用方式更复杂
⚫ 相同网速下会消耗更高的 CPU
⚫ 数据传输达不到理论速率
因此,不推荐使用 PPP 拨号。不过我两种方式都尝试了一下,发现PPP拨号上网可以写个shell脚本开机自启动,而不像USB网卡驱动上网那样要进入AT环境发送AT指令才能开启网络。

(1)硬件准备

树莓派3B/4B
移远EC200U模块
模块天线
4G模块开发板 (MINIPCIE转USB)
SIM卡(本人用移动卡)

在这里插入图片描述

(2)软件准备

因为树莓派上已经支持了4G模块的驱动,插上之后能自动检测出来,需要准备的只有应用层的pppd程序,两种方式,网上下载源码到树莓派上编译安装,另一种 sudo apt-get install ppp都可,在安装好ppp相关驱动后,就可以开始写我们的拨号脚本了。

编写初始化脚本

sudo  nano /etc/ppp/peers/rasppp
# /etc/ppp/peers/rasppp# Usage: sudo pppd call rasppp# 连接调试时隐藏密码
hide-password# 该手机不需要身份验证4
noauth# 用于呼叫控制脚本
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-connect'# 断开连接脚本
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-disconnect'# 调试信息
debug# 4G模块
/dev/ttyUSB0# 串口波特率
115200# 使用默认路由
defaultroute# 不指定默认IP
noipdefault# 不使用PPP压缩
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local# 最好锁定串行总线
lock
dump# 保持pppd连接到终端
nodetach# 用户名 密码
# user
# password
#移动,联通拨号不需要用户名密码,文末给出不同运营商的配置# 硬件控制流
crtscts
remotename 3gppp
ipparam 3gppp# 请求最多两个DNS服务器地址
usepeerdns
sudo  nano /etc/ppp/peers/rasppp-chat-connect
 连续15秒,收到以下字符,则退出执行
TIMEOUT 15
ABORT   "BUSY"
ABORT   "ERROR"
ABORT   "NO ANSWER"
ABORT   "NO CARRTER"
ABORT   "NO DIALTONE"# 40秒内没有收到指定字符,则退出
# 例如 OK \rATZ,发送ATZ,希望收到的是OK
""AT
OK \rATZ# 使用IPV4,建立连接,联通为3gnet,移动为cmnet,文末给出各运营商配置
OK \rAT+CGDCONT=1,"IP","cmnet"# 拨号,*99#是联通的拨号号码,*98*1#是移动
OK-AT-OK ATDT*98*1#
CONNECT \d\c
sudo  nano /etc/ppp/peers/rasppp-chat-disconnect
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k"
""+++ATH"
SAY "\nGood bye !\n"

写好这三个文件之后我们直接在/etc/ppp/目录下行命令sudo pppd call rasppp就可以开始拨号了。拨号成功后,会返回两个DNS域名,如果拨号失败,要注意不同运营商的拨号方式是不一样的,比如电信需要填写用户名和密码,而移动和联通则不需要,拨号号码也不相同联通是 *99# ,电信是 #777,981#是移动,这些都需要注意.

初始化好之后我们可以运行ifoconfig命令查看多了一个ppp0的网卡,而且有对应的IP地址。
在这里插入图片描述
再用ping命令测试一下,-I(大写i)指定使用某个网卡
在这里插入图片描述

(3)自启动脚本

按照(2)的流程的话,就可以实现PPP拨号上网了,但是关机重新开机又得重新设置一遍,不得不说很费劲,作为码农,我们就是要解决重复性的工作来提高我们的效率。所以写个shell脚本实现开机自启动就好。

begin.sh

#! /bin/bashsudo modprobe option
sudo sh -c 'echo "2c7c 0901" > /sys/bus/usb-serial/drivers/option1/new_id'echo "配置usb驱动成功"#运行步骤变量初始化
ec20_step=0#超时计数初始化
over_time=0#循环
while [ 1 ]
do
#第一步先检查驱动if [ $ec20_step -eq 0 ]; then#使用lsusb查看是否有EC200U驱动 grep查询结果是否包含Quectelresult=$(lsusb | grep Quectel)if [[ $result =~ "2c7c:0901" ]]; thenec20_step=1echo "第一步完成"elseec20_step=0fi#延时2ssleep 2#第二步 开始拨号elif [ $ec20_step -eq 1 ]; thencd  /etc/ppp/sudo pppd call raspppec20_step=2sleep 2echo "第二步完成"
#第三步 查询路由是否包含ppp0网卡,拨号成功则会包含有ppp0网卡elif [ $ec20_step -eq 2 ]; thenresult=$(route -n | grep ppp0)if [[ $result =~ "ppp0" ]]; then#若包含网卡,则添加默认路由#echo "raspberry" | sudo route add default dev ppp0ec20_step=3over_time=0echo "第三步完成"else#超时计数let over_time++fi#若一分钟都没有路由网卡则说明没有拨号成功if [ $over_time -eq 12 ]; thenover_time=0#超时拨号则跳入重启步骤ec20_step=4fisleep 5#第四步 通过ping命令检查网络状态elif [ $ec20_step -eq 3 ]; thenresult=$(ping -I ppp0 -c 1 baidu.com)if [[ $result =~ "1 received" ]]; thenover_time=0echo "第四步完成"exit 0else#let over_time++fiif [ $over_time -eq 6 ]; thenover_time=0ec20_step=4#echo "raspberry" | sudo pkill wvdialfisleep 5#第五步重启模块elif [ $ec20_step -eq 4 ]; thenecho -e "AT+CFUN=1,1\r\n" > /dev/ttyUSB0ec20_step=0#重启命令后延时稍微长一点sleep 15fidone
exit 0

顺便解释一下上面shell的一些语法和关键字使用:

shell文件必须以#! /bin/bash开头
echo “字符串” 输出字符串显示到终端
let命令用于指定算数运算,例如let over_time++  ,over_time这个变量自加
$variable,表示获取变量variable的值
gt是>号,ge是>=号,lt是<号,le是<=号,eq是=[ $variable =~ "string" ] 判断变量variable 里面是否有字符串"string"if判断语句格式:
if [ ] ; then
elif [ ]; then
fiexit 0表示正常退出shell脚本

加入开机启动项
打开/etc/rc.local文件

//在文件exit 0前加入上面脚本的路径,保存,开机重启即可自动生效

bash /home/pi/project/4G/begin.sh

查看是否有ppp0网卡,有则成功了
在这里插入图片描述

参考博客:
https://blog.csdn.net/weixin_45121946/article/details/107284629
https://www.freesion.com/article/87731013240/#PPP%E5%8D%8F%E8%AE%AE
https://blog.csdn.net/persist_with/article/details/119009288
https://blog.csdn.net/qq_30112663/article/details/124228764


http://chatgpt.dhexx.cn/article/7dELjtBy.shtml

相关文章

配置 4G 模块为WAN口上网

配置 4G 模块为WAN口上网 将Linux板卡配置为交换机或路由器&#xff0c;提供类似路由器的上网功能。这里以4G网卡作为WAN进行上网。 一、使用网桥上网 1. 配置4G模块为默认网关 先配置好4G模块为默认路由网关。 这里需要先将4G模块配置为路由模式。4G模块路由模式和网卡模…

safeAreaLayoutGuide

https://www.jianshu.com/p/9d68a220983b Safe Area Layout Guide对应的SafeArea特性使用(DeploymentTarget9.0及后) 解决方案&#xff1a; 1. DeploymentTarget 9.0及后 2. DeploymentTarget 8.0

Safety-0

写在前面 好记性不如烂笔头&#xff0c;很多知识久了不用会渐渐生疏&#xff0c;故此以文章的形式进行记录。但干干的知识点又不符合本人的风格&#xff0c;故此产生了Safety&#xff0c;一个主要用于记录学习Mybatis和SpringBoot的项目。 Safety 是基于Mybatis实现的加解密插…

NetworkSecurity

一、CSRF 参考链接 1.定义 &#xff08;Cross Site Request Forgery, 跨站域请求伪造&#xff09;是一种网络的攻击方式&#xff0c;它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#…

Web端安全测试--IBM Security AppScan Standard 工具使用手册

1、工具的使用原理 1.1工作原理 &#xff08;1&#xff09;通过探索了解整个web页面结果&#xff08;2&#xff09;通过分析&#xff0c;使用扫描规则库对修改的HTTP Request进行攻击尝试&#xff08;3&#xff09;分析 Response 来验证是否存在安全漏洞 1.2 AppScan的工作过…

【Safety】简介

XSS 涉及面试题&#xff1a;什么是 XSS 攻击&#xff1f;如何防范 XSS 攻击&#xff1f;什么是 CSP&#xff1f; XSS是什么 XSS 简单点来说&#xff0c;就是攻击者想尽一切办法将可执行的代码注入到网页中 XSS分类边界 XSS 可以分为多种类型&#xff0c;但是总体上认为分为两…

Electron Security Warning (Insecure Content-Security-Policy) 告警解决

Electron Security Warning (Insecure Content-Security-Policy) 告警解决 Electron的Console控制台出现如下告警时&#xff1a; 是安全策略的设置告警&#xff0c;意思是内容安全策略没有设置&#xff0c;或者使用了unsafe-eval的安全设置。如果想要不出现上述告警&#xff…

AppScan,web安全测试

操作手册 登录到站点 扫描过程中有提示登录的&#xff0c;就手动登录 待自动扫描结束后&#xff0c;再手动探索&#xff0c;在被测web页面上手动探索结束后点击确定记录你手动提交的请求&#xff0c;然后【继续仅测试】&#xff0c;等待测试结束 结果分析、生成报告 问题默认是…

SafetyNet使用机器学习策略的真实世界自动驾驶车辆的安全规划(一)

本文主要是SafetyNet的框架概述。 1. 前言 文中提到了传统的决策规划的方法&#xff0c;主要有基于规则的方法和基于学习的方法。该论文提出了一种新的方法&#xff08;文章自己说是新的&#xff0c;最主要的原因是该方法在洛杉矶进行了道路测试。&#xff09; 但是这里的Fal…

【译】Using the SafetyNet API (使用SafetyNet API)

该SafetyNet Attestation API是谷歌播放服务的API&#xff0c;任何开发人员都能以获得一定程度的保证&#xff0c;使用他们的应用程序正在运行的设备是“CTS兼容。” CTS代表兼容性测试套件&#xff0c;这是测试套件设备必须在发布前通过&#xff0c;才能包含Google Play服务。…

GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

1.Goole在今年6月份出的新政策&#xff0c;不在使用safetynet&#xff0c;而使用Play Integrity API。 2.项目本身没有使用过safetynet。 3.使用了firebase。查阅资料&#xff0c;解决方案如下&#xff1a; implementation platform(com.google.firebase:firebase-bom:30.2.…

SafetyNet 漏洞rootutils 利用

1、https://developers.google.com/android/guides/setup 添加SatetyNet 服务 2、https://developers.google.cn/android/reference/com/google/android/gms/safetynet/SafetyNet API 3、https://koz.io/inside-safetynet/ https://blog.csdn.net/gulinxieying/art…

必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法

必过SafetyNet&#xff01;以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_&#xff08;KylinDemons&#xff09; 版权声明 Copyright © 2021 KylinDemons. All rights reserved. 本文将在CSDN由作者KylinDemons、在酷安由梓沐啊_、在QQ空间…

初识SafetyNet简要梳理

目录 前序 2 什么是SafetyNet校验&#xff1f; 2 Safetynet工作原理 2 监控及校验内容 2 实现方式 3 参考文献&#xff1a; 4 前序 由于近年来Android支付应用的兴起&#xff0c;一些人在root过的手机上发现该类支付性质的应用无法使用。原来&#xf…

【Android安全】Google Hardware-backed Keystore | SafetyNet | 远程证明Remote Attestation

Google Hardware-backed KeyStore Attestation 原理及流程 SafetyNet Hardware-backed Attestation SafetyNet Hardware-backed Attestation&#xff1a;使用了Hardware-backed Keystore SafetyNet 支持Software Attestation 和 Hardware-backed Attestation&#xff0c;根据…

SafetyNet简要梳理

目录 前序 2 什么是SafetyNet校验&#xff1f; 2 Safetynet工作原理 2 监控及校验内容 2 实现方式 3 参考文献&#xff1a; 4 前序 由于近年来Android支付应用的兴起&#xff0c;一些人在root过的手机上发现该类支付性质的应用无法使用。原来&#xf…

什么是跨域?以及解决方案

现在的web项目&#xff0c;很多都是前后端分离&#xff0c;特别容易出现跨域问题 那么什么是跨域问题呢?本篇文章带你彻底从本质上弄明白什么是跨域问题以及如何解决 一、跨域有什么现象 首先我们看一下现象&#xff0c;如何出现的跨域问题。例&#xff1a; 前段&#xff1a…

跨域问题与解决方案

什么是跨域问题&#xff1f; 跨域问题的产生&#xff0c;源自浏览器的同源策略&#xff1a;SOP&#xff08;Same origin policy&#xff09;。 同源策略是由 Netscape 提出的一个著名的安全策略&#xff0c;它是浏览器最核心也是最基本的安全功能&#xff0c;所有支持 JavaSc…

跨域常见的解决方案

目录 一&#xff1a;什么是跨域 二&#xff1a;为什么会跨域 三&#xff1a;跨域的解决方案 1.代理服务器 1.1.生产环境 1.2.开发环境 2.JSONP 3.CORS 一&#xff1a;什么是跨域 跨域是指浏览器在向一个服务器发送请求时&#xff0c;该请求的地址与当前页面的地址不同…

React跨域解决方案

一、业务场景&#xff1a; 前后端数据交互时会存在跨域的情况&#xff0c;这个时候就比较难受。传统的解决方案有三种&#xff0c;分别是 Jsonp&#xff1a;但是只能处理get请求 后端CORS&#xff1a;配置注解CrossOrigin&#xff08;用的最多&#xff09; 反向代理 &#xff1…