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