Linux 4G 通信实验
目录
- 4G 网络连接简介
- 高新兴ME3630 4G 模块实验
- ME3630 4G 模块简介
- ME3630 4G 模块驱动修改
- ME3630 4G 模块ppp 联网测试
前面我们学习了如何在Linux 中使用有线网络或者WIFI,但是使用有线网络或者WIFI 有
很多限制,因为要布线,即使是WIFI 你也得先布线,然后在接个路由器。有很多场合是不方便
布线的,这个时候就是4G 大显身手的时候,产品可以直接通过4G 连接到网络,实现无人值
守。本章我们就来学一下如何在I.MX6U-ALPHA 开发板中使用4G 来实现联网功能。
4G 网络连接简介
提起4G 网络连接,大家可能会觉得是个很难的东西,其实对于嵌入式Linux 而言,4G 网
络连接恰恰相反,不难!大家可以看一下其他的嵌入式Linux 或者Android 开发板,4G 模块都
是MiniPCIE 接口的,包括很多4G 模块都是MiniPCIE 接口的。但是大家稍微深入研究一下就
会发现,这些4G 模块虽然用了MiniPCIE 接口,但是实际上的通信接口都是USB,所以4G 模
块的驱动就转换为了USB 驱动。而这些4G 模块厂商都提供了详细的文档讲解如何在Linux 下
使用4G 模块,以及如何修改Linux 内核加入4G 模块驱动。正点原子的I.MX6U-ALPHA 开发
板也有一个MiniPCIE 形式的4G 模块接口,虽然外形是MiniPCIE 的,但是内心却是USB 的。
I.MX6U-ALPHA 开发板的4G 模块原理图如图71.4.1 所示:
图71.4.1 中的U8 就是MiniPCIE 接口,MiniPCIE 接口连接到了GL850 这个HUB 芯片的
DP2 和DM2,也就是GL850 的USB2 接口上。U11 就是Nano SIM 接口,I.MX6U-ALPHA 开
发板使用Nano SIM 卡,这样大家就可以直接拿自己的手机卡进行测试。I.MX6U-ALPHA 开发
板的4G 接口位置如图71.1.2 所示:
在使用之前需要将4G 模块插入到图71.1.2 所示的MiniPCIE 接口上,然后上紧两边的螺
丝,Nano SIM 卡插入到图71.1.2 中的Nano SIM 座里面,注意Nano SIM 卡的方向!
Nano SIM 卡的金属触点朝下!
Nano SIM 卡的金属触点朝下!
Nano SIM 卡的金属触点朝下!
理论上所有的MiniPCIE 接口的4G 模块都可以连接到正点原子的I.MX6U-ALPHA 开发板
上,因为这些4G 模块都遵循同样的接口标准,但是大家在使用的时候还是要详细的看一下4G
模块的接口引脚描述。不同的4G 模块其驱动形式也不同,本章我们讲解两款4G 模块在I.MX6U-ALPHA 开发板上的使用,一个是上海移远公司的EC20,另外一个是高新兴物联的ME3630,
这两款4G 模块都有MiniPCIE 接口的,这两个4G 模块如图71.4.2 所示:
图71.4.2 中左侧的是高新兴物联的ME3630-W 4G 模块,右侧的是上海移远的EC20 4G 模
块。本章我们就分别来讲解一下如何在I.MX6U-ALPHA 开发板上使用EC20 和ME3630 这两个
4G 模块。
4G 模块工作是需要天线的,因此在选购4G 模块的时候一定要记得购买天线,否则无法进
行测试。一般MiniPCIE 接口的4G 模块留出来的天线接口为IPEX 座,因此购买天线的时候也
要选择IPEX 接口的,或者使用IPEX 转SMA 线来转接。推荐大家到正电原子官方店铺购买4G
模块和相应的天线。
高新兴ME3630 4G 模块实验
ME3630 4G 模块简介
ME3630 4G 模块是正点原子官方推荐的4G 通信模块,ME3630 4G 模块是深圳高新兴物联
出品的4G LTE 模块,前身是中兴物联,正点原子是高新兴物联官方代理商,因此在模块质量
以及售后服务这一块是有保证的。
ME3630 是一款LTE Cat.4 七模全网通4G 模块,在LTE 模式下可以提供50Mbps 上行速率
以及150Mbps 的下行速率,并支持回退到3G 或2G 网络。此模组支持分集接收、分集接收是
终端产品支持双天线以提高通信质量和通信可靠性的无线连接技术。ME3630 支持多种网络协
议,比如PAP、CHAP、PPP 等,拥有多种功能,比如GNSS、Remote wakeup、SMS、支持FoTA
空中升级等。ME3630 4G 模块广泛应用于智能抄表、安防信息采集、工业路由器、车载通信以
及监控等等M2M 领域。ME3630 4G 模组特性如下:
①、一路USB2.0 接口。
②、一路UART 接口。
③、SIM 卡接口支持1.8/3.0V。
④、内置TCP、UDP、FTP 和HTTP 等协议。
⑤、支持RAS/ECM/NDIS。
⑥、支持AT 指令。
ME3630 4G 模块有多种配置,比如纯数据版本、集成GNSS 版本、全网通版本等等,本节
教程我们主要使用到ME3630 的数据通信功能,因此推荐大家购买全网通数据版,如果想要定
位功能的话就购买全网通数据+GNSS 版本,至于其他的版本大家根据自己的实际需求选择即
可。在正式使用ME3630 4G 模块之前,请先将其插入到开发板的MiniPCIE 座上、上紧螺、插
入Nano SIM 卡、接上天线,如图71.2.1.1 所示:
一切准备就绪以后就可以开始驱动ME3630 4G 模块了。
ME3630 4G 模块驱动修改
1、添加USB 设备信息
我们需要先在Linux 内核中添加ME3630 的USB 设备信息,因为我们前面说了,ME3630 4G 模块用的USB 接口。打开Linux 源码的drivers/usb/serial/option.c 文件,找到option_ids 数
组,然后在里面添加ME3630 的PID 和VID,要添加的内容如下:
示例代码71.2.2.1 ME3630 PID 和VID 信息
1 { USB_DEVICE(0x19d2, 0x0117) }, /* ME3630*/
2 { USB_DEVICE(0x19d2, 0x0199) },
3 { USB_DEVICE(0x19d2, 0x1476) },
完成以后的option_ids 数组如图71.2.2.1 所示:
2、添加ECM 支持程序
ME3630 支持ECM 接口,可以通过ECM 接口轻松联网,如果要使用ECM 接口的话需要
修改drivers/usb/serial/option.c 文件里面的option_probe 函数。找到此函数,然后在里面输入如
下内容:
示例代码71.2.2.2 option_probe 函数需要添加的内容
1 /* EM3630 */
2 if (serial->dev->descriptor.idVendor == 0x19d2 &&
3 serial->dev->descriptor.idProduct == 0x1476 &&
4 serial->interface->cur_altsetting->desc. bInterfaceNumber == 3)
5 return -ENODEV;
6
7 if (serial->dev->descriptor.idVendor == 0x19d2 &&
8 serial->dev->descriptor.idProduct == 0x1476 &&
9 serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)
10 return -ENODEV;
11
12 if (serial->dev->descriptor.idVendor == 0x19d2 &&
13 serial->dev->descriptor.idProduct == 0x1509 &&
14 serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)
15 return -ENODEV;
16
17 if (serial->dev->descriptor.idVendor == 0x19d2 &&
18 serial->dev->descriptor.idProduct == 0x1509 &&
19 serial->interface->cur_altsetting->desc. bInterfaceNumber == 5)
20 return -ENODEV;
添加完成以后的option_probe 函数如图71.2.2.2 所示:
3、配置Linux 内核
我们需要配置Linux 内核,首先使能USBNET 功能,路径如下:
-> Device Drivers-> -*- Network device support-> USB Network Adapters-> -*- Multi-purpose USB Networking Framework
配置如图71.2.2.3 所示:
接下来我们还需要使能USB 串口GSM、CDMA 驱动,配置路径如下:
-> Device Drivers-> [*] USB support-> <*> USB Serial Converter support-> <*> USB driver for GSM and CDMA modems
配置如图71.2.2.4 所示
继续配置Linux 内核,使能USB 的CDC ACM 模式,配置路径如下:
-> Device Drivers-> [*] USB support-> <*> Support for Host-side USB-> <*> USB Modem (CDC ACM) support
配置如图71.2.2.5 所示:
关于Linux 内核的配置就到此为止,编译一下Linux 内核,然后使用新的zImage 启动开发
板。如果ME3630 已经插上的话,系统启动以后就会输出如图71.2.2.6 所示的信息:
从图71.2.2.6 可以看出,ME3630 虚拟出了3 个USB 设备,分别为ttyUSB0~ttyUSB2。对
于支持ECM 接口的4G 模块来讲,比如ZM5330/ZM8620/ME3620/ME3630。如果模块工作在
ECM 模式下,可以通过运行“ifconfig -a ”命令查看对应的网卡,网卡的名字可能为
usbX/ecmX/ethX 等,X 是具体的数字,如果存在的话就说明ECM 接口驱动加载成功。输入
“ifconfig -a”命令,会发现多了一个名为“usb0”的网卡,图71.2.2.7 所示:
ME3630 4G 模块ppp 联网测试
1、使能Linux 内核ppp 功能
ME3630 支持通过ppp 拨号上网,也是支持使用ECM 接口上网,我们先来学习一下如何通
过ppp 拨号上网。首先我们需要配置Linux 内核,打开Linux 内核的ppp 功能,配置路径如下:
-> 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 support for async serial ports-> <*> PPP support for sync tty ports
配置完成以后如图71.2.3.1 所示:
配置完成以后重新编译一下Linux 内核,得到新的zImage 镜像文件,然后使用新的zImage
镜像文件启动开发板。
2、移植pppd 软件
我们需要通过pppd 这个软件来实现ppp 拨号上网,这个软件需要我们移植。
在移植之前先删除掉/usr/sbin/chat 这个软件!
我们使用Busybox 制作根文件系统的时候会生成/usr/sbin/chat 这个软件,我们一会移植pppd
的时候也会编译出chat 软件。因此需要将根文件系统中原来的/usr/sbin/chat 软件删除掉,否则
的话我们移植的chat 软件工作将会出问题!
pppd 源码已经放到了开发板光盘中,路径为:1、例程源码->7、第三方库源码-> ppp-2.4.7.tar.gz,将ppp-2.4.7.tar.gz 拷贝到Ubuntu 下并解压,解压以后会生成一个名为ppp-2.4.7 的
文件夹。进入到ppp-2.4.7 目录中,然后编译pppd 源码,命令如下:
cd ppp-2.4.7/
./configure //配置
make CC=arm-linux-gnueabihf-gcc //编译
如果编译失败,提示bison 和flex 这两个“not found”的话就安装这两个库,命令如下:
sudo apt-get install bison
sudo apt-get install flex
编译完成以后就会在当前目录下生成chat/chat 、pppd/pppd 、pppdump/pppdump 和
pppstats/pppstats 这四个文件,将这个四个文件拷贝到开发板根文件系统中的/usr/bin 目录下,命令如下:
sudo cp chat/chat /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppd/pppd /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppdump/pppdump /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppstats/pppstats /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
完成以后输入“pppd -v”查看一下pppd 的版本号,如果pppd 版本号显示正常的话就说明
pppd 移植成功,如图71.2.3.2 所示:
3、ppp 上网测试
在使用pppd 进行拨号上网之前需要先创建4 个文件,这4 个文件必须放到同一个目录下。
在开发板根文件系统下创建/etc/gosuncn 目录,进入到刚刚创建的/etc/gosuncn 目录下,然后新
建一个名为“ppp-on”的shell 脚本文件,在ppp-on 文件里面输入如下所示内容:
示例代码71.2.3.1 ppp-on 文件内容
1 #!/bin/sh
2 clear
3 OPTION_FILE="gosuncn_options"
4 DIALER_SCRIPT=$(pwd)/gosuncn_ppp_dialer
5 exec pppd file $OPTION_FILE connect "chat -v -f ${DIALER_SCRIPT}"
再新建一个名为“gosuncn_options”的文件,在文件里面输入如下所示内容:
示例代码71.2.3.2 gosuncn_options 文件内容
1 /dev/ttyUSB2
2 115200
3 crtscts
4 modem
5 persist
6 lock
7 noauth
8 noipdefault
9 debug
10 nodetach
11 user Anyname
12 password Anypassword
13 ipcp-accept-local
14 ipcp-accept-remote
15 defaultroute
16 usepeerdns
17 noccp
18 nobsdcomp
19 novj
20 dump
相关文章:

