百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

「正点原子Linux连载」第七十一章Linux 4G通信实验

moboyou 2025-07-17 20:33 20 浏览

1)实验平台:正点原子Linux开发板

2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南关注官方微信号公众号,获取更多资料:正点原子

第七十一章Linux 4G通信实验


前面我们学习了如何在Linux中使用有线网络或者WIFI,但是使用有线网络或者WIFI有很多限制,因为要布线,即使是WIFI你也得先布线,然后在接个路由器。有很多场合是不方便布线的,这个时候就是4G大显身手的时候,产品可以直接通过4G连接到网络,实现无人值守。本章我们就来学一下如何在I.MX6U-ALPHA开发板中使用4G来实现联网功能。


71.1 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模块和相应的天线。

71.2高新兴ME3630 4G模块实验

71.2.1 ME3630 4G模块简介

ME36304G模块是正点原子官方推荐的4G通信模块,ME3630 4G模块是深圳高新兴物联出品的4G LTE模块,前身是中兴物联,正点原子是高新兴物联官方代理商,因此在模块质量以及售后服务这一块是有保证的。

ME3630是一款LTE Cat.4七模全网通4G模块,在LTE模式下可以提供50Mbps上行速率以及150Mbps的下行速率,并支持回退到3G或2G网络。此模组支持分集接收、分集接收是终端产品支持双天线以提高通信质量和通信可靠性的无线连接技术。ME3630支持多种网络协议,比如PAP、CHAP、PPP等,拥有多种功能,比如GNSS、Remotewakeup、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模块了。

71.2.2 ME3630 4G模块驱动修改

1、添加USB设备信息

我们需要先在Linux内核中添加ME3630的USB设备信息,因为我们前面说了,ME3630 4G模块用的USB接口。打开Linux源码的
drivers/usb/serial/option.c文件,找到options_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)},

完成以后的options_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 */

2if(serial->dev->descriptor.idVendor ==0x19d2&&

3 serial->dev->descriptor.idProduct ==0x1476&&

4 serial->interface->cur_altsetting->desc. bInterfaceNumber ==3)

5 return-ENODEV;

6

7if(serial->dev->descriptor.idVendor ==0x19d2&&

8 serial->dev->descriptor.idProduct ==0x1476&&

9 serial->interface->cur_altsetting->desc. bInterfaceNumber ==4)

10 return-ENODEV;

11

12if(serial->dev->descriptor.idVendor ==0x19d2&&

13 serial->dev->descriptor.idProduct ==0x1509&&

14 serial->interface->cur_altsetting->desc. bInterfaceNumber ==4)

15 return-ENODEV;

16

