EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1.4G网络连接( u, O: ?# O+ U, i% \3 ]! Z
对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的通信接口都是USB,所以4G模块的驱动就是USB驱动,只要USB驱动正常,4G模块在硬件上就能正常通信。下面看一下4G模块的硬件原理图:
1 M& G9 }$ r( R9 Y& w2 D0 S0 @![]()
* V2 `7 X. U, G& N! a![]()
1 r, [/ I2 E; s# d1 B8 [在原理图中,U25是4G模块的MiniPCIE接口,然后通信引脚会接到U15的HUB芯片上,所以4G模块会被识别成USB设备,CON5是SIM卡接口,在使用4G模块时,需要先插入SIM卡。在i.MX6UL终结者开发板上使用的EC20 4G模块,如图 ![]()
; k6 G2 K9 v+ N# \2. EC20 4G模块配置
& F# c( w0 L$ X2.1. 添加USB设备信息" x% D' s$ G8 c$ y* U
要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G模块。打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息:
* o D$ F _4 P- z* U. m( {) [6 a3 h1809 /* add support EC220 4G Module */
: z) T% Z: ]0 [1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */) b$ [0 q# z. q- D4 u: z7 @
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
0 p# R {) o' }1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */ ]: E# E* b2 r7 e2 u+ }* R
1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */: _( i3 V8 d% ]! b
1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
/ j/ c3 z2 x7 I7 u( Q/ w1815 /* end add */其中第1813行是EC20 4G模块的USB信息。; i+ ^. G6 q1 P5 l/ l
7 I& F' k) Y" b8 j- L2.2. Linux内核配置
" X1 V0 I' T3 _( Q3 g& W4 N添加完EC20 4G模块的USB信息后,需要修改Linux 内核配置来支持USBNET功能。具体配置如下: G* k$ w6 C2 a0 H; l
Device Drivers --->! S9 s Q+ e7 X1 o0 {
Network device support --->
' T6 @6 L/ G/ R; @ Q, P<*> USB Network Adapters --->
' ]& I! g2 L% d4 K5 ]4 h: {. I: a<*> Multi-purpose USB Networking Framework配置如图" A" k- }7 H3 s( G
![]()
0 f1 j" ]) @8 F, K, W+ x5 [! V接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:# }+ J* o5 N, f. c" a
Device Drivers --->1 ]( B3 A1 z A2 e0 x; ^6 s8 K% z
USB support --->
& O% M1 ^* |+ }3 [4 r6 w<*> USB Serial Converter support --->/ q: _) O' ?1 x: O& Q
<*> USB driver for GSM and CDMA modems# H' s; A" {& x4 I8 t/ s: T6 _
配置如图
) x& T. N% E# f% Q; Q![]()
# H# o9 ^) J& a- R! H4 m8 B然后配置ppp,配置路径如下:
+ R' P1 O( ?# g8 h3 w- wDevice Drivers --->
: M! D* y# z; @) ~) t# N" aNetwork device support --->
@$ K" j- R- D& V6 S<*> PPP (point-to-point protocol) support7 R/ b, Z% e% @4 z& t' ]
<*> PPP BSD-Compress compression
H% C; Q X0 u<*> PPP Deflate compression+ K+ z; B4 o' H7 ~9 z( T7 p
PPP filtering% q' O( H- t4 z% ~; w
<*> PPP MPPE compression (encryption)
1 K {: I4 C3 {4 {$ |; cPPP multilink support
( Q! N0 U/ Z6 `' M ^<*> PPP over Ethernet
* Y6 `8 Q4 s, N; D& k# Q' Y, T<*> PPP support for async serial ports
1 b) M# s, b9 m0 n( X9 U6 V<*> PPP support for sync tty ports
9 J& \# a: W' ~4 G5 q; J% _tty ports配置如图
) V9 e7 U' j+ s, n / }5 V, ~- m) y7 n* W3 ?2 R
配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图 2.2.4信息打印: ![]()
. q: M& D% y' K) k7 g可以看出EC20 4G模块识别成功,并且虚拟出5个USB设备,分别为ttyUSB0~ttyUSB4。 E6 k5 n3 n9 I9 `. a9 j* I
) L& D9 K! x! P3. EC20 4G模块联网测试5 r. o' k9 C( N* P& q U
3.1. PPP软件包编译. @- F8 b9 d6 D5 Q& J+ X W# T% P
首先拷贝ppp-2.4.4.tar.gz到Ubuntu下,然后执行下面的命令解压:/ j% u- W) E- x" r0 p: b
tar -xvf ppp-2.4.4.tar.gz) j( S2 B0 ^/ K# F
解压完成得到ppp-2.4.4目录,进入ppp-2.4.4目录如图- Y6 f% V; k4 y9 W1 S' C& [9 e4 C8 e
; P( g1 ^9 z3 `5 o! ?
使用configure进行配置,命令如下:./configure结果如图
( d* i) r" b" R: g![]()
_7 Z2 q* u7 ]) Y Y. m5 P* R# @' j配置完成后,使用下面的命令进行编译:
' Y3 R. V5 X& e% h; I0 Gmake CC=ARM-linux-gnueabihf-gcc% I% D$ _$ K( h& G* n t( A
“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板Linux内核使用同一个编译器。编译完成如图
9 A% W1 f2 B) C( r ? [1 _" \, u/ o' p5 F- i3 ^
编译完成后,分别在chat、pppd、pppdump、pppstats四个目录下生成chat、pppd、pppdump、pppstats可执行文件,用于后面的4G模块联网测试。" x) {) y4 ]' A0 f+ l- i6 J
6 c3 F% S8 y; x6 K5 a5 Q
3.2. EC20 4G模块联网测试6 i+ L0 S1 e. A
首先安装好EC20 4G模块、天线和SIM卡,如图
& W( D9 n" l4 Q4 [, T3 c6 k. b![]()
: F3 q9 k7 l! Q2 m8 y, }: m8 P开发板准备好后启动Linux系统,待系统启动后,进入/etc目录,然后创建ppp目录,具体命令如下:1 p: C8 c* e; H4 s8 s- @% g
cd /etc //进入etc目录; j& \# A, ^7 V& g3 \; T
mkdir ppp //创建ppp目录9 T1 v, @- `; B3 e2 d& J/ T/ f1 T
目录创建完后,使用U盘将上一节编译的chat、pppd、pppdump、pppstats四个可执行文件拷贝到/etc/ppp目录下,如图 :2 P" }& e- S+ r' N6 e$ g
8 t9 A3 U" J6 |8 B, O' c
然后在/etc/ppp目录下创建pap-secrets文件,使用下面命令:+ r+ P2 X9 j/ _# G; N6 {
touch pap-secrets //创建pap-secrets文件vi pap-secrets //打开pap-secret1 _: w* Z8 D$ k3 X2 r7 i7 X
输入如下内容:0 K" [6 ]* `. Y2 E/ j% E/ Y
# Secrets for authentication using PAP
& ~( U9 Q, \" n N* N+ k# client server secret IP addresses9 ?; \6 a$ e* i
card * card *6 z% ~' n- j& a. h
在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是card,密码是card。6 ~1 g: t9 [4 f: T8 ?( R3 p
然后创建新文件夹peers,命令“mkdir peers”。2 t' P2 S4 _; k) c. v) m
进入peers文件夹,创建wcdma文件,命令如下:
% O! W. W! B$ `. r& X+ ttouch wcdma6 i0 ?1 C7 O- v/ k6 y! I( t
vi wcdma, C) Y- j$ g8 G8 m- M8 A
输入如下内容:3 f" Z6 q$ ]' ^0 o a: m
# /etc/ppp/peers/wcdma* ]; o3 L g: q5 i5 G0 t9 {3 d
# This is pppd script for China liantong6 C+ H+ d- I$ n9 L4 W
# Usage: root>pppd call wcdma2 s# y6 k! x1 Z& z) s# M7 p
hide-password7 V8 K: [) x0 f7 F
noauth6 J9 X E# o! u/ M' n- n7 ]& c
connect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
" E; _( p2 U7 a+ I' b/ |disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
: N; s% w% M7 j6 Pdebug
& x$ d4 f9 p7 j8 Z# J# f/dev/ttyUSB27 M" K! X. [6 {; }7 Y
115200# b( x, @% j$ f' N
defaultroute' k6 N' r3 y& i: N/ J! r
noipdefault
% p, x" C& O- `( Xnovj
, _% o) U1 s0 t/ E/ |: Cnovjccomp$ l% t( p, D2 Q; z3 Y
noccp
( m7 ^& ]6 p9 |0 {. w5 f6 bipcp-accept-local
4 d: w, I# M; L) X7 V& Kipcp-accept-remote
$ i' a( n" z& d4 X1 wlocal
1 @$ u! `* _4 ]2 _" g4 w+ `lock8 ? R! c" E' |! y& Y# n
dump! ?4 ], M& a7 V$ n( {5 t
nodetach, ^2 p) j% u, W% g6 J) _/ C
user "card"
; n" m' W4 w0 R% ?. W1 Ypassword "card"4 G' v9 a, R$ B* ?# ^& D9 }
crtscts
8 @) P9 H+ O6 t2 o9 qremotename 3gppp
o0 x. x: ?5 ~. Hipparam 3gppp0 e1 K+ R$ O* F. h
usepeerdns& i7 d( t9 v3 k" P2 A* l6 R% e! n
需要注意的是使用/dev/ttyUSB2设备节点文件。) Q& m6 x# Z7 Z- K. l* B% F
“user "card"”和“password "card"”对应了pap-secrets文件中的用户名和密码。
2 A: Q7 U" [4 `创建wcdma-chat-connect文件:8 R0 Q7 V, G6 S" z3 r! a! i- N
touch wcdma-chat-connect# l7 j3 S/ ?. j; s6 a
vi wcdma-chat-connect
, z. Y T9 W1 e9 j0 ]4 R内容如下:, {9 y4 C8 _& O0 P& m: M
ABORT "BUSY"
4 h2 q. @8 T* r5 B3 ^) rABORT "NO CARRIER"
2 c0 E/ S2 v9 vABORT "NO DIALTONE"
0 _# M+ K; o; ^- J" sABORT "ERROR"
/ t, \( I2 W3 s/ k) T, AABORT "NO ANSWER"
+ L4 l) w2 ^- o& q2 rTIMEOUT 120/ A1 o$ ]3 n g7 y" }( B4 b
"" AT1 L, M( L1 s& Q. z% t
OK \rATZ
4 K# L& @ v( ?' V4 n" m0 LOK \rAT+CGDCONT=1,"IP","3gnet",,0,0. l& t% D1 U( x3 J
OK-AT-OK ATDT*99#+ L6 _. r4 x; o3 t
CONNECT \d\c" q G' F* {( w: X K
在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
( t( n2 z: f5 r+ |4 l3 S/ K2 SOK-AT-OK ATDT*99#/ `* W5 k, R( z" \ ^" X
这两句话会根据移动联通或者是电信而变化,这里用的是移动4G。
& V# R. O7 M/ \2 ]
, v1 {; Z& g; C: y4 z/ s4 Y创建wcdma-chat-disconnect文件:( y5 v' t3 l" I9 [- n
touch wcdma-chat-disconnect' e5 @! Q: G# Z' e" Q6 c$ N
vi wcdma-chat-disconnect
! W2 B( A) S0 O# O4 w内容如下:2 ^. D+ `# L' ?* d3 B' A
ABORT "ERROR"4 v u1 D$ R: I' f1 z$ D* y8 [- Q) [
ABORT "NO DIALTONE"8 H. x2 h+ ], C" ~6 F2 e+ }+ B
SAY "INSending break to the modem\n"
& R. P) J- x. n2 o" T. t1 F""\k"
% K! B2 X( k) a""+++ATH"4 @% ]3 O( a r& @ \
SAY "\nGood bye\n"% L( z1 Q5 v' o8 L i3 I
所需文件创建完成后,就可以进行联网测试了。2 C! M0 P) P: w% [6 n5 O, }
& L" a( b t& C, N S) g! A" w6 Q
首先关闭eth0设备,因为和EC20 4G模块有冲突,同时只能使用一个设备。命令如下:( Q* Q/ K' l" J) h m
ifconfig eth0 down* ?7 X( M: e. H9 m, `7 A$ [+ @
然后在/etc/ppp目录下输入指令:
/ @7 Z& N( \3 ^ K) q* r./pppd call wcdma &" Y7 b; _, |. @) r
结果如图
& D- E8 U' b, A* r/ w' B+ W% w![]()
. Q" z5 C; x( O' j5 ]上图表示联网成功后的IP地址为10.47.135.182,使用ifconfig命令查看结果如图* @0 |% x$ f+ M( E5 S
# _7 g% u: N: _
这时使用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:
. r2 r& l( @7 G1 [touch resolv.conf_back2 K) G2 ?& |4 I" ?: y: u, W d
vi resolv.conf_back
& x( c5 Y7 E' U; u1 _输入如下内容:6 u+ A( D/ [9 M. d2 F% h
nameserver 202.99.160.68. W/ \" i9 [" `7 @
nameserver 221.130.33.52) d3 `* r. I2 m
nameserver 221.130.33.60
4 g- z2 ?1 d6 E: [, Vnameserver 192.168.1.15 Q/ t: M6 P, r) L3 D$ `. a
然后在新建一个脚本文件ppp0:/ L' H$ g* w r, x. _
touch ppp0
3 e$ f. h2 m0 m- Bvi ppp0' [ `6 W- _( U. B2 n! _1 p
输入如下内容:
6 m4 B. S0 Z; f9 k& `6 f( R#!/bin/sh7 z3 V# d0 z f3 ~) p; {# e
ifconfig eth0 down
/ q* p. J0 \+ z9 v4 I3 J% b. xcp /etc/resolv.conf_back
& D' ]9 h) c" [/etc/resolv.conf/etc/ppp/pppd call wcdma&: X' t' P4 M! ?5 f
修改ppp0文件的执行权限:: {1 ~% u, o+ c7 R7 [
chmod 777 ppp0; z( q4 Y& V8 S: i
这里第一步是将eth0关掉,第二步将我们的DNS文件覆盖到resolv.conf上,第三步运行。然后重新开机,执行ppp0脚本,命令如下:7 [- Z0 w+ t3 ?$ h, d& K) S7 ^
/etc/ppp0
- \* A: S! o* a; M- s; y脚本执行成功后,重新使用ping命令,结果如图:
- d* c- x$ c" ]8 L) V7 Z![]()
1 j# n' f/ O2 J图片显示可以正常ping通百度的IP地址。至此EC20 4G模块就可以正常使用了。
; w) w6 B0 m' `3 m5 _![]()
7 O! L- b$ l. ~( o![]()
* w* ~; Y: L' H4 | |