Linux 4G 通信实验
目录4G 网络连接简介高新兴ME3630 4G 模块实验ME3630 4G 模块简介ME3630 4G 模块驱动修改ME3630 4G 模块ppp 联网测试前面我们学习了如何在Linux 中使用有线网络或者WIFI,但是使用有线网络或者WIFI 有 很多限制,因为要布线,即使是WIFI 你也得…...

华为OSPF技术详细介绍,保姆级,谁都能看懂(一)
目录 1、简介 2、OSPF基本原理 3、OSPF的特点 4、OSPF区域 5、路由器的类型 6、OSPF5种报文 7、后半部分内容 1、简介 OSPF(Open Shortest Path First,开放最短路径优先)是一个基于链路状态的内部网关协 议。目前针对IPv4协议使用的是OS…...

行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
摘要:行人车辆检测与计数系统用于交通路口行人及车辆检测计数,道路人流量、车流量智能监测,方便记录、显示、查看和保存检测结果。本文详细介绍行人车辆检测,在介绍算法原理的同时,给出Python的实现代码、PyQt的UI界面…...

SM3哈希算法的FPGA实现 I
SM3哈希算法的FPGA实现 I SM3哈希算法的FPGA实现 I一、什么是SM3哈希算法?二、SM3哈希算法的具体内容1、填充2、迭代与压缩3、计算拼凑值三、参考文档语言 :verilog 仿真工具: Modelsim EDA工具:quartus II 一、什么是SM3哈希算法…...

