一、 4G 网络连接简介
4G 模块原理图
实物图
二、ME3630 4G 模块驱动修改
1、添加 USB 设备信息
打开 Linux 源码的 drivers/usb/serial/option.c 文件,找到 option_ids 数组,然后在里面添加 ME3630 的 PID 和 VID, 要添加的内容如下:
2、添加 ECM 支持程序
ME3630 支持 ECM 接口,可以通过 ECM 接口轻松联网,修改 drivers/usb/serial/option.c 文件里面的 option_probe 函数。找到此函数,然后在里面输入如下内容:
3、配置 Linux 内核
我们需要配置 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
继续配置 Linux 内核,使能 USB 的 CDC ACM 模式,配置路径如下:
-> Device Drivers
-> [*] USB support
-> <*> Support for Host-side USB
-> <*> USB Modem (CDC ACM) support
关于 Linux 内核的配置就到此为止,编译一下 Linux 内核,然后使用新的 zImage 启动开发板。如果 ME3630 已经插上的话,系统启动以后就会输出如图 所示的信息:
三、 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
2、移植 pppd 软件
在移植之前先删除掉/usr/sbin/chat 这个软件!
我们使用Busybox制作根文件系统的时候会生成/usr/sbin/chat这个软件,我们一会移植pppd的时候也会编译出 chat 软件。因此需要将根文件系统中原来的/usr/sbin/chat 软件删除掉,否则的话我们移植的 chat 软件工作将会出问题!
进入到 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 移植成功
3、ppp 上网测试
在使用 pppd 进行拨号上网之前需要先创建 4 个文件,这个 4 个文件必须放到同一个目录下。在开发板根文件系统下创建/etc/gosuncn 目录,进入到刚刚创建的/etc/gosuncn 目录下,然后新建一个名为“ppp-on”的 shell 脚本文件,在 ppp-on 文件里面输入如下所示内容:
#!/bin/sh
clear
OPTION_FILE="gosuncn_options"
DIALER_SCRIPT=$(pwd)/gosuncn_ppp_dialer
exec pppd file $OPTION_FILE connect "chat -v -f ${DIALER_SCRIPT}"
再新建一个名为“gosuncn_options”的文件,在文件里面输入如下所示内容:
/dev/ttyUSB2 //是联通或移动的卡就是用 ttyUSB2,如果是电信的卡就是用 ttyUSB0
115200
crtscts
modem
persist
lock
noauth
noipdefault
debug
nodetach
user Anyname
password Anypassword
ipcp-accept-local
ipcp-accept-remote
defaultroute
usepeerdns
noccp
nobsdcomp
novj
dump
第 11~12 行,这两行内容和所使用的卡有关,如果是联通或者移动的卡就按照上面的写,如果是电信的卡,要改为如下所示内容:
user card
password card
再新建一个名为“gosuncn_ppp_dialer”的文件,输入如下所示内容:
ABORT "NO CARRIER"
ABORT "ERROR"
TIMEOUT 120
"" ATE
SAY "ATE"
ECHO ON
OK ATH
OK ATP
OK AT+CGDCONT=1,\"IP\",\"3GNET\"
OK ATD*99#
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 脚本,输入如下所示内容:
#!/bin/sh
killall pppd
这四个文件编写完成以后要给予 ppp-on 和 disconnect 这两个文件可执行权限,命令如下:
chmod 777 ppp-on disconnect
完成以后输入如下命令连接 4G 网络:
./ppp-on &
在 ME3630 连接 4G 网络的过程中,可能会出现如图所示的错误提示:
如果没有的话就手动创建这两个文件夹,命令如下:
mkdir /var/run //创建/var/run 文件夹
mkdir /var/lock //创建/var/lock 文件夹
完成以后重新输入“./pppd-on &
”命令连接 4G 网络
4G 网络测试需要关闭其他网卡,否则的话网络测试可能有问题,但是我们现在是通过网络启动的系统,并且通过 NFS 挂载的根文件系统,因此我们没法关闭其他的网卡,比如 eth0。为了解决这个问题,我们只能将 uboot、Linux kernel、.dtb 设备树和根文件系统都烧写到板子的
EMMC 或 NAND 上,然后直接启动 EMMC 或 NAND 上的系统即可,这样就不需要其他网卡工作了。
4、ME3630 4G 模块 ECM 联网测试
对于支持 ECM 接口的模块可以直接通过 ECM 上网,ME3630 模块支持 ECM 接口,重启开发板,输入“ifconfig -a”命令可以看到有一个名为“usb0”的网卡。
我们需要使用 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
等待连接成功,连接成功以后会输出如下图所示信息:
连接成功以后打开 usb0 网卡,命令如下:
ifconfig usb0 up //打开 usb0 网卡
usb0 网卡打开以后输入如下命令获取 IP 地址:
udhcpc -i usb0
IP 地址获取过程如下图所示:
从上图可以看出,usb0 网卡获取到的 IP 地址为 10.164.232.36,然后 ping 一下百度官网,如果能 ping 通就说明 ME3630 的 ECM 接口联网成功。如果提示“bad address ‘www.baidu.com’”,那么请检查一下 DNS 服务器地址设置是否正确,打开/etc/resolv.conf 文件,然后加入“nameserver 114.114.114.114”即可。