17if(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所示:


71.2.3 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这个软件!

在移植之前先删除掉/usr/sbin/chat这个软件!

在移植之前先删除掉/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/

make CC=arm-linux-gnueabihf-gcc //编译

编译完成以后就会在当前目录下生成chat/chat、pppd/pppd、pppdump/pppdump和pppstats/pppstats这四个文件,将这个四个文件拷贝到开发板根文件系统中的/sur/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_option"的文件,在文件里面输入如下所示内容:

示例代码71.2.3.2 gosuncn_option文件内容

1/dev/ttyUSB2

2115200

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

第1行,如果是联通或移动的卡就是用ttyUSB2,如果是电信的卡就是用ttyUSB0。

第11~12行,这两行内容和所使用的卡有关,如果是联通或者移动的卡就按照上面的写,如果是电信的卡,要改为如下所示内容:

usercard

passwordcard

再新建一个名为"gosuncn_ppp_dialer"的文件,输入如下所示内容:

示例代码71.2.3.3 gosuncn_ppp_dialer文件内容

1 ABORT "NO CARRIER"

2 ABORT "ERROR"

3 TIMEOUT 120

4"" ATE

5 SAY "ATE"

6 ECHO ON

7 OK ATH

8 OK ATP

9 OK AT+CGDCONT=1,\"IP\",\"3GNET\"

10 OK ATD*99#

11 CONNECT

第9行,后面的3GNET是网络的APN码,这个要根据自己所使用的手机卡来确定,联通卡的APN为3GNET,移动卡的APN为CMNET。因为我使用的是联通卡进行测试的,所有这里设置APN为3GNET,如果使用的移动卡,那么要将APN设置为CMNET。如果是电信的卡,那么第9行要改为:

OK "AT+ZCAPN=card,card"

第10行,如果是联通或移动的卡,那么第10行就不变。如果是电信的卡,那么第10行要改为:

OK ATD#777

最后新建一个名为"disconnect"的shell脚本,输入如下所示内容:

示例代码71.2.3.4 disconnect文件内容

1 #!/bin/sh

2 killall pppd

这四个文件编写完成以后要给予ppp-on和disconnect这两个文件可执行权限,命令如下:

chmod 777 ppp-on disconnect

完成以后输入如下命令连接4G网络:

./ppp-on &

在ME3630连接4G网络的过程中,可能会出现如图71.2.3.3所示的错误提示:


从图71.2.3.3可以看出,提示不能创建"Can't create lock file /var/lock/LCK..ttyUSB2",检查根文件系统是否存在/var/run和/var/lock这两个目录,如果没有的话就手动创建这两个文件夹,命令如下:

mkdir /var/run //创建/var/run文件夹

mkdir /var/lock //创建/var/lock文件夹

完成以后重新输入"./pppd-on &"命令连接4G网络,连接成功以后会输入如图71.2.3.4所示信息:


从图71.2.3.4可以看出,在ME3630 4G模块联网过程中,需要用到/etc/ppp/resolv.conf文件,但是我们当前根文件系统没有此文件,所以需要手动创建此文件。创建完成以后重启开发板!开发板重启以后进入到/etc/gosuncn目录,然后输入如下命令完成拨号上网:

./ppp-on &

ppp拨号成功以后就会生成一个名为"ppp0"的网卡,如图71.2.3.5所示:


4G网络测试需要关闭其他网卡,否则的话网络测试可能有问题,但是我们现在是通过网络启动的系统,并且通过NFS挂载的根文件系统,因此我们没法关闭其他的网卡,比如eth0。为了解决这个问题,我们只能将uboot、Linuxkernel、.dtb设备树和根文件系统都烧写到板子的EMMC或NAND上,然后直接启动EMMC或NAND上的系统即可,这样就不需要其他网卡工作了。烧写方法请参考我们的《第二十九章系统烧写》,这里就不详细的讲解了。系统烧写完成以后设置开发板从EMMC或NAND启动,因为我使用的是EMMC核心板,因此设置从EMMC启动,启动以后按照前面的步骤先让ME3630 4G模块连接上网络。确保当前开发板只有一个ME3630对应的ppp0网卡,最后直接ping百度官网即可,结果如图71.2.3.6所示:


71.2.4 ME3630 4G模块ECM联网测试

对于支持ECM接口的模块可以直接通过ECM上网,ME3630模块支持ECM接口,重启开发板,输入"ifconfig-a"命令可以看到有一个名为"usb0"的网卡,如图71.2.4.1所示:


这个usb0网卡就是ECM接口对应的网卡,我们需要使用minicom输入一些AT指令,所以要先用minicom打开ttyUSB1,ttyUSB1就是ME3630的AT指令串口,波特率设置为115200。打开以后依次输入如下指令:

①、输入AT指令:

AT+ZSWITCH=L

然后重启开发板。如果模块已经设置为ECM模式的话此步骤就不需要了。

②、使用AT指令+CGDCONT来设置数据参数。联通卡的APN为3gnet,电信卡的APN为ctnet,移动卡的APN为cmnet。比如我现在用的联通卡,所以设置APN为3gnet,命令如下:

AT+CGDCONT=1,"IP","CMNET"

③、发送连接AT命令:

AT+ZECMCALL=1

等待连接成功,连接成功以后会输出如图71.2.4.2所示信息:

连接成功以后打开usb0网卡,命令如下:

ifconfigusb0 up //打开usb0网卡

usb0网卡打开以后输入如下命令获取IP地址:

udhcpc -i usb0

IP地址获取过程如图71.2.4.3所示:


从图71.2.4.3可以看出,usb0网卡获取到的IP地址为10.164.232.36,然后ping一下百度官网,如果能ping通就说明ME3630的ECM接口联网成功。如果提示"bad address 'www.baidu.com'",那么请检查一下DNS服务器地址设置是否正确,打开/etc/resolv.conf文件,然后加入"nameserver 114.114.114.114"即可。

至此ME3630 4G模块的网络连接就已经全部测试完成,大家既可以在正点原子的I.MX6U-ALPHA开发板上使用4G上网了。

71.3 EC20 4G模块实验

71.3.1 EC20 4G模块简介

关于EC20 4G模块的详细资料请找卖家索要!

EC20有多种不同的配置,比如全网通纯数据版本、语音版、带GNSS版等等,建议大家购买的时候至少要选择全网通数据版,因为我们使用4G模块主要还是用于数据通信的。移远的EC20 4G模块采用LTE 3GPP Rel.11技术,支持最大下行速率150Mbps,最大上行速率50Mbps。EC20 4G模块特性如下:

1、一路USB2.0高速接口,最高可达480Mbps。

2、一组模拟语音接口(可选)。

3、1.8V/3.0V SIM接口。

4、1个UART接口。

5、W_DISABLE#(飞行模式控制)。

6、LED_WWAN#(网络状态指示)。

EC20也支持AT指令,本教程不讲AT指令,关于AT指令的使用请参考EC20的相关文档。在正式使用EC20 4G模块之前,请先将其插入到开发板的MiniPCIE座上、上紧螺、插入Nano SIM卡、接上天线,如图71.3.1.1所示:


一切准备就绪以后就可以开始驱动EC20 4G模块了。

71.3.2 EC20 4G模块驱动修改

1、添加USB设备信息

我们需要先在Linux内核中添加EC20的USB设备信息,因为我们前面说了,EC20 4G模块用的USB接口。打开Linux源码的
drivers/usb/serial/option.c文件,首先定义EC20的ID宏,内容如下:

示例代码71.3.2.1 EC20 4G模块ID

1/* EC20 4G */

2 #define QUECTEL_VENDOR_ID 0X2C7C

3 #define QUECTEL_PRODUCT_EC20 0X0125

完成以后如图71.3.2.1所示:


继续在
drivers/usb/serial/option.c文件里面找到option_ids数组,在此数组里面加入如下内容:

示例代码71.3.2.2 option_ids数组添加EC20 ID信息

{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC20)},/* EC20 4G */

完成以后option_ids数组如图71.2.2.2所示:


继续在
drivers/usb/serial/option.c文件里面找到option_probe函数,在此函数里面添加如下内容:

示例代码71.3.2.3 option_probe函数添加的代码

1 /* EC20 */

2if(dev_desc->idVendor == cpu_to_le16(0x05c6)&&

3 dev_desc->idProduct == cpu_to_le16(0x9003)&&

4 iface_desc->bInterfaceNumber >=4)

5 return-ENODEV;

6

7if(dev_desc->idVendor == cpu_to_le16(0x05c6)&&

8 dev_desc->idProduct == cpu_to_le16(0x9215)&&

9 iface_desc->bInterfaceNumber >=4)

10 return-ENODEV;

11

12if(dev_desc->idVendor == cpu_to_le16(0x2c7c)&&

13 iface_desc->bInterfaceNumber >=4)

14 return-ENODEV;

添加完成以后的option_probe函数如图71.3.2.3所示:


继续在
drivers/usb/serial/option.c文件里面找到option_1port_device结构体变量,在里面加入休眠后唤醒接口,如图71.3.2.4所示:


打开
drivers/usb/serial/usb_wwan.c文件,在usb_wwan_setup_urb函数中添加零包处理代码,完成后的usb_wwan_setup_urb函数如下所示:

示例代码71.3.2.4 修改后的usb_wwan_setup_urb函数

1staticstruct urb *usb_wwan_setup_urb(struct usb_serial_port *port,

2int endpoint,

3int dir,void*ctx,char*buf,int len,

4void(*callback)(struct urb *))

5{

6 struct usb_serial *serial = port->serial;

7 struct urb *urb;

8

9 urb = usb_alloc_urb(0, GFP_KERNEL);/* No ISO */

10 if(!urb)

11 returnNULL;

12

13 usb_fill_bulk_urb(urb, serial->dev,

14 usb_sndbulkpipe(serial->dev, endpoint)| dir,

15 buf, len, callback, ctx);

16

17 /* EC20 */

18 if(dir == USB_DIR_OUT){

19 struct usb_device_descriptor *desc =

&serial->dev->descriptor;

20 if(desc->idVendor == cpu_to_le16(0x05c6)&&

21 desc->iProduct == cpu_to_le16(0x9090))

22 urb->transfer_flags |= URB_ZERO_PACKET;

23

24 if(desc->idVendor == cpu_to_le16(0x05c6)&&

25 desc->iProduct == cpu_to_le16(0x9003))

26 urb->transfer_flags |= URB_ZERO_PACKET;

27

28 if(desc->idVendor == cpu_to_le16(0x05c6)&&

29 desc->iProduct == cpu_to_le16(0x9215))

30 urb->transfer_flags |= URB_ZERO_PACKET;

31

32 if(desc->idVendor == cpu_to_le16(0x2c7c))

33 urb->transfer_flags |= URB_ZERO_PACKET;

34 }

35

36 return urb;

37}

第18~34行就是要添加到usb_wwan_setup_urb函数里面的零包处理代码。至此,Linux内核需要修改的地方就完了。编译一下Linux内核,检查一下代码修改有没有问题,如果修改正确的话就是没有任何问题的。

2、配置Linux内核

我们需要配置Linux内核,使能USB NET、GSM、CDMA驱动等,配置方法和我们在71.2.2小节讲解的ME3630 4G模块的配置方法一样,大家参考71.2.2小节即可。配置完成以后编译一下Linux内核,然后使用新的zImage启动开发板。如果EC20已经插上的话,系统启动以后就会输出如图71.3.2.5所示的信息:


从图71.3.2.5可以看出,多了ttyUSB0~ttyUSB3,这4个tty接口就是EC20虚拟出来的,可以查看一下/dev/ttyUSB0~ttyUSB3是否存在,结果如图71.3.2.6所示:


图71.3.2.6中的这4路ttyUSB的含义见表71.3.2.1:

表71.3.2.1四路ttyUSB函数

我们用到最多的就是ttyUSB1和ttyUSB2,如果你购买的EC20模块带有GPS功能,那么就可以通过ttyUSB1接口读取GPS数据。如果你想使用EC20的AT指令功能,那么就使用ttyUSB2接口即可。

3、添加移远官方的GobiNet驱动

移远为EC20提供了GobiNet驱动,驱动源码我们已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->3、4G模块->移远EC20\EC20_R2.1_Mini_PCIe-C->05 Driver->Linux->GobiNet-> Quectel_WCDMA<E_Linux&
Android_GobiNet_Driver_V1.3.0.zip。将Quectel_WCDMA<E_Linux&
Android_GobiNet_Driver_V1.3.0/src下的所有.c和.h文件都拷贝到Linux内核中的/driver/net/usb目录下,也就是图71.3.2.7中所示的文件:


拷贝完成以后打开Linux内核的drivers/net/usb/Makefile文件,在此文件末尾加入如下内容:

示例代码71.3.2.5 修改后的drivers/net/usb/Makefile文件

1 obj-$(CONFIG_USB_GOBI_NET) += GobiNet.o

2 GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o

最后在drivers/net/usb/Kconfig文件中加入下所示内容:

示例代码71.3.2.6 drivers/net/usb/Kconfig要添加的内容

1 config USB_GOBI_NET

2 tristate"Gobi USB Net driver for Quectel module"

3 help

4 Support Quectelmodule.

5

6 A modemmanager with support for GobiNet is recommended.

7 Tocompile this driver as a module, choose M here: the module will be calledGobiNet.1

上述内容在drivers/net/usb/Kconfig文件中的位置如图71.3.2.8所示:


完成以后打开Linux内核配置界面,使能前面添加的Gobi驱动,配置路径如下:

-> Device Drivers

->[*] Network device support

->-*- USB Network Adapters

-><*> Gobi USB Net driver for Quectel module

配置如图71.3.2.9所示:


配置完成以后就重新编译一下Linux内核,然后使用新的zImage启动开发板。启动以后检查一下"/dev/qcqmi2"这个文件是否存在,如果存在的话就说明Gobi驱动工作成功。至此,EC20的驱动就已经修改完成了,接下来就是使用EC20来实现联网。

71.3.3 quectel-CM移植

要使用EC20,我们需要用到移远提供的quectel-CM这个软件,这个软件是移远提供的网络管理工具,软件源码已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->3、4G模块->移远EC20->EC20_R2.1_Mini_PCIe-C->05 Driver->Linux->GobiNet->WCDMA<E_QConnectManager_Linux&Android_V1.1.34.zip。将WCDMA<E_QConnectManager_Linux&Android_V1.1.34.zip这个压缩包进行解压,得到quectel-CM这个文件夹,然后将quectel-CM文件夹拷贝到Ubuntu中。拷贝完成以后进入到Ubuntu中的quectel-CM文件夹,使用如下命令进行交叉编译:

make CROSS_COMPILE=arm-linux-gnueabihf-

编译完成以后得到一个名为"quectel-CM"软件,如图71.3.3.1所示:


将图71.3.3.1中编译出来的quectel-CM软件拷贝到开发板根文件系统的/usr/bin目录下,命令如下:

sudo cp quectel-CM /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f

拷贝完成以后就可以使用quectel-CM软件来实现EC20联网测试了。

71.3.4 EC20上网测试

在开发板上输入如下命令完成EC20的4G网络连接:

quectel-CM -s cenet &

注意,quectel-CM软件会使用到udhcpc来获取IP地址,所以一定要确保当前根文件系统下存在udhcpc。当4G网络连接成功以后就会获取到IP地址,如图71.3.4.1所示:


从图71.3.4.1可以看出,EC20对应的网卡名字为"eth2",输入"ifconfigeth2"即可查看eth2网卡的详细信息,如图71.3.4.2所示:


4G网络测试需要关闭其他网卡,否则的话网络测试可能有问题,但是我们现在是通过网络启动的系统,并且通过NFS挂载的根文件系统,因此我们没法关闭其他的网卡,比如eth0。为了解决这个问题,我们只能将uboot、Linuxkernel、.dtb设备树和根文件系统都烧写到板子的EMMC或NAND上,然后直接启动EMMC或NAND上的系统即可,这样就不需要其他网卡工作了。烧写方法请参考我们的《第二十九章系统烧写》,这里就不详细的讲解了。系统烧写完成以后设置开发板从EMMC或NAND启动,因为我使用的是EMMC核心板,因此设置从EMMC启动,启动以后按照前面的步骤先让EC20连接上网络。确保当前开发板只有一个EC20对应的eth2网卡,然后直接直接ping百度官网即可,结果如图71.3.4.3所示:


如果ping百度官网没有问题,那么就表示EC20 4G模块在我们的I.MX6U-ALPHA开发板上工作

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...