Linux驱动开发|4G通信

news/2024/11/17 5:51:50/

4G通信

使用有线网络或者 WIFI 有很多限制,因为要布线,即使是 WIFI 也得先布线,然后接个路由器。因此在不方便布线的场合,就可以通过 4G 连接到网络。下面介绍如何在 I.MX6U-ALPHA 开发板中使用 4G 来实现联网功能

一、4G网络连接

4G 模块一般都是 MiniPCIE 接口的,虽然用了 MiniPCIE 接口,但是实际上的通信接口都是 USB,所以 4G 模块的驱动就转换为了 USB 驱动。4G 模块厂商都提供了详细的文档讲解如何在 Linux 下使用 4G 模块,以及如何修改 Linux 内核加入 4G 模块驱动。

I.MX6U-ALPHA 开发板也有一个 MiniPCIE 形式的 4G 模块接口,虽然外形是 MiniPCIE 的,但是内心却是 USB 的。I.MX6U-ALPHA 开发板的 4G 模块原理图如下图所示:
在这里插入图片描述
由上图可以看出,U8 就是 MiniPCIE 接口,MiniPCIE 接口连接到了 GL850 这个 HUB 芯片的 DP2 和 DM2,也就是 GL850 的 USB2 接口上,U11 是 Nano SIM 接口

二、4G模块介绍

ME3630 4G 模块是深圳高新兴物联(前身是中兴物联)出品的 4G LTE 模块,是一款 LTE Cat.4 七模全网通 4G 模块,在 LTE 模式下可以提供 50Mbps 上行速率以及 150Mbps 的下行速率,并支持回退到 3G 或 2G 网络。其特性如下:

– 一路 USB2.0 接口
– 一路 UART 接口
– SIM 卡接口支持 1.8/3.0V
– 内置 TCP、 UDP、 FTP 和 HTTP 等协议
– 支持 RAS/ECM/NDIS
– 支持 AT 指令

ME3630 4G 模块有多种配置,这里主要使用到 ME3630 的数据通信功能,在使用 ME3630 4G 模块之前,需先将其插入到开发板的 MiniPCIE 座上、上紧螺、插入 Nano SIM 卡、接上天线,如下图:
在这里插入图片描述

三、4G模块实验

3.1 模块驱动修改
  • 添加 USB 设备信息:Linux 源码的 drivers/usb/serial/option.c 文件中 option_ids 数组里添加 ME3630 的 PID 和 VID
{ USB_DEVICE(0x19d2, 0x0117) }, /* ME3630*/
{ USB_DEVICE(0x19d2, 0x0199) },
{ USB_DEVICE(0x19d2, 0x1476) },

在这里插入图片描述

  • 添加 ECM 支持程序:支持 ECM 接口,可以通过该接口轻松联网。在 drivers/usb/serial/option.c 文件 option_probe 函数里面添加如下内容
/* EM3630 */
if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1476 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 3)return -ENODEV;if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1476 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)return -ENODEV;if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1509 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 4)return -ENODEV;if (serial->dev->descriptor.idVendor == 0x19d2 &&serial->dev->descriptor.idProduct == 0x1509 &&serial->interface->cur_altsetting->desc. bInterfaceNumber == 5)return -ENODEV;

在这里插入图片描述

  • 配置 Linux 内核:

使能 USBNET 功能

-> Device Drivers-> -*- Network device support-> USB Network Adapters-> -*- Multi-purpose USB Networking Framework

使能 USB 串口 GSM、 CDMA 驱动

-> Device Drivers-> [*] USB support-> <*> USB Serial Converter support-> <*> USB driver for GSM and CDMA modems

使能 USB 的 CDC ACM 模式

-> Device Drivers-> [*] USB support-> <*> Support for Host-side USB-> <*> USB Modem (CDC ACM) support
  • 编译 Linux 内核,然后使用新的 zImage 启动开发板。如果 ME3630 已经插上的话,系统启动以后就会输出如下信息
    在这里插入图片描述

以上可见,ME3630 虚拟出了 3 个 USB 设备,分别为 ttyUSB0~ttyUSB2。ECM 模式下,可以通过运行ifconfig -a命令查看对应的网卡,名字可能为usbX/ecmX/ethX 等,如果存在的话就说明 ECM 接口驱动加载成功

在这里插入图片描述

3.2 PPP联网测试
  • 使能 Linux 内核 ppp 功能:支持 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
  • 移植 pppd 软件:通过 pppd 软件来实现 ppp 拨号上网

移植之前先删除掉/usr/sbin/chat 这个软件(Busybox制作根文件系统的时候生成的),因为移植pppd也会编译出 chat 软件,不删除的话会出错

将源码 ppp-2.4.7.tar.gz 拷贝到 Ubuntu 下并解压,进入解压后的文件夹进行配置编译

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/andyxi/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppd/pppd /home/andyxi/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppdump/pppdump /home/andyxi/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppstats/pppstats /home/andyxi/linux/nfs/rootfs/usr/bin/ -f

