迅为IMX6ull开发板Linux系统EC20 4G模块移植
发布时间:2020-11-16 10:46
发布者:就是塔塔
1.4G网络连接 对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的通信接口都是USB,所以4G模块的驱动就是USB驱动,只要USB驱动正常,4G模块在硬件上就能正常通信。下面看一下4G模块的硬件原理图: 在原理图中,U25是4G模块的MiniPCIE接口,然后通信引脚会接到U15的HUB芯片上,所以4G模块会被识别成USB设备,CON5是SIM卡接口,在使用4G模块时,需要先插入SIM卡。在i.MX6UL终结者开发板上使用的EC20 4G模块,如图 2. EC20 4G模块配置 2.1. 添加USB设备信息 要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G模块。打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息: 1809 /* add support EC220 4G Module */ 1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */ 1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */ 1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */ 1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */ 1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */ 1815 /* end add */其中第1813行是EC20 4G模块的USB信息。 2.2. Linux内核配置 添加完EC20 4G模块的USB信息后,需要修改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 配置如图 然后配置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 tty ports配置如图 配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图 2.2.4信息打印: 可以看出EC20 4G模块识别成功,并且虚拟出5个USB设备,分别为ttyUSB0~ttyUSB4。 3. EC20 4G模块联网测试 3.1. PPP软件包编译 首先拷贝ppp-2.4.4.tar.gz到Ubuntu下,然后执行下面的命令解压: tar -xvf ppp-2.4.4.tar.gz 解压完成得到ppp-2.4.4目录,进入ppp-2.4.4目录如图 使用configure进行配置,命令如下:./configure结果如图 配置完成后,使用下面的命令进行编译: make CC=arm-linux-gnueabihf-gcc “CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板Linux内核使用同一个编译器。编译完成如图 编译完成后,分别在chat、pppd、pppdump、pppstats四个目录下生成chat、pppd、pppdump、pppstats可执行文件,用于后面的4G模块联网测试。 3.2. EC20 4G模块联网测试 首先安装好EC20 4G模块、天线和SIM卡,如图 开发板准备好后启动Linux系统,待系统启动后,进入/etc目录,然后创建ppp目录,具体命令如下: cd /etc //进入etc目录 mkdir ppp //创建ppp目录 目录创建完后,使用U盘将上一节编译的chat、pppd、pppdump、pppstats四个可执行文件拷贝到/etc/ppp目录下,如图 : 然后在/etc/ppp目录下创建pap-secrets文件,使用下面命令: touch pap-secrets //创建pap-secrets文件vi pap-secrets //打开pap-secret 输入如下内容: # Secrets for authentication using PAP # client server secret IP addresses card * card * 在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是card,密码是card。 然后创建新文件夹peers,命令“mkdir peers”。 进入peers文件夹,创建wcdma文件,命令如下: touch wcdma vi wcdma 输入如下内容: # /etc/ppp/peers/wcdma # This is pppd script for China liantong # Usage: root>pppd call wcdma hide-password noauth connect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect' disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect' debug /dev/ttyUSB2 115200 defaultroute noipdefault novj novjccomp noccp ipcp-accept-local ipcp-accept-remote local lock dump nodetach user "card" password "card" crtscts remotename 3gppp ipparam 3gppp usepeerdns 需要注意的是使用/dev/ttyUSB2设备节点文件。 “user "card"”和“password "card"”对应了pap-secrets文件中的用户名和密码。 创建wcdma-chat-connect文件: touch wcdma-chat-connect vi wcdma-chat-connect 内容如下: ABORT "BUSY" ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER" TIMEOUT 120 "" AT OK \rATZ OK \rAT+CGDCONT=1,"IP","3gnet",,0,0 OK-AT-OK ATDT*99# CONNECT \d\c 在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0 OK-AT-OK ATDT*99# 这两句话会根据移动联通或者是电信而变化,这里用的是移动4G。 创建wcdma-chat-disconnect文件: touch wcdma-chat-disconnect vi wcdma-chat-disconnect 内容如下: ABORT "ERROR" ABORT "NO DIALTONE" SAY "INSending break to the modem\n" ""\k" ""+++ATH" SAY "\nGood bye\n" 所需文件创建完成后,就可以进行联网测试了。 首先关闭eth0设备,因为和EC20 4G模块有冲突,同时只能使用一个设备。命令如下: ifconfig eth0 down 然后在/etc/ppp目录下输入指令: ./pppd call wcdma & 结果如图 上图表示联网成功后的IP地址为10.47.135.182,使用ifconfig命令查看结果如图 这时使用ping命令查看能够ping通外网,命令如下: ping 202.108.22.5 -c 4 “-c”选项指定ping网络的次数。“202.108.22.5”是百度的IP地址,结果如图 : 发现不能ping通外网,愿意是因为DNS没有设置对,在etc下有一个文件resolv.conf 。这个文件是用来放DNS的。就是这个里面的域名没有设置对。然而在eth0的运行脚本里强制性的把这个文件复制为了192.168.1.1 。这就造成即便在这里文件里设置上正确的DNS,再开机后也会发现这个文件里已经是192.168.1.1了。这是因为eth0,是开机自启动的。 我们在/etc目录下新建一个文件resolv.conf_back:touch resolv.conf_back vi resolv.conf_back 输入如下内容: nameserver 202.99.160.68 nameserver 221.130.33.52 nameserver 221.130.33.60 nameserver 192.168.1.1 然后在新建一个脚本文件ppp0: touch ppp0 vi ppp0 输入如下内容: #!/bin/sh ifconfig eth0 down cp /etc/resolv.conf_back /etc/resolv.conf/etc/ppp/pppd call wcdma& 修改ppp0文件的执行权限: chmod 777 ppp0 这里第一步是将eth0关掉,第二步将我们的DNS文件覆盖到resolv.conf上,第三步运行。然后重新开机,执行ppp0脚本,命令如下: /etc/ppp0 脚本执行成功后,重新使用ping命令,结果如图: 图片显示可以正常ping通百度的IP地址。至此EC20 4G模块就可以正常使用了。 |
网友评论