|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
前面的章节中学习了如何使用有线网络或者使用 wifi,但是使用无线网络或者 wifi 有许多环境限制,这种时候就可以使用 4G 模块来上网。在本章中学习一下如何使用 4G 模块实现上网功能。, i& b& ?( u+ C- p' q" ?! s
56.1 4G 网络连接
/ w3 h6 C1 v( D对于嵌入式 Linux 而言,4G 网络连接是一个比较容易实现的功能,大多数的 4G 模块接口都是 MiniPCIE接口,但是深入了解一下就会发现,4G 模块的通信接口都是 USB,所以 4G 模块的驱动就是 USB 驱动,只要 USB 驱动正常,4G 模块在硬件上就能正常通信。下面看一下 4G 模块的硬件原理图:
' n1 c2 J& W! ]: n7 T( ? ( u( o4 n- y( y% }) C' c" N, L, a# A
1 D# w! r, Y7 ~1 v2 o
在原理图中,U25 是 4G 模块的 MiniPCIE 接口,然后通信引脚会接到 U15 的 HUB 芯片上,所以 4G 模块会被识别成 USB 设备,CON5 是 SIM 卡接口,在使用 4G 模块时,需要先插入 SIM 卡。在 i.MX6UL 终结者开发板上使用的 EC20 4G 模块,如图 56.1.3 所示:% a3 G9 t! Y& T8 o6 R9 n
6 E* U* S4 z9 g) F
56.2 EC20 4G 模块配置
1 j1 g% v" g- V0 m, ?# j0 s56.2.1 添加 USB 设备信息
( A- G# L7 f5 i# l6 s& o# Q2 p2 S要使用 EC20 4G 模块首先需要在 Linux 内核中添加 EC20 的 USB 信息,这样内核启动后,才能正确识别
2 f# r- f0 R. d+ i6 b0 nEC20 4G 模块。打开 Linux 内核下的 drivers/usb/serial/option.c 文件,添加如下信息:6 j" _9 L, O9 K: {% [- F' g2 R- T" C
1809 /* add support EC220 4G Module */
, p0 f" T$ u" T+ L: A0 `# |5 o) h1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */' K( @/ ]3 b5 a: b9 ]
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */6 c# p- L, @ ~) R6 E J
1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
# d9 O h' V0 B5 ]8 T) d1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
* M4 v) q' D+ g% C) J1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
! u: j+ u9 n" c1815 /* end add */
0 m: K# M% f; r) [, O8 L- a其中第 1813 行是 EC20 4G 模块的 USB 信息。
1 A8 c+ Y) J1 x! \56.2.2 Linux 内核配置
. n9 `6 L5 @1 ^$ n8 x2 B i; Z添加完 EC20 4G 模块的 USB 信息后,需要修改 Linux 内核配置来支持 USBNET 功能。具体配置如下:; S% w R& g) i. h1 _8 X. O
Device Drivers --->Network device support --->
' d% {$ i/ S% X) T7 ?/ v1 L0 y<*> USB Network Adapters --->
' K8 e( ^3 a9 Q<*> Multi-purpose USB Networking Framework
2 ?0 q! ]+ ~% k配置如图 56.2.2.1 所示:& a4 W" D& c- Y9 E" a; m
3 p3 k( K3 `/ e) ?* b% h6 M, x- l/ f# [
接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:
. T* @( c% F8 l% d) LDevice Drivers --->USB support --->
$ ?. |- `3 F/ z/ b<*> USB Serial Converter support --->
, r; d1 j5 e0 W* [<*> USB driver for GSM and CDMA modems
+ Z. n$ o' E. g3 ?4 J配置如图 56.2.2.2 所示:
S! W/ r2 T) C![]()
: ?( Q0 R& f6 k* b! K% Z& u然后配置 ppp,配置路径如下:
+ X& M7 |- c& V- I6 p% @Device Drivers --->Network device support --->
: H5 y! q9 C |9 J<*> PPP (point-to-point protocol) support
9 D$ @/ Y. N( p5 h/ T! G2 {<*> PPP BSD-Compress compression6 v: |- ?. i- U4 ?
<*> PPP Deflate compressionPPP filtering
) b& X% J3 g) L<*> PPP MPPE compression (encryption)PPP multilink support
7 w5 e$ v" h. L, E<*> PPP over Ethernet* h: b: E9 l& O; H
<*> PPP support for async serial ports
' b8 G% L9 _2 h' c' R8 e4 P<*> PPP support for sync tty ports. y2 d* @6 D0 }4 T. u6 }
配置如图 56.2.2.3 所示:
1 ~0 W5 }, O$ M, u7 Y! ~$ d; J4 e % j+ Y; y. `' Y) u
配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图56.2.2.4 信息打印:2 _% F' @. V; [0 X4 @
![]()
6 p$ a' W2 Q8 J4 h可以看出 EC20 4G 模块识别成功,并且虚拟出 5 个 USB 设备,分别为 ttyUSB0~ttyUSB4。- P6 J! f; W/ o# K2 C' m( F
56.3 EC20 4G 模块联网测试
1 J# W( [# d/ [56.3.1 PPP 软件包编译
0 S6 A$ T/ y9 Z t" n2 a5 c& C7 d首先拷贝 ppp-2.4.4.tar.gz 到 Ubuntu 下,然后执行下面的命令解压:
/ N/ F8 y, _& @6 n$ \tar -xvf ppp-2.4.4.tar.gz- \0 s" E8 ?6 o& c; [
解压完成得到 ppp-2.4.4 目录,进入 ppp-2.4.4 目录如图 56.3.1.1 所示:
1 u: S6 }2 d& k+ r! A1 Z* g) t![]()
( Z4 j7 E3 V, {, F使用 configure 进行配置,命令如下:
4 k, \0 P/ v! u5 e+ O% R/ w- r./configure
+ v% E( k2 t$ X结果如图 56.3.1.2 所示:
, }0 M0 D! }8 i; u 5 |+ b% S$ n3 \, E- N1 U- h
配置完成后,使用下面的命令进行编译:
" L$ _% f% ~0 p% X1 ]/ B0 Omake CC=ARM-linux-gnueabihf-gcc
: d9 _, m1 T9 Z' F* [3 ]“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板 Linux 内核使用同一个编译器。+ ^ v/ e( h! m, h7 y
编译完成如图 56.3.1.3 所示:3 u3 W4 \3 z: ~7 i3 Z3 |) `. F, i
" I ^) r+ D: |: Z2 f7 ?
编译完成后,分别在 chat、pppd、pppdump、pppstats 四个目录下生成 chat、pppd、pppdump、pppstats可执行文件,用于后面的 4G 模块联网测试。
5 W7 U/ h5 @" w' j1 v: f56.3.2 EC20 4G 模块联网测试
" k" q- {7 q& \, ^' O, ]首先安装好 EC20 4G 模块、天线和 SIM 卡,如图 56.3.2.1 所示:' `0 Y* T, Y P
0 b+ I4 }7 X8 v4 C
开发板准备好后启动 Linux 系统,待系统启动后,进入/etc 目录,然后创建 ppp 目录,具体命令如下:
: [* T# C2 a9 t: s0 y# u; jcd /etc //进入 etc 目录: ]; m' P! ^! ]3 r0 ]& D
mkdir ppp //创建 ppp 目录) q9 r: e9 x3 z0 Y7 K
目录创建完后,使用 U 盘将上一节编译的 chat、pppd、pppdump、pppstats 四个可执行文件拷贝到/etc/ppp目录下,如图 56.3.2.2 所示:% q& U4 h# D$ l" X5 C" s; Y8 Y% J
2 w _# S' O6 J& s7 R* F9 k& ` Z
然后在/etc/ppp 目录下创建 pap-secrets 文件,使用下面命令:& V6 C1 a1 S" [ }
touch pap-secrets //创建 pap-secrets 文件
8 y4 s+ V% H7 Z9 ], D! Evi pap-secrets //打开 pap-secrets 文件! G8 Z! Q- s& r. e W8 X
输入如下内容:% g9 N; j) r* w+ ^
# Secrets for authentication using PAP
- H2 {7 Y$ ~! @! }# client server secret IP addresses. b. _) n$ p& W9 O
card * card *
3 |! y* ?5 |3 {8 B, H在 4G 信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是 card,密码是 card。
: N" \4 o! V2 W' [7 k2 m然后创建新文件夹 peers,命令“mkdir peers”。
" y6 z1 M$ T. Z进入 peers 文件夹,创建 wcdma 文件,命令如下:
$ @4 _* W6 a& E: \0 [# P( u) ztouch wcdma' @8 L4 L( X! f ?- P, O/ C* }
vi wcdma
5 F, ~/ j' v, _% z Q6 [" d输入如下内容:9 |9 R$ T& k, L
# /etc/ppp/peers/wcdma
$ a/ E4 K6 j7 ?1 g4 p6 `# This is pppd script for China liantong
9 W5 `& i% @2 x# I4 R, C# Usage: root>pppd call wcdma& v+ \5 Z8 M+ v
hide-password- C; r- S5 ?" f* e
noauth
; K, X c+ W% l5 ]3 S' Gconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
: V0 H: @0 J2 Q% }% ]2 J* Fdisconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'' \* K/ ]5 T1 F
debug
# W4 {8 o+ y5 m/dev/ttyUSB2* l( V0 e7 q! O9 f9 t7 V
115200! K+ m( p) }" ?3 T3 J) G# Q8 t: S1 p
defaultroute5 W \' w$ G2 \' Y2 L9 f
noipdefault
6 o; g" Z) i" Q3 ^& B, `novj
, M& \$ q) d5 N' {7 Anovjccomp
& [ r( ^8 j' R0 l1 Vnoccp
+ G, Y2 u3 `8 Z8 R, {ipcp-accept-local) O" S* m9 E8 _+ w
ipcp-accept-remote' q/ p4 |* d8 c' X4 s1 R, x6 o& @5 a
local
5 d" s* @. |, \6 B3 B/ l: L6 P: Jlock
5 N! a" |8 W% y) M% fdump* G) H, O; k3 n6 ]+ U" S) U# l8 e
nodetach, m2 b$ X# F& F) i/ Q
user "card"/ X: o$ I2 z& h& U$ i
password "card"
6 W5 f9 m$ G8 g. ?crtscts$ k. v( t/ _ \& Y. m6 `
remotename 3gppp
1 U( B) e3 d/ b" o6 X+ yipparam 3gppp- t8 W/ \& I3 w) K5 `* c" U4 q [( B
usepeerdns
+ ~ x, q6 P2 G( S4 S+ L需要注意的是使用/dev/ttyUSB2 设备节点文件。# j7 S8 C. W$ x; J5 z# n K# D( A
“user "card"”和“password "card"”对应了 pap-secrets 文件中的用户名和密码。
' t6 s, Q- q2 f6 Q3 b* i创建 wcdma-chat-connect 文件:$ x# e5 \' X/ {* V' v
touch wcdma-chat-connect
/ v- {; E$ d' O: e. ~5 Fvi wcdma-chat-connect
/ o! V; S/ f7 t( X% F内容如下:9 M) q" B0 x' Y8 x; f. p
ABORT "BUSY"0 I' h/ Q( |! C
ABORT "NO CARRIER"/ ~ {4 a4 a2 |. A+ |9 ]$ k
ABORT "NO DIALTONE"
" @4 R _$ k2 e9 J& n1 l' |* ZABORT "ERROR") @: x7 c; M. H0 z6 [7 ?5 ~7 ]
ABORT "NO ANSWER"
( Z; k4 }( Z# |0 |- P, RTIMEOUT 120& z9 M& Q0 V( c9 W/ v
"" AT
+ P. C' V+ V; z6 A) OOK \rATZ) w' V! r& N' t, r' W
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0* H' Z3 @' O( C( z
OK-AT-OK ATDT*99#: S) f+ t( U( D
CONNECT \d\c) ]# k$ h! x. C' K
在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
6 Z6 `$ `' c3 M2 H: i) K2 UOK-AT-OK ATDT*99#7 Q& k# }. F0 M2 X6 g
这两句话会根据移动联通或者是电信而变化,这里用的是移动 4G。
, i1 y# j9 m8 J2 I C, C: }% n创建 wcdma-chat-disconnect 文件:
3 m& H5 L0 _7 l% B/ |' Y0 Stouch wcdma-chat-disconnect4 R1 I7 A3 x6 O+ d" n1 }
vi wcdma-chat-disconnect% W/ Y6 @8 V/ D U3 s3 ~6 o
内容如下:, v% @# ~/ y3 |4 ?% P0 A
ABORT "ERROR"0 ~, `1 C1 i1 @- M. U3 y
ABORT "NO DIALTONE"
" I, _- i; M. `( \# tSAY "INSending break to the modem\n"/ T" J1 H* x+ H$ H2 u5 `
""\k"
4 E: H6 w% n' z. D, Q& x4 x""+++ATH"
) _2 O/ H9 y4 u7 Y/ F" T2 kSAY "\nGood bye\n"& X9 x$ i# l' ` E5 u5 y- a
所需文件创建完成后,就可以进行联网测试了。
# |- `# o1 I$ I首先关闭 eth0 设备,因为和 EC20 4G 模块有冲突,同时只能使用一个设备。命令如下:
! H& h+ ]4 H2 U, w7 Hifconfig eth0 down
0 ~9 |6 E! Y/ r0 n Z然后在/etc/ppp 目录下输入指令:8 h- ~6 D6 \1 n2 B
./pppd call wcdma &" B, K) w Y8 {. N
结果如图 56.3.2.3 所示:4 V# u" l9 V$ C. X7 o
![]()
' n# H, e9 ]0 Q% h, K0 @上图表示联网成功后的 IP 地址为 10.47.135.182,使用 ifconfig 命令查看结果如图 56.3.2.4:
* C6 _. ?+ s! M, d r+ f7 p# H 1 O9 b- B0 ?4 M: H8 T8 [
这时使用 ping 命令查看能够 ping 通外网,命令如下:2 v6 w( }4 A) c! Z- E- Z
ping 202.108.22.5 -c 4
: Q; O4 e* h( w) ~2 s# y& ~! X: H“-c”选项指定 ping 网络的次数。“202.108.22.5”是百度的 IP 地址,结果如图 56.3.2.5:
1 o8 o0 S+ ^8 I; ~ & V5 k W. S. x) X2 J4 |
发现不能 ping 通外网,愿意是因为 DNS 没有设置对,在 etc 下有一个文件 resolv.conf 。这个文件是用来放 DNS 的。就是这个里面的域名没有设置对。然而在 eth0 的运行脚本里强制性的把这个文件复制为了192.168.1.1 。这就造成即便在这里文件里设置上正确的 DNS,再开机后也会发现这个文件里已经是192.168.1.1 了。这是因为 eth0,是开机自启动的。
t+ r7 _* K; w4 c我们在/etc 目录下新建一个文件 resolv.conf_back:
- H/ ~+ t6 \) S9 Mtouch resolv.conf_back0 i6 ^- F, _$ F1 z6 D9 `
vi resolv.conf_back: N/ l1 f4 T: B. \) `9 \0 _
输入如下内容:
* [5 B9 A% O _5 }' W( Q8 g( qnameserver 202.99.160.68
" g7 e: l: P! v' Hnameserver 221.130.33.525 G) c: `& h/ `
nameserver 221.130.33.60! ?( F+ X3 |! S0 m8 `6 ^
nameserver 192.168.1.1
( m; V% `, d; A& T8 a2 g然后在新建一个脚本文件 ppp0:
' U, k6 Z9 E8 |8 h% ]7 J0 jtouch ppp0
& z, z. y4 `( yvi ppp08 m' e$ M6 `9 c7 b: B
输入如下内容:
; b0 ?$ r3 L0 \- o#!/bin/sh, G% p+ W$ E* J% _9 a& S4 x
ifconfig eth0 down
/ X( p6 m$ }" v0 c3 W% Xcp /etc/resolv.conf_back /etc/resolv.conf
0 K' V. b: Q# s3 r1 j/etc/ppp/pppd call wcdma&0 }) P# d1 @, j- p
修改 ppp0 文件的执行权限:6 w* R$ i6 P# L! }7 g
chmod 777 ppp0
) ?; b0 [7 J! f1 L" e, K b这里第一步是将 eth0 关掉,第二步将我们的 DNS 文件覆盖到 resolv.conf 上,第三步运行。然后重新开机,执行 ppp0 脚本,命令如下:$ I3 i$ V1 t( t( Y
/etc/ppp0
; k$ B9 o# \+ p* R脚本执行成功后,重新使用 ping 命令,结果如图 56.3.2.6 所示:% M/ v2 {4 s. M; R* t
' |+ D1 u8 _$ l2 a
图片显示可以正常 ping 通百度的 IP 地址。至此 EC20 4G 模块就可以正常使用了。
6 g1 w' t$ Y2 D m# u% n4 h9 A' b' Y
![]()
& y! n) N" e; w7 y |
|