完成以后输入“pppd -v”查看版本号,如果 pppd 版本号显示正常就说明 pppd 移植成功

  • ppp 上网测试

使用 pppd 进行拨号上网之前要先创建 4 个文件,这 4 个文件须放到同一个目录下。在开发板根文件系统下创建 /etc/gosuncn 目录

在 /etc/gosuncn 目录下,创建名为 “ppp-on” 的shell 脚本文件

#!/bin/sh
clear
OPTION_FILE="gosuncn_options"
DIALER_SCRIPT=$(pwd)/gosuncn_ppp_dialer
exec pppd file $OPTION_FILE connect "chat -v -f ${DIALER_SCRIPT}"

在 /etc/gosuncn 目录下,创建名为 “gosuncn_options” 的文件

/dev/ttyUSB2		//联通或移动卡用ttyUSB2,电信卡用ttyUSB0
115200
crtscts
modem
persist
lock
noauth
noipdefault
debug
nodetach
user Anyname				//电信卡,要改为"user card"
password Anypassword		//电信卡,要改为"password card"
ipcp-accept-local
ipcp-accept-remote
defaultroute
usepeerdns
noccp
nobsdcomp
novj
dump

在 /etc/gosuncn 目录下,创建名为 “gosuncn_ppp_dialer” 的文件

ABORT "NO CARRIER"
ABORT "ERROR"
TIMEOUT 120
"" ATE
SAY "ATE"
ECHO ON
OK ATH
OK ATP
//"3GNET"是联通卡的APN码,移动卡的话要改为"CMNET"
//若是电信卡,下面行要改为 OK "AT+ZCAPN=card,card"
OK AT+CGDCONT=1,\"IP\",\"3GNET\"	
OK ATD*99#		//电信卡,要改为"ATD#777"
CONNECT

在 /etc/gosuncn 目录下,创建名为 “disconnect” 的脚本文件

#!/bin/sh
killall pppd

最后还要给予 ppp-on 和 disconnect 这两个文件可执行权限

chmod 777 ppp-on disconnect

使用./ppp-on &命令连接 4G 网络,可能会出现如下问题

在这里插入图片描述

#提示不能创建“Can't create lock file /var/lock/LCK..ttyUSB2”
#检查根文件系统是否存在/var/run 和/var/lock,没有的话就创建这两个文件夹
mkdir /var/run //创建/var/run 文件夹
mkdir /var/lock //创建/var/lock 文件夹

在这里插入图片描述

#使用`./ppp-on &`命令重连后
#提示找不到“/etc/ppp/resolv.conf”这个文件,到相关目录下手动创建该文件
touch resolv.conf

创建完成后重启开发板!进入到/etc/gosuncn 目录,使用./ppp-on &命令完成拨号上网。成功后会生成名为“ppp0”的网卡

在这里插入图片描述
4G 网络测试需要关闭其他网卡,否则可能会有问题,但现在是通过网络启动的系统,且通过 NFS 挂载的根文件系统,因此无法关闭其他的网卡。为了解决这个问提,只能将 uboot、 Linux kernel、 .dtb 设备树和根文件系统都烧写到板子的EMMC 或 NAND 上,然后直接启动 EMMC 或 NAND 上的系统即可,这样就不需要其他网卡工作了。烧写方法请参考系统烧写一文。

系统烧写完成后设置开发板从 EMMC 启动,启动后按照前面的步骤先让 4G 模块连接上网络。确保当前开发板只有一个 ME3630 对应的 ppp0 网卡,最后直接 ping 百度官网即可,结果如下图示
在这里插入图片描述

3.3 ECM联网测试

对于支持 ECM 接口的模块可以直接通过 ECM 上网, ME3630 模块支持 ECM 接口,重启开发板,输入“ifconfig -a”命令可以看到有一个名为“usb0”的网卡,这个 usb0 网卡就是 ECM 接口对应的网卡
在这里插入图片描述
使用 minicom 输入AT 指令,先用 minicom 打开 ttyUSB1, ttyUSB1 就是 ME3630 的 AT 指令串口,波特率设置为 115200,然后依次输入如下指令:

输入 AT 指令:如果模块已经设置为 ECM 模式,则此不需要此步骤

AT+ZSWITCH=L

使用 AT 指令+CGDCONT 来设置数据参数

//联通卡的 APN 为 3GNET
//电信卡的 APN 为 CTNET
//移动卡的 APN 为 CMNET
AT+CGDCONT=1, "IP" , "CMNET"

发送连接 AT 命令

AT+ZECMCALL=1

连接成功以后打开 usb0 网卡,并获取 IP 地址

ifconfig usb0 up 	//打开 usb0 网卡
udhcpc -i usb0		//获取 IP 地址

在这里插入图片描述

IP 地址获取成功后,ping 一下百度官网,如果能 ping 通说明 ME3630 的 ECM 接口联网成功。如果提示“ bad address ‘www.baidu.com’”,可以检查一下 DNS 服务器地址设置是否正确,打开/etc/resolv.conf 文件,加入“nameserver 114.114.114.114”即可

3.4 GNSS定位测试