【数据结构与算法】线性表--数组
文章目录一、前言二、数组的概念三、数组的操作数组的插入数组的删除四、容器与数组五、问题:为何数组要从0开始编号,而不是1开始呢?六、总结一、前言 常见的数据结构如下图,本文主要讲解数据结构线性表--数组。 二、数组的概念 …...

剑指offer排序专题
剑指offer排序专题 jz3 数组中重复的数字描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[…...

已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py
已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py 文章目录报错问题报错翻译报错原因解决方法1:easy_install 来安装pip解决方法2:本地安装pip《100天精通Python》专栏推荐白嫖80g Python全栈视频报错问题 粉丝群里面的一个小伙伴遇到问题…...

3 步走,快速上手 API 接口测试
开始 API 接口测试之前,我们需要弄清接口测试的含义: 接口测试就是根据接口清单,模拟客户端向服务端发送请求数据,并获取响应数据后,查看响应数据是否符合预期的过程。 整个过程可以分为三个步骤: 第一步&…...

爬虫-day1-正则表达式作业
利用正则表达式完成下面的操作: 一、不定项选择题 能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括(ABD ) A. r"\(?\d{3}\)?-?\d{8}" B. r"[0-9()-]" C. r"[0-9(-)]*\d*&…...

【半监督医学图像分割 2023 CVPR】RCPS
文章目录【半监督医学图像分割 2022 CVPR】RCPS摘要1. 介绍2. 相关工作2.1 医学图像分割2.1 半监督学习2.3 对比学习3. 方法3.1 整体概述3.2 纠正伪监督3.3 双向Voxel对比学习。4. 实验【半监督医学图像分割 2022 CVPR】RCPS 论文题目:RCPS: Rectified Contrastive …...

【UVM实战练习项目】2、UVM验证环境基本框架搭建(实例一)(纯软件环境,方便日后测试使用)
本节基于DUT完成UVM验证环境的基本框架搭建,实现对UVM理论知识点进行巩固练习,具体内容包括:如何创建激励、如何建立sequencer、如何连接sequencer和driver,如何集成agent、如何构建env等。 正式开始之前让我们再来回顾下搭建验证环境的过程:首先进行数据建模sequence_ite…...

【web前端初级课程】第四章 什么是JavaScript
目录 一、JavaScript在前端的三种写法 二、常见的弹框 三、变量 四、常量 五、数据类型 六、运算符 七、循环及函数 八、相关练习 前言 JavaScript是一个面向对象的,弱数据类型的,解释型的,动态脚本语言。 面向对象更符合我们对事物…...

数字中国建设进行时:吉林大学党委常务副书记冯正玉一行调研实在智能
两会前夕,中共中央、国务院印发了《数字中国建设整体布局规划》,明确了加快数字中国建设的重点任务。《规划》强调,要加强整体谋划、统筹推进,把各项任务落到实处。在强化人才支撑的第四要点上,指出统筹布局一批数字领…...

面试官灵魂拷问[二]:SQL 语句中 where 条件后写上 1=1 是什么意思?
面试官灵魂拷问系列又来更新啦! “SQL 语句中 where 条件后写上 11 是什么意思?” 这玩意就跟很多新语言支持尾部逗号的原理一样的。 比如 Kotlin 支持数组写成 [1, 2, 3, 4, ] ,注意4后边那个逗号,为什么呢?因为当你增加一个项…...

进程与线程的关系
一、 进程 进程(Process)是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完成过程,这个过程也是进程本身从产生、发展至消亡的过程。 操作系统同时管理一个计算机系统中的多个进程,让计算机…...

自定义异常
自定义异常 使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。在程序中使用自定义异常类,大体可分为以下几个步骤: 创建自定义异常类。在…...

基于springboot物资管理系统(程序+数据库)
大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…...

蓝桥杯Web组备赛笔记6
目录 一、ElementUI 1、安装 2、简单使用 3、例子 4、其他内容的学习 二、echarts 1、简介 2、考点 3、安装 4、配置项:使用echarts的三步走 5、13届蓝桥真题(3)布局切换 6、数据格式处理:14届蓝桥模拟赛 1 期&#x…...

python控制语句
🍋在本次的博客当中,我们来认识一下python语言的新的部分——python语言的控制语句。在我们的python语言当中控制语句大致分为三类:1.选择语句,2.循环语句,3.跳转语句。当我们在编写代码的时候可以根据代码的逻辑的需求…...

华为OD机试题【最小叶子节点】用 Java 解 | 含解题说明
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:最小叶子节点 题目 二叉树也可…...

【linux】多线程控制详述
文章目录一、进程控制1.1 POSIX线程库1.2 创建线程pthread_create1.2.1 创建一批线程1.3 终止线程pthread_exit1.4 线程等待pthread_jion1.4.1 线程的返回值(退出码)1.5 取消线程pthread_cancel1.6 C多线程1.7 分离线程pthread_detach二、线程ID值三、线…...

SpringCloud学习-实用篇01
以下内容的代码可见:SpringCloud_learn/day01 1.认识微服务 单体架构和分布式架构 体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优点:架构简单,部署成本低缺点:耦合度高 分布式架构&#…...

如何使用python删除一个文件?好用到上头.....
人生苦短,我用python 若想利用python删除windows里的文件, 这里需要使用os模块 那接下来就看看利用os模块是如何删除文件的吧~ 具体实现方法如下! 更多学习资料:点击此处跳转文末名片获取 os.remove(path) 删除文件 path. 如果path是一…...

java学习笔记——权限修饰符、内部类
2.1 概述 在java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限, public:公共的 protected:受保护的 default:默认的 private:私有的 2.2 不同权限的…...

Java设计模式(十二)—— 状态模式
状态模式定义如下:允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。 适合状态模式的情景如下: 对象的行为依赖于它的状态,并且它必须在运行时根据状态改变它的行为。需要编写大量的条件分支语句来决定…...

功能测试自动化成功的7个因素
随着软件开发的不断发展,对高效和有效测试的需求也在不断增加。最关键的测试类型之一是功能测试,它确保软件执行其设计的任务。功能测试对于软件开发过程至关重要,而自动化对于实现更快、更可靠的结果也很重要。 为什么功能测试很重要&#x…...

基于openssl 自行签发https 协议证书 ,同时支持nginx配置
1准备工作 准备一台有openssl环境的主机即可,openssl版本暂时无要求。本次环境采用centeros7.6自带openssl。另外,准备一个nginx。 2证书签发 目录 1准备工作 2证书签发 2.1生成根秘钥 2.2生成根证书 2.2.1根证书格式转换 2.3生成私钥key 2.4生…...

Window Terminal 安装 Oh My Posh 美化
Reference Oh-My-Posh 官方文档Windows Terminal 官方文档手把手 Windows Terminal 美化 安装 微软商店搜Windows Terminal安装即可。 Oh My Posh winget 找不到 winget : 无法将“winget”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 解决方法:添加…...

单片机 | 51单片机实践
【金善愚】 单片机应用实践——基础篇 笔记整理 课程视频 :https://space.bilibili.com/483942191/channel/collectiondetail?sid144001 仿真软件:Proteus 8.13 安装链接:https://pan.baidu.com/s/1-1fscykdvulV60xA4Hygaw?pwdxeob 代…...

根据时间戳获取总用时(天时分秒)
//获取总用时(天时分秒) export const getTotalTime (time) > { if (!time) { return ""; } let s time / 1000; let m s / 60; let h m / 60; let day h / 24; if (Math.floor(day)) { return Math.floor(day) "天" Mat…...