iMX6ULL EC20 4G连网
我移植的板子是讯为的TERMINATOR_V1.1开发板,参考板为官方 i.MX6ULL EVK开发板。
1. 介绍
EC20是移远一款带有GPS功能的LTE模块支持4G上网,本文将利用官方提供linux-ppp-scripts_V1.2.zip包实现ppp拨号上网,更多详细的指令操作细节、参数、示例可参考官网提供的手册:Quectel_EC20_GNSS_AT_Commands_Manual_V1.1.pdf。
2. 配置Linux内核
因为我使用的内核已经支持了EC20,所以这里无需修改内核代码。如果自己使用的内核不支持EC20只需要修改drivers/usb/serial/option.c文件,添加EC20设备信息即可。接下来只需要配置内核。
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
<*> USB Network Adapters --->
<*> Multi-purpose USB Networking Framework
[*] USB support --->
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems
3. 配置Buildroot
使用ppp拨号上网需要pppd工具包,直接从Buildroot中添加这个工具。
Target packages --->
Networking applications --->
[*] pppd
[ ] filtering
[ ] radius
[*] overwrite /etc/resolv.conf
4. 测试
将修改好的内核和根文件系统下载到开发板,并启动开发板。在根目录的etc目录中新建ppp文件夹,并在ppp目录中新建 peers文件夹。解压linux-ppp-scripts_V1.2.zip包,将ip-up文件复制到ppp目录中并添加可执行权限,再将quectel-chat-connect、quectel-chat-disconnect、quectel-ppp-kill、quectel-ppp四个文件复制到peers目录中。需要将quectel-ppp文件中/dev/ttyUSB3改为/dev/ttyUSB2,并将quectel-chat-connect文件中OK ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2
一行注释掉(具体原因不清楚,可能是因为我的EC20不是全功能版)。
ppp
├── ip-up
└── peers
├── quectel-chat-connect
├── quectel-chat-disconnect
├── quectel-ppp
└── quectel-ppp-kill
执行pppd call quectel-ppp &
命令,ifconfig可以看到出现了一个ppp0的网卡,使用sh /etc/ppp/peers/quectel-ppp-kill
断开连接。
root@imx6ull:~# pppd call quectel-ppp &
pppd options in effect:
debug # (from /etc/ppp/peers/quectel-ppp)
nodetach # (from /etc/ppp/peers/quectel-ppp)
dump # (from /etc/ppp/peers/quectel-ppp)
noauth # (from /etc/ppp/peers/quectel-ppp)
user test # (from /etc/ppp/peers/quectel-ppp)
password ?????? # (from /etc/ppp/peers/quectel-ppp)
remotename 3gppp # (from /etc/ppp/peers/quectel-ppp)
/dev/ttyUSB2 # (from /etc/ppp/peers/quectel-ppp)
115200 # (from /etc/ppp/peers/quectel-ppp)
lock # (from /etc/ppp/peers/quectel-ppp)
connect chat -s -v -f /etc/ppp/peers/quectel-chat-connect # (from /etc/ppp/peers/quectel-ppp)
disconnect chat -s -v -f /etc/ppp/peers/quectel-chat-disconnect # (from /etc/ppp/peers/quectel-ppp)
nocrtscts # (from /etc/ppp/peers/quectel-ppp)
modem # (from /etc/ppp/peers/quectel-ppp)
hide-password # (from /etc/ppp/peers/quectel-ppp)
novj # (from /etc/ppp/peers/quectel-ppp)
novjccomp # (from /etc/ppp/peers/quectel-ppp)
ipcp-accept-local # (from /etc/ppp/peers/quectel-ppp)
ipcp-accept-remote # (from /etc/ppp/peers/quectel-ppp)
ipparam 3gppp # (from /etc/ppp/peers/quectel-ppp)
noipdefault # (from /etc/ppp/peers/quectel-ppp)
ipcp-max-failure 30 # (from /etc/ppp/peers/quectel-ppp)
defaultroute # (from /etc/ppp/peers/quectel-ppp)
usepeerdns # (from /etc/ppp/peers/quectel-ppp)
noccp # (from /etc/ppp/peers/quectel-ppp)
abort on (BUSY)
abort on (NO CARRIER)
abort on (NO DIALTONE)
abort on (ERROR)
abort on (NO ANSWER)
timeout set to 30 seconds
send (AT^M)
expect (OK)
^M
OK
-- got it
send (ATE0^M)
expect (OK)
^M
^M
OK
-- got it
send (AT+CGDCONT=1,"IP","3gnet",,0,0^M)
expect (OK)
^M
^M
OK
-- got it
send (ATD*99#^M)
expect (CONNECT)
^M
^M
CONNECT
-- got it
Script chat -s -v -f /etc/ppp/peers/quectel-chat-connect finished (pid 456), status = 0x0
Serial connection established.
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB2
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x5c165b7> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x12 <asyncmap 0x0> <auth chap MD5> <magic 0xe617ceb8> <pcomp> <accomp>]
sent [LCP ConfAck id=0x12 <asyncmap 0x0> <auth chap MD5> <magic 0xe617ceb8> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x5c165b7> <pcomp> <accomp>]
rcvd [LCP DiscReq id=0x13 magic=0xe617ceb8]
rcvd [CHAP Challenge id=0x1 <07c88a9e69c25977a34113740e059ecd>, name = "UMTS_CHAP_SRVR"]
sent [CHAP Response id=0x1 <636b4c1439fdfce10be9c185e81f6b49>, name = "test"]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
rcvd [IPCP ConfReq id=0x12]
sent [IPCP ConfNak id=0x12 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <addr 10.113.60.94> <ms-dns1 211.137.130.18> <ms-dns2 211.137.130.2>]
sent [IPCP ConfReq id=0x2 <addr 10.113.60.94> <ms-dns1 211.137.130.18> <ms-dns2 211.137.130.2>]
rcvd [IPCP ConfReq id=0x13]
sent [IPCP ConfAck id=0x13]
rcvd [IPCP ConfAck id=0x2 <addr 10.113.60.94> <ms-dns1 211.137.130.18> <ms-dns2 211.137.130.2>]
Could not determine remote IP address: defaulting to 10.64.64.64
not replacing default route to wlan0 [192.168.0.1]
local IP address 10.113.60.94
remote IP address 10.64.64.64
primary DNS address 211.137.130.18
secondary DNS address 211.137.130.2
Script /etc/ppp/ip-up started (pid 457)
Script /etc/ppp/ip-up finished (pid 457), status = 0x0
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
sent [IPV6CP ConfReq id=0x1 <addr fe80::1025:52f0:02b9:2325>]
IPV6CP: timeout sending Config-Requests
root@imx6ull:~# ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:32
can1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:33
eth0 Link encap:Ethernet HWaddr B2:D1:FB:30:9E:0C
inet addr:192.168.0.75 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::b0d1:fbff:fe30:9e0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:222 errors:0 dropped:0 overruns:0 frame:0
TX packets:918 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:39130 (38.2 KiB) TX bytes:87879 (85.8 KiB)
eth1 Link encap:Ethernet HWaddr C6:59:22:F7:61:C4
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.113.60.94 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:52 (52.0 B) TX bytes:198 (198.0 B)
wlan0 Link encap:Ethernet HWaddr 34:20:03:3E:67:0B
inet addr:192.168.0.19 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::3620:3ff:fe3e:670b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:438 errors:0 dropped:0 overruns:0 frame:0
TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:51126 (49.9 KiB) TX bytes:3012 (2.9 KiB)
root@imx6ull:~# sh /etc/ppp/peers/quectel-ppp-kill
Terminating on signal 15
Connect time 3.4 minutes.
Sent 126 bytes, received 0 bytes.
sent [LCP TermReq id=0x2 "User request"]
rcvd [LCP TermAck id=0x2]
Connection terminated.
abort on (ERROR)
abort on (NO DIALTONE)
Sending break to the modem
send (+++^M)
send (+++^M)
send (+++^M)
Goodbay
Script chat -s -v -f /etc/ppp/peers/quectel-chat-disconnect finished (pid 469), status = 0x0
Serial link disconnected.
killall: pppd: no process killed
killall: pppd: no process killed
[1]+ Done(5) pppd call quectel-ppp
root@imx6ull:~#
设置开机启动,在/etc/network/interfaces文件中加入以下几行。
auto ppp0
iface ppp0 inet manual
pre-up pppd call quectel-ppp > /dev/null &
重启开发板,使用ppp0网卡ping百度(ping通后可以看到板子上的4G模块LED闪动变快),联网成功。
移植源码获取:
git clone https://github.com/Sonboy97/linux.git -b imx
版本:b0b488843d7ff3ae06dae6e95e29f4064abae1c0
git clone https://github.com/Sonboy97/buildroot.git -b imx
版本:29e18d881c91b8f6080e93cc8158fa08de2d7d78
git clone https://github.com/Sonboy97/learning.git -b imx6ull_topeet
版本:be31a402800808f7c5cf76085a78656b33da6d85