GNSS 功能,也就是 GPS 定位,在上面移植 ME3630 驱动时我们知道最终会出现3个 ttyUSB 设备,分别为 ttyUSB0~ttyUSB2,其中 ttyUSB1 为 GNSS 接口。 GPS 模块是串口输出的,因此可以直接使用 minicom 来查看 ttyUSB1 输出的 GNSS 信息。minicom配置如下:
在这里插入图片描述
minicom 打开串口时,有时会提示"/dev/ttyUSB1 is locked"的错误,是由于上次没有正确关闭 minicom,导致在 /var/lock 目录下存在LCK…XXX 文件 (XXX 就是具体的串口设备文件名,比如 ttyUSB1),进入"/var/lock" 下,删除该文件即可

ME3630 默认关闭 GNSS 定位输出功能的,必须先使用 AT 指令配置,minicom 打开串口后,输入如下AT指令进行配置:

ATI 			//查看固件信息
Manufacturer: GOSUNCNWELINK
Model: ME3630-W
Revision: ME3630C3CV1.0B03
IMEI: 864863045876287
OK
AT+ZGINIT 		//初始化 GPS
OK
AT+ZGPSEVENT=1 	//使能 GPS 事件上报
OK
AT+ZGMODE=3 	//设置定位模式
OK
AT+ZGPORT=0 	//定位信息从 AT、 MODEM、 UART 三个口同时上报
OK
AT+ZGNMEA=31 	//设置 GPS 数据为 NMEA 格式
OK
AT+ZGPSR=1 		//使能 ZGPSR 数据
OK
AT+ZGRUN=2 		//连续定位模式
OK

以上 AT 指令配置完成后 ME3630 就会开始搜星,注意: GPS 天线一定要放到室外! ME3630 搜星结束以后就会输出 NEMA 格式的定位信息
在这里插入图片描述


http://www.ppmy.cn/news/539714.html

相关文章

oracle 日志大于4g,Oracle日志文件达到4G

解决方案一:停止监听器 1)LSNRCTL进入交互模式 cmd 输入 LSNRCTL 2)执行set current_listener LISTENER 3)set log_status off 4)stop 停止监听器 5)手工删除ADR指定的监听日志路径下的listener.log文件 6)start重启监听器 7)status查看状态 解决方案二:脚本定时清除log文件 …

[4G5G专题-27]:架构-UE终端的4G+5G双连接详解

目录 第1章. 什么是多连接 1.1 多连接概述 1.2 多连接的聚合和分离点的分类 1.3 多连接好处 1.4 双连接的本质 1.5 多连接的控制面与数据面连接方法分类 1.6 1C2U模式下数据承载的三种方式 1.7 分清各种场景的基本思路 1.8 关于终端与基站之间的无线控制信道 第2章 4…

Python基础篇(十一):装饰器

装饰器 前言1. 装饰器的定义2. 装饰器的应用3. 装饰器的语法4. func(*args, **kwargs) 前言 装饰器是Python中一种强大的函数或类修饰机制&#xff0c;用于在不修改原始函数或类代码的情况下&#xff0c;对其进行功能扩展或修改。装饰器基于函数式编程的概念&#xff0c;通过将…

4G和5G频谱共享技术

【摘 要】目前4G向5G重耕过程中存在频谱利用不平衡的问题,可采用动态频谱共享的技术解决。基于对现有频谱共享方案的原理分析,通过理论测算和实验室测试结合的方法研究终端和基站各功能特性对于终端性能的影响。动态频谱共享对下行影响较大,对上行影响较小,不同功能选择会…

c语言log库,Log4g

软件简介 Log4g是一个基于GObject 的日志工具。Log4g 的设计基于对流行的Log4j 1.2 日志包的移植。Log4j已经被移植到了很多编程语言中&#xff0c;包括(不限于)C、Perl和Python。Log4g将这个功能带到C/GLib/GObject编程栈中。 Log4g 的核心组件是记录器(loggers)、附加器(appe…

4G全网构建仿真

4G指的是第四代移动电话行动通信标准&#xff0c;是第四代移动通信技术&#xff0c;也是3G的延伸。4G是集3G与WLAN于一体&#xff0c;并能够传输高质量视频图像&#xff0c;它的图像传输质量与高清晰度电视不相上下。4G系统能够以10Mbps的速度下载&#xff0c;比拨号上网快200倍…

华为云学院-人人学loT学习笔记及扩展- 第一章 初识物联网

1.1初探物联网 一&#xff0c;物联网 百度解释&#xff1a; 物联网&#xff08;The Internet of Things&#xff0c;简称IOT&#xff09;是指通过 各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术(可理解为通信感知技术)&#xff0c;实…

4G和4G LTE之间的区别是什么?

(本文转载自http://www.mokuai.cn) 4G是第四代移动网络技术。4G用于取代3G,它提供了更可靠的连接并提供更高的速度。具体而言,4G LTE意味着“第四代长期演进”,LTE是一种4G,可为移动互联网体验提供最快的连接 - 比3G快10倍。许多人可以互换使用4G和4G LTE这两个术语,但它…