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 格式的定位信息

Linux驱动开发|4G通信相关推荐

  1. 嵌入式linux驱动开发之移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的.一通百通,无论是其他4G模块都是一样的.这里记录下过程,分享给有需要的人.环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里 ...

  2. STM32MP157驱动开发——4G通信模块驱动

    STM32MP157驱动开发--4G通信模块驱动 一.简介 二.驱动开发 1.高新兴 ME3630 驱动开发 驱动修改 添加 ECM 支持程序 配置 Linux 内核 ppp拨号功能测试 ECM 联网 ...

  3. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  4. 嵌入式 Linux 驱动开发你想知道的都在这

    最近看到公众号上写的一篇文章,关于嵌入式 Linux 驱动开发的方方面面,感觉提供不错,此处特意贴出来供大家参考借鉴. 1.嵌入式驱动开发到底学什么 嵌入式大体分为以下四个方向: 嵌入式硬件开发:熟悉 ...

  5. Linux驱动开发概述

    第 1 章 Linux驱动开发概述 设备驱动程序是计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁.如果没有设备驱动程序,那么硬件设备就只是一堆废铁,没有什么功能.本章将对Linux驱动开发 ...

  6. 华清远见嵌入式Linux驱动开发培训班

    课程背景 开放的 Linux 受到广泛的欢迎,得到越来越多公司的支持,但是阻碍 Linux 在各个领域广泛应用的主要因素就是内核/驱动高端人才极度缺乏,Linux源代码中85%是设备驱动,嵌入式系统中 ...

  7. linux驱动开发篇(四)—— platform平台设备驱动

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  8. linux内核培训广州,嵌入式Linux驱动开发高级培训班-华清远见嵌入式培训中心

    课程目标 本课程以案例教学为主,系统地介绍Linux下有关FrameBuffer.MMC卡.USB设备的驱动程序开发.参加本课程学习的学员,因为具备了Linux设备驱动开发基础,所以本课程针对性较强, ...

  9. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

最新文章

  1. Github高赞的YOLOv5引发争议?Roboflow和开发者这样说
  2. 13、GridView案例
  3. Linux运维并行批量操作命令pssh的使用
  4. php手游管理系统,搭建简单的游戏管理系统
  5. 代码也浪漫:用Python放一场烟花秀!
  6. python函数体以冒号起始、并且是缩进格式的_函数体以冒号起始,并且是缩进格式的。(3.0分)_学小易找答案...
  7. Linux rmmod命令
  8. 医学生可以跨专业考计算机的专业,可以跨考医学研究生:2016跨专业考研需谨慎的专业解读:临床医学...
  9. addu指令_大金哥的超标量处理器学习笔记之5——指令集体系
  10. js点击页面其他地方如何隐藏div元素菜单
  11. 再学 GDI+[65]: 路径画刷(5) - SetGammaCorrection
  12. ShenNiu.MVC管理系统
  13. 爬取淘宝商品评论——2020-8月
  14. hbase常用命令及操作
  15. Phase2 Day20 事务 索引
  16. 逻辑回归(LR)算法java实现转
  17. 并行处理与体系结构_理论背景_01
  18. MFC C++视频播放和视频的浓缩播放和检测目标接口
  19. IDEA 开发工具安装教程及破解步骤(激活至2099年)
  20. 【web设计居家必备】迷你图标大集合

热门文章

  1. 虚电路(Virtual Circuit)的概念
  2. 【Linux安装和更新】两种方式更换软件源,以JDK为例安装
  3. 【转载】Mac键盘快捷键
  4. 寻找大于2^N的最小质数
  5. error: 'FILE' undeclared (first use in this function)
  6. 计算机强制关机后重启报错,Windows7启动后报错uxtheme.dll丢失怎么办?
  7. 有个人发现了一个在网吧忘了关掉的QQ后……
  8. 打印机设置默认为黑白
  9. 网页中添加QQ聊天代码
  10. bootstrap editable 动态改变列的编辑状态