EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1.4G网络连接
7 Q% m6 F4 d$ T1 ~* Y7 Y对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的通信接口都是USB,所以4G模块的驱动就是USB驱动,只要USB驱动正常,4G模块在硬件上就能正常通信。下面看一下4G模块的硬件原理图:
0 J2 N; S- b* |2 f( L/ V![]()
. |$ ^4 d: }& ~ r: w![]()
- E" u* N& n6 a* h8 D- n/ }: N在原理图中,U25是4G模块的MiniPCIE接口,然后通信引脚会接到U15的HUB芯片上,所以4G模块会被识别成USB设备,CON5是SIM卡接口,在使用4G模块时,需要先插入SIM卡。在i.MX6UL终结者开发板上使用的EC20 4G模块,如图 ![]()
X) k& E% _# Q# o2. EC20 4G模块配置& ?: R: ?/ m; J
2.1. 添加USB设备信息
; K% n) _$ M [6 n7 S6 P要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G模块。打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息:
" ?. d% ?( `, g- Z+ y1 y1809 /* add support EC220 4G Module */, @. t8 x6 P# S6 c4 ^
1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
) X' w7 C5 n% [1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */# [9 c" y6 ]. p* x7 y
1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */: K3 d, ` Q; J2 O2 j" |5 d
1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
- Z l6 c+ N& r0 ~1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
; X& v! \; F4 y. a+ \. b8 K1815 /* end add */其中第1813行是EC20 4G模块的USB信息。, n% R, c9 s/ P
" @" a, J; f' A& S! X; T4 w2.2. Linux内核配置
. }/ ~; ] l0 L; ~添加完EC20 4G模块的USB信息后,需要修改Linux 内核配置来支持USBNET功能。具体配置如下:
( m; |- I6 M- d; ^( `Device Drivers --->
3 y0 Y6 t6 g6 v; S2 n& ^Network device support --->
9 S/ L$ }' J+ _5 M2 I7 q<*> USB Network Adapters --->
) O# S" J# j% `<*> Multi-purpose USB Networking Framework配置如图
; c$ Y$ y9 t: |$ a: D/ H 2 L+ q# _# N$ o9 k! v
接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:
% E3 y9 p6 [" C+ S0 Z) Q5 YDevice Drivers --->$ T/ I2 v; A0 D3 _- S
USB support --->
, R6 p3 F9 _/ Z4 b" c, j<*> USB Serial Converter support --->
1 t9 ?1 R( `( m- C<*> USB driver for GSM and CDMA modems) T( f8 e/ j' s5 x0 \* T s
配置如图2 b, E t. P8 y
9 e& C5 v1 Q- u: N; J
然后配置ppp,配置路径如下:. ?2 m7 x [7 A, q# G- }( V
Device Drivers --->% Y! L( u8 N. t3 f( P$ I
Network device support --->7 W6 T; p6 _+ n1 g+ Q
<*> PPP (point-to-point protocol) support6 n" o4 D6 M# y M8 N
<*> PPP BSD-Compress compression& z; O3 @7 L9 b5 i" ^6 K- t
<*> PPP Deflate compression) _ r# X- L c7 @5 _3 x' D/ T
PPP filtering
! k% z0 d) D# t: r/ E<*> PPP MPPE compression (encryption)/ T+ C" o- v4 K! K. c3 r$ G! M
PPP multilink support( ?) B' T6 U0 Q8 R5 T5 [
<*> PPP over Ethernet8 T. m# ~$ a4 B$ w. q) l
<*> PPP support for async serial ports
% U+ R* H3 ^5 ~/ I( N K- F<*> PPP support for sync tty ports2 o6 r8 B5 z) d$ O9 y
tty ports配置如图
- r0 k7 R& Z2 i' w/ o) g: _![]()
7 |2 C- {" p2 b3 v+ [配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图 2.2.4信息打印: ![]()
. t( I2 m2 S; M8 D. ]1 a可以看出EC20 4G模块识别成功,并且虚拟出5个USB设备,分别为ttyUSB0~ttyUSB4。" J+ C# G" P0 z7 H# A1 s \- Q8 U0 w
3 |* O( |$ g: o% W+ N5 V! M H
3. EC20 4G模块联网测试$ D; o% Y" R( ?: }1 R4 e
3.1. PPP软件包编译
% W* V6 F' W& Q' s) s7 K首先拷贝ppp-2.4.4.tar.gz到Ubuntu下,然后执行下面的命令解压:
) |$ @: C9 N6 f) jtar -xvf ppp-2.4.4.tar.gz
) M. f9 e R( X- j0 E/ E8 u- M解压完成得到ppp-2.4.4目录,进入ppp-2.4.4目录如图$ b! F% Q5 |. D
![]()
- v1 t" I3 q9 o! R% s使用configure进行配置,命令如下:./configure结果如图: C+ b! Q4 k+ A3 N9 E
5 J( g }0 q4 D# c$ e2 R/ @
配置完成后,使用下面的命令进行编译:+ Z% p; C! V4 k: R& R' p6 M
make CC=ARM-linux-gnueabihf-gcc( z: \) n+ _' |# F' d
“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板Linux内核使用同一个编译器。编译完成如图. }6 _' d; p S0 j' N" X) [) T+ A
* } P) L3 {! G
编译完成后,分别在chat、pppd、pppdump、pppstats四个目录下生成chat、pppd、pppdump、pppstats可执行文件,用于后面的4G模块联网测试。7 F3 t; l- ?+ R4 o8 @
' j# r( J/ {& R# E4 k+ Z5 v
3.2. EC20 4G模块联网测试. d# ~' f( B5 y
首先安装好EC20 4G模块、天线和SIM卡,如图
% ]/ C" K/ H) F$ E 2 S& E4 i$ b/ I# H( X
开发板准备好后启动Linux系统,待系统启动后,进入/etc目录,然后创建ppp目录,具体命令如下:: G) ?5 u" t' n% g% r* e
cd /etc //进入etc目录3 h% ]% p0 s8 W0 T
mkdir ppp //创建ppp目录! f6 h( V V6 R7 @1 Y7 A0 u% F
目录创建完后,使用U盘将上一节编译的chat、pppd、pppdump、pppstats四个可执行文件拷贝到/etc/ppp目录下,如图 :1 d/ l% ]0 b' g( J
! M6 n8 c4 [ q/ S7 A* T; i
然后在/etc/ppp目录下创建pap-secrets文件,使用下面命令:0 J% S N3 R+ H' e& N: L2 W8 l
touch pap-secrets //创建pap-secrets文件vi pap-secrets //打开pap-secret2 f% g9 @6 D5 P4 N8 H
输入如下内容:
9 p( c# [4 p% i4 x# Secrets for authentication using PAP5 ~$ a3 \) ]1 F& t! c: T% }' w
# client server secret IP addresses
9 \5 ?6 M/ Q r/ J, p% ~( Rcard * card *4 R& z: o7 [* b
在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是card,密码是card。
) D- S1 \- _* p7 [8 U然后创建新文件夹peers,命令“mkdir peers”。( _5 h! p8 x" d, f1 f' ?
进入peers文件夹,创建wcdma文件,命令如下:% f9 ?2 J- _7 D O2 }' u0 f4 m& Q
touch wcdma
" U) ^' m& m! n& G B" q3 Cvi wcdma
; Y, p+ x( y: R- K输入如下内容:3 U& _: m& U$ t. K8 M( b. }9 r# @# u
# /etc/ppp/peers/wcdma
3 u5 M1 A: E" P7 S+ K# This is pppd script for China liantong
, a# b* o. I6 n! X! }# Usage: root>pppd call wcdma
R- Z" T) f) U* J9 w& W& p F8 h8 ]3 thide-password% S2 h& Q: q* y: [, Z
noauth
3 s0 u! t* K8 j% zconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'8 m* Z: H- @1 d
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
2 K) T8 ?" ?% k5 W$ P2 a, Jdebug
% d. `& O- Z" T% o; |/dev/ttyUSB2! m4 j4 O" r7 {' ?8 b; `
115200# W) x4 t7 s! m# h! [. @
defaultroute
: W: \4 j) M) S# j- b, b. |noipdefault- r; E5 ?; A1 V' ~
novj x' C6 V3 |& A1 C" `4 S% n
novjccomp! i$ `. o5 s( I5 e
noccp: s5 }: M" Q8 X
ipcp-accept-local
% Z5 @6 E6 b- E' Kipcp-accept-remote
8 o" e& W( i" _3 X7 W7 l8 h+ elocal
, {' o0 d7 n6 Y( E7 s$ Plock2 U' f* @6 v0 p5 C4 \; F
dump
' M2 ~+ k* L+ Q* Onodetach8 W+ l: B- R2 J: M9 o& R
user "card"
! y, I( P" X( J+ x1 Dpassword "card"6 n B+ E% C7 |( N7 O% O0 t( S+ L
crtscts
& j5 c& x( E/ E% tremotename 3gppp: R' A1 K; g+ S% P/ ~$ o
ipparam 3gppp3 C, h1 @4 r H- F# R0 R
usepeerdns
4 q: }7 \, P: G需要注意的是使用/dev/ttyUSB2设备节点文件。
; s% v" Z6 [" M“user "card"”和“password "card"”对应了pap-secrets文件中的用户名和密码。
/ |3 t N4 j* W7 r创建wcdma-chat-connect文件:: w) @) U+ H$ E1 H# }
touch wcdma-chat-connect
1 p3 g- V( _5 a& O( {vi wcdma-chat-connect
, R+ B+ N B, l6 l) Z" v内容如下:' E) n/ G) K* x- [9 [8 J
ABORT "BUSY"1 n. L7 {7 P9 [! c$ w
ABORT "NO CARRIER", D2 Y+ m, m! U9 n6 j0 Z/ `
ABORT "NO DIALTONE"
4 i; e6 x- @; L! @3 ^& ?- IABORT "ERROR"& Z9 ~# q3 E2 R, Z K
ABORT "NO ANSWER"6 w- c/ p: f P x
TIMEOUT 120
S6 N. f' W7 b"" AT
5 I" @& C* S& I$ m3 VOK \rATZ
3 l f$ w- i, ?: F7 AOK \rAT+CGDCONT=1,"IP","3gnet",,0,0
! p t" p. k1 |( WOK-AT-OK ATDT*99#6 a* L3 f; w; i/ |. h2 z+ k! I
CONNECT \d\c
8 ^4 W6 e6 b" c' J- W在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0- y' L& O( M3 Z: v' A6 Q/ o9 \- T; y6 E
OK-AT-OK ATDT*99#
, w7 I. L/ r2 p: ]" ~2 {这两句话会根据移动联通或者是电信而变化,这里用的是移动4G。
: l9 D& Q$ @# |6 U6 O+ X0 @' y, ]- l k/ j4 M" e
创建wcdma-chat-disconnect文件:
2 _3 T; M2 h( l$ `- etouch wcdma-chat-disconnect/ A5 y" U/ v/ R) j* o8 \, g# l
vi wcdma-chat-disconnect6 o: m" J \, A p% ?; E
内容如下:
2 e, v* K2 H4 w6 ?ABORT "ERROR"
) S7 d' c3 V% E- a. l5 VABORT "NO DIALTONE". E3 {; ]7 _! p. ^7 G
SAY "INSending break to the modem\n"
/ N. k R/ m5 v" v""\k"4 w ?, |! f* ]- c [6 N0 |
""+++ATH"
+ o8 p# b2 P, B* g9 B- {, U0 ZSAY "\nGood bye\n", F' l' v8 N! x7 F+ r0 V& `
所需文件创建完成后,就可以进行联网测试了。
! y% J# f) `# ?3 s6 P B! Q- N# @* h- B; `3 Q! d
首先关闭eth0设备,因为和EC20 4G模块有冲突,同时只能使用一个设备。命令如下:
, o6 G5 e; E& Z# T6 Difconfig eth0 down
3 F$ r$ F8 Z: \然后在/etc/ppp目录下输入指令:" k: b. q: Q$ V6 T
./pppd call wcdma &
! x) ^: f" x; a( ~0 E结果如图 ?& Q$ H$ E9 G6 T1 T
! @7 w) P+ l% J) ?' N
上图表示联网成功后的IP地址为10.47.135.182,使用ifconfig命令查看结果如图
5 `0 L' x3 X3 f9 { 0 g" U! H' W9 |& E6 }% W. P
这时使用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:
/ g; U0 a, `9 c9 v0 e a4 `& w, `touch resolv.conf_back
0 N9 ?# v! p. b7 p; r4 e: C% ]vi resolv.conf_back' Z" @( w/ q+ d. A% p
输入如下内容:3 _7 n& Y! d4 s/ o! v% s
nameserver 202.99.160.68
. x8 Y% J! `* p) I2 K! s% Knameserver 221.130.33.52
. E) Q2 X% \* g3 y2 R! wnameserver 221.130.33.608 x) s6 H! n' Q+ ?
nameserver 192.168.1.1
. {1 r2 Y: q9 J' ? e [5 [8 @然后在新建一个脚本文件ppp0:
N- P( J' N8 ztouch ppp0% ^$ S& a5 j& w& H
vi ppp0
* M4 W) A- Z% g/ v输入如下内容:
0 n$ \- ^% Y7 k/ {: ~1 d3 n0 d#!/bin/sh
. n8 h* j, n" M1 n+ V5 fifconfig eth0 down( ] l" f) D7 w7 [
cp /etc/resolv.conf_back
$ a6 ]3 ?4 w, m3 l! }" t/etc/resolv.conf/etc/ppp/pppd call wcdma&
; c; ^6 U9 j# D修改ppp0文件的执行权限:7 H0 {$ B: u' k& p6 H% Q
chmod 777 ppp06 U( V2 ^) G, W- z: g
这里第一步是将eth0关掉,第二步将我们的DNS文件覆盖到resolv.conf上,第三步运行。然后重新开机,执行ppp0脚本,命令如下:
$ {/ Q' d$ G3 o7 }; k+ _/etc/ppp0+ P5 A1 h! B9 e$ B# `! \* L4 V2 ?
脚本执行成功后,重新使用ping命令,结果如图:
$ M( ^" E. I1 a6 o3 \5 A ; c" z+ `) q1 _1 _" [ |( i
图片显示可以正常ping通百度的IP地址。至此EC20 4G模块就可以正常使用了。
? t3 ^& J8 ~; p& `+ `8 @![]()
$ a# C& i% ]' A+ w![]()
/ {1 W8 Q; D* B! n" w |