Linux里有线网络、WiFi的使用方法,但有线网络需布线,WiFi也要依赖路由器和前期布线,在很多不便布线的场景中,这些联网方式就显得束手束脚。
此时,4G的优势就凸显出来了——产品能直接通过4G接入网络,轻松实现无人值守运行。这一章我们就来学习,如何在正点原子I.MX6U-ALPHA开发板上,用4G模块实现联网功能。
一、4G网络连接基础认知
不少人觉得Linux下的4G网络连接难度大,实则对于嵌入式Linux来说,它的核心逻辑并不复杂。如今大部分嵌入式Linux设备和安卓开发板搭配的4G模块,都采用MiniPCIe接口,可深入了解会发现,这些模块真正的通信通道其实是USB,这也意味着,4G模块的驱动本质就是USB驱动。而且模块厂商都会配套提供详尽文档,指导开发者在Linux系统里使用模块、修改内核添加驱动。
I.MX6U-ALPHA开发板自带MiniPCIe形式的4G模块接口,表面是MiniPCIe形态,实际数据传输走的是USB协议。从原理图来看,接口连接了GL850集线器芯片的USB2通道,还搭配了Nano SIM卡座,开发板用的是Nano SIM卡,我们直接用自己的手机卡就能开展测试。使用前,要把4G模块插到MiniPCIe接口并拧紧螺丝,再按正确方向把Nano SIM卡插入卡座,注意金属触点要朝下。
理论上,只要是MiniPCIe接口的4G模块,都能适配这款开发板,毕竟接口标准统一,但实际使用时还是要核对模块的引脚定义。这里我们重点学习两款主流模块的用法:上海移远的EC20和高新兴物联的ME3630,它们都是MiniPCIe接口的4G模块。此外,4G模块必须搭配天线才能工作,选购时别忘配IPEX接口的天线,也可以用IPEX转SMA线实现转接。
二、4G模块核心原理与配置方向
虽然4G模块采用MiniPCIe物理接口,但核心通信走的是USB协议。在Linux系统里,驱动4G模块的关键,就是先完成USB设备的驱动适配,再加载PPP、ECM这类网络协议栈。
目前主流的联网配置方式有两类:
1. PPP拨号(兼容性强)
这是传统联网方式,需要依赖pppd和chat脚本配合完成拨号,适配性强,能满足多数场景的需求,但配置步骤相对繁琐。
2. ECM模式(配置简便)
这是更现代的联网方式,联网体验和以太网类似,模块识别后会直接生成网卡,能直接获取IP地址,配置流程更简洁,推荐优先使用。
三、硬件与环境准备
- 核心硬件:正点原子I.MX6U-ALPHA开发板,搭配高新兴ME3630-W或移远EC20的4G模块,准备一张激活的Nano SIM卡,还要配备IPEX接口天线或转接线。
- 连接操作:把4G模块稳稳插入MiniPCIe接口,拧紧固定螺丝,确认Nano SIM卡方向正确(金属触点朝下)后插入卡座,天线一定要接好,否则模块无法正常注册基站,联网必然失败。
四、实战配置:两种联网方式详解
方式一:PPP拨号上网(兼容适配性广)
1. 内核配置适配
先进入内核配置界面,勾选启用USB Serial、PPP及PPP over serial的相关选项。还要在内核的`drivers/usb/serial/option.c`文件中,添加ME3630的USB设备标识,方便系统识别模块:
```c
{ USB_DEVICE(0x19d2, 0x0117) }, / 高新兴ME3630模块标识 /
```
其他模块可参照对应的VID和PID添加,核心是让内核能正确识别接入的4G模块。
2. 移植PPP工具集
下载ppp-2.4.7源码,进行交叉编译:先执行`./configure`配置,再运行`make CC=arm-linux-gnueabihf-gcc`编译。编译完成后,将生成的pppd、chat、pppdump、pppstats工具,全部拷贝到开发板的`/usr/bin`目录下。
3. 编写拨号脚本
在开发板的`/etc/gosuncn/`目录下,创建三个核心脚本:
- 启动脚本(ppp-on):内容为`!/bin/sh`和`exec pppd file gosuncn_options connect "chat -v -f $(pwd)/gosuncn_ppp_dialer"`,作用是调用ppp工具,联动后续配置和拨号流程。
- PPP参数脚本(gosuncn_options):指定通信端口为`/dev/ttyUSB2`(联通、移动模块常用,电信模块对应`/dev/ttyUSB0`),波特率115200,同时配置免认证、自动设默认路由、自动获取DNS,还要填写任意的用户名和密码。
- AT拨号脚本(gosuncn_ppp_dialer):先设定超时和终止条件,接着发送AT指令配置APN,联通卡填3GNET、移动卡填CMNET、电信卡填CTNET,最后通过ATD99发起拨号,等待连接成功。
- 断开脚本(disconnect):内容为`!/bin/sh`和`killall pppd`,用于结束联网进程。
最后给脚本添加执行权限,运行`./ppp-on &`就能启动拨号。如果提示缺少`/var/run`或`/var/lock`目录,先创建这两个目录即可。
方式二:ECM模式上网(操作更简洁)
1. 切换模块到ECM模式
通过串口工具,向模块的`/dev/ttyUSB1`端口发送AT指令:`AT+ZSWITCH=L`,将模块切换至ECM模式,仅ME3630模块支持此操作。发送完成后重启开发板,系统会自动识别出`usb0`网卡。
2. 配置联网参数
先根据SIM卡运营商配置APN,比如联通卡发送指令:`echo -e "AT+CGDCONT=1,"IP","3GNET"" > /dev/ttyUSB1`。接着发起ECM连接,执行`echo -e "AT+ZECMCALL=1" > /dev/ttyUSB1`。然后启用`usb0`网卡,运行`ifconfigusb0 up`,再通过`udhcpc -i usb0`自动获取IP地址。
3. 网络连通性测试
完成上述配置后,执行`ping -c 4 www.baidu.com`测试网络。若出现DNS解析失败,编辑开发板的`/etc/resolv.conf`文件,添加一行`nameserver 114.114.114.114`,保存后就能正常解析域名。
五、常见故障排查
- 设备不识别:如果系统找不到ttyUSB设备,大概率是内核驱动没配置对,重点检查`option.c`文件中是否添加了对应模块的VID和PID,确认驱动能正常识别硬件。
- 拨号失败:提示NO CARRIER,常见原因是SIM卡没插稳、天线没接好,或者APN配置错误,逐个检查天线、SIM卡状态,并根据运营商核对APN参数。
- 无IP地址:多半是DHCP服务没运行,或者DNS配置有误,直接运行`udhcpc -i usb0`手动获取IP,同时检查`/etc/resolv.conf`里的DNS配置是否正确。
- 外网不通:可能是默认路由冲突,可先关闭其他网络接口(比如eth0),或者把系统烧写到EMMC中,确保网络配置不冲突。
六、关键总结
EC20和ME3630这两款MiniPCIe接口的4G模块,都能借助USB协议在Linux系统里实现4G联网。其中PPP拨号适配性强,适合老旧系统,但配置步骤多;ECM模式配置简单,操作体验和以太网类似,优先推荐。整个实验要想成功,必须确保四点:内核驱动正确、APN参数准确、天线和SIM卡正常,且SIM卡处于激活状态。