EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1.4G网络连接
9 v% z! X9 |' o" M5 S9 |: {% }对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的通信接口都是USB,所以4G模块的驱动就是USB驱动,只要USB驱动正常,4G模块在硬件上就能正常通信。下面看一下4G模块的硬件原理图:# w5 h9 u% I: B7 O3 J. N
![]()
5 X' P" u( h6 ^- D0 o * |" J1 J7 |* |# c% h
在原理图中,U25是4G模块的MiniPCIE接口,然后通信引脚会接到U15的HUB芯片上,所以4G模块会被识别成USB设备,CON5是SIM卡接口,在使用4G模块时,需要先插入SIM卡。在i.MX6UL终结者开发板上使用的EC20 4G模块,如图 ![]()
: }& W& t& F3 k* w2. EC20 4G模块配置
2 Q' Q" A7 V# v# f# O2.1. 添加USB设备信息
7 [/ o3 _) i: F' L) c9 }4 O要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G模块。打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息:$ N4 V" x- S1 N) {, i" L' _
1809 /* add support EC220 4G Module */
+ w3 l6 n, Z9 i( | \8 r+ i2 J" _1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
' U9 z2 r2 {6 t0 C! n+ s1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
) v8 y* B( Q' p7 S- Z1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
e- a& o8 K& \# F1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */) Y& t( c' G3 f) `8 W
1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
1 r) I: }( P* {" S8 N1 d6 E# `6 k1815 /* end add */其中第1813行是EC20 4G模块的USB信息。4 u4 w! {7 a+ A/ f( o3 Y7 M
9 }& A5 v+ P1 J
2.2. Linux内核配置1 ?2 O* U5 k2 q3 U( I
添加完EC20 4G模块的USB信息后,需要修改Linux 内核配置来支持USBNET功能。具体配置如下:
; B% L( R2 Q* B K& ~/ t) g4 QDevice Drivers --->
3 S8 a. P- i( _+ z8 @/ K9 `& yNetwork device support --->
9 T5 r H) Y: u0 o<*> USB Network Adapters --->5 q1 r+ {: d2 q
<*> Multi-purpose USB Networking Framework配置如图& S: e# q' A, s; x% J h- c- Z7 |
![]()
5 z6 A: d/ ]/ D0 h. x3 O0 j接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:4 |+ m! W) t- m0 w
Device Drivers --->
) N# p3 T3 ]& W& g2 U6 s" fUSB support --->
4 B/ g8 }5 I8 A O2 g/ [# B4 a<*> USB Serial Converter support --->
# D8 ]- i* v7 `% E P ]9 _<*> USB driver for GSM and CDMA modems5 Y* W2 L& k1 W9 r z3 k6 ^
配置如图" e+ ~6 g0 l/ u4 f1 b. _3 H x
![]()
# u5 @+ D9 {. |0 G& I4 _然后配置ppp,配置路径如下:
' G O$ M% L/ R) v- @+ k2 HDevice Drivers --->9 p9 J( i* o$ P$ v- T
Network device support --->
8 U9 {3 P7 c$ [" |4 |<*> PPP (point-to-point protocol) support
; H; j9 I" c& B q1 n9 w9 A; [+ r9 K<*> PPP BSD-Compress compression
: i" ?* }* u5 J, c<*> PPP Deflate compression
+ `! U4 n- P3 Y( t! s6 gPPP filtering
; J- S+ A, C: H! ~* K. ?% [2 t/ W<*> PPP MPPE compression (encryption). B C( N* W2 E
PPP multilink support) u& Z# I& b* o. g' R5 i \6 K- w
<*> PPP over Ethernet
. v; J1 {' u5 P! b# o8 D<*> PPP support for async serial ports
2 G. e1 A0 F0 q' I) m( l6 _1 ~) M<*> PPP support for sync tty ports
, z! K/ m( H; z+ Ttty ports配置如图
. y5 ^! o7 }( n3 x( h% v' X - u& u4 n, P- k. S8 T( t V6 v% d
配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图 2.2.4信息打印: ![]()
( g3 E2 M' x2 r+ H' C* s$ m可以看出EC20 4G模块识别成功,并且虚拟出5个USB设备,分别为ttyUSB0~ttyUSB4。( ~9 ?) K% v! b h
, {) ~+ X7 \1 _' }/ a U3. EC20 4G模块联网测试
# s. N! t9 t$ e8 T f1 r3.1. PPP软件包编译
% [, G R& B1 l1 ^6 C8 c( X; a首先拷贝ppp-2.4.4.tar.gz到Ubuntu下,然后执行下面的命令解压:
) v* H$ o" _& ?3 itar -xvf ppp-2.4.4.tar.gz
1 X) ?' @8 B* s5 d3 B7 B解压完成得到ppp-2.4.4目录,进入ppp-2.4.4目录如图
1 A2 n, M2 L& _$ G! S& Q![]()
0 e7 B( i- V& q% I$ o4 k( d使用configure进行配置,命令如下:./configure结果如图- ?$ W" B G$ z, |: I4 o
8 M; C/ @4 U) |, z5 e
配置完成后,使用下面的命令进行编译:7 E& x# s* v- j
make CC=ARM-linux-gnueabihf-gcc
1 C. W# s* j5 g/ x( ]4 H' C8 N“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板Linux内核使用同一个编译器。编译完成如图
* I. k, G# l- [7 o# j2 h! \. c. C , F* O8 w: \3 W1 @" m/ }! J
编译完成后,分别在chat、pppd、pppdump、pppstats四个目录下生成chat、pppd、pppdump、pppstats可执行文件,用于后面的4G模块联网测试。
F" {7 w' b* J q, W/ X, R7 Q& S. w
3.2. EC20 4G模块联网测试) k- V& d! X/ }9 n( d
首先安装好EC20 4G模块、天线和SIM卡,如图
: \+ g7 t2 o0 U( z! p( a* L, n![]()
7 }( w- C: h* Y w" o) I5 A$ u! E开发板准备好后启动Linux系统,待系统启动后,进入/etc目录,然后创建ppp目录,具体命令如下:
6 M5 z) c `: G6 w+ ocd /etc //进入etc目录( k+ a( w" g3 o7 y6 T' [# x7 ?
mkdir ppp //创建ppp目录
+ e k3 Q( O- z7 A3 i Q' R+ m! a目录创建完后,使用U盘将上一节编译的chat、pppd、pppdump、pppstats四个可执行文件拷贝到/etc/ppp目录下,如图 :* S( O& G* f8 n7 m/ @3 i. U, d
1 V9 `+ c% e4 z- Q9 X1 d, T
然后在/etc/ppp目录下创建pap-secrets文件,使用下面命令:6 f3 l# |/ F8 B- C
touch pap-secrets //创建pap-secrets文件vi pap-secrets //打开pap-secret. N5 }) G7 B3 A! @: y3 _1 Z
输入如下内容:
" L% ^0 N4 _( M w( A8 Q3 w8 p# Secrets for authentication using PAP
4 |/ A+ N% d% l. ~. v/ X$ p" {- l# client server secret IP addresses
6 Q4 E( g; `0 [7 Q4 K9 Y! }# @card * card *
" M# w' q/ I+ `2 d4 I在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是card,密码是card。
! @, k f# l9 K/ B然后创建新文件夹peers,命令“mkdir peers”。
: d) S( {1 ?" f; [进入peers文件夹,创建wcdma文件,命令如下:/ N" l1 _( e& z9 ^" {3 U
touch wcdma
7 Z& t7 p4 b2 Y( Avi wcdma
* f: c3 K& A: e Z4 Y+ ]& l输入如下内容:
1 o. G% i, @5 {$ W7 R7 M/ p' R2 r# /etc/ppp/peers/wcdma
) b% p0 L& O. X: V0 I3 W( W# This is pppd script for China liantong
$ \! ]0 K: [7 X9 I7 ?# Usage: root>pppd call wcdma5 z& A* P; A: ^: d+ w8 G
hide-password. K* x3 q* G% c+ G- `/ I% h
noauth
4 W, u# e! Y0 i& H9 oconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'2 q* a& K ~: }
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'/ e+ K2 W( C9 u) w
debug
! Z( n% V Z/ \* ~3 J/dev/ttyUSB2
. S- H* w3 j5 K2 K1152009 { |- Y: Z! C* O
defaultroute8 c7 m" h# w2 {
noipdefault- E: \2 W6 W; |" d2 G
novj
$ p* C& d B4 I) ]: ]2 @novjccomp) {* x0 h1 o' P0 D5 O& g) F
noccp
" ?$ \. ~& p8 G6 C: Kipcp-accept-local
; L- O7 y! z5 U% |ipcp-accept-remote
4 i0 z4 b K9 ^& [$ Dlocal% H& C6 Z1 n v+ S( Q
lock
, p+ J: c, W2 T$ j7 xdump
2 `; |, b% Z0 u/ F+ H3 z2 ^7 K+ ~nodetach( |% S) m( _4 y( A& {
user "card"
3 }3 H2 T, V, Q9 zpassword "card"
3 f, U5 Q& J ?crtscts
. H# f% {2 n; A$ d+ O( Wremotename 3gppp0 b$ B, T" B6 g f) a- {" U
ipparam 3gppp
- Q# k, e9 B& z- t5 Nusepeerdns: R* z- x& E w1 F1 U0 d
需要注意的是使用/dev/ttyUSB2设备节点文件。
( w0 O1 _1 `* [3 z* T" u“user "card"”和“password "card"”对应了pap-secrets文件中的用户名和密码。3 f# n+ q; r4 j; ?0 N
创建wcdma-chat-connect文件:
- E- F( r# l0 G7 Jtouch wcdma-chat-connect4 x! N& N0 J- ?; i. U
vi wcdma-chat-connect
) a& [. B6 z9 Q4 w! D内容如下:& d4 G! X2 C+ [
ABORT "BUSY"# U& @# d6 n6 ~* y
ABORT "NO CARRIER"4 Z. }- @8 Q: H+ @
ABORT "NO DIALTONE": G5 }: I5 g: K/ d
ABORT "ERROR". K5 L( w& n+ ?& G; A, k
ABORT "NO ANSWER"; c, P3 n* a- x
TIMEOUT 120
+ Q0 p. {& j' }7 n3 d"" AT
' z3 r2 b7 z( {OK \rATZ* T. ]; ~, f% I- z* X$ x
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
8 {$ v: a$ g9 L( POK-AT-OK ATDT*99#
0 p6 z8 L2 G6 K* B% \0 h0 JCONNECT \d\c
' N% z r2 ^9 V9 d: ?. c在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0# u6 M+ |8 ~, V2 D& m* d
OK-AT-OK ATDT*99#
7 q% m+ D0 {% o8 c4 w# j' J0 [' k这两句话会根据移动联通或者是电信而变化,这里用的是移动4G。
) s& E- k8 x6 d4 z2 M2 S0 a% y1 \4 U" g" [: @4 [, e
创建wcdma-chat-disconnect文件:' P9 ^3 Q/ w/ E% [( }# K
touch wcdma-chat-disconnect2 I, e; l+ n4 f0 s$ r0 w* k( Z; f9 \2 J
vi wcdma-chat-disconnect) a. S+ f1 j) Z7 c( R, G8 q; s. n
内容如下:, K) e, ? y' a
ABORT "ERROR"/ K2 `. Q7 E. @% {- [
ABORT "NO DIALTONE"5 R; ?, [( u6 i4 b2 n' C
SAY "INSending break to the modem\n"; k5 g/ D& y7 [3 i% h8 b+ g# h" o+ D
""\k"
4 t6 `6 b) E1 {""+++ATH"' m& g p; I& j
SAY "\nGood bye\n"
. L. g: }5 Q3 J) Y) {2 t0 x, B! J所需文件创建完成后,就可以进行联网测试了。
# s/ E# {; |( ~+ b' E3 L. c/ W$ a, P) R' \, u$ r0 _ L1 `7 E
首先关闭eth0设备,因为和EC20 4G模块有冲突,同时只能使用一个设备。命令如下:& `& @9 A+ j7 K! C
ifconfig eth0 down7 Y( X6 G6 c8 l6 a7 L
然后在/etc/ppp目录下输入指令:
) s4 i0 ]2 K E: C1 Y./pppd call wcdma &/ b) K K; R: a5 u: |
结果如图
! r, D9 t- V/ u/ M+ c! }6 C9 i * D/ d. }! r6 N- e
上图表示联网成功后的IP地址为10.47.135.182,使用ifconfig命令查看结果如图! I) T, W# r8 j/ F1 p* F7 m
![]()
) Z+ t* s3 P: P$ Q5 {这时使用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:
, `2 }, c( t$ [' K. X$ y( C2 I# \touch resolv.conf_back" R3 H- M9 U! S6 Z7 G& v$ ?
vi resolv.conf_back
3 A9 g' Y! E6 I- N& @% k输入如下内容:
1 K" y) z6 J% |$ D" I4 g4 E* qnameserver 202.99.160.68
: E' y) O) F( u% w3 ]% b# qnameserver 221.130.33.52
, D& p- ]) g2 Inameserver 221.130.33.60$ s% [0 g i; N
nameserver 192.168.1.1% g5 g5 F0 N$ l4 b* ^7 L. H8 t
然后在新建一个脚本文件ppp0:+ P( ]! ?; s1 r( e! W
touch ppp0. ~$ Z' u4 Q. s! C/ A$ g4 `, `
vi ppp0; E+ u; S* _9 }+ l1 L% k! j
输入如下内容:
+ M. H: _) ]: T2 I5 w; l#!/bin/sh7 W) a+ v0 F1 _0 |
ifconfig eth0 down5 `" e# a6 h4 \% B- k& d% Z3 R
cp /etc/resolv.conf_back
" p" T$ _: H, v, @1 p* a; y! o! K/etc/resolv.conf/etc/ppp/pppd call wcdma&" k, L* W& f3 I }
修改ppp0文件的执行权限:7 ~% f# t' C3 [2 c! k" x
chmod 777 ppp0 }7 j( O/ _" E9 ?
这里第一步是将eth0关掉,第二步将我们的DNS文件覆盖到resolv.conf上,第三步运行。然后重新开机,执行ppp0脚本,命令如下:! M9 A; c; U- f# x( q" X. i% z: u
/etc/ppp05 U% g% I; j/ ^
脚本执行成功后,重新使用ping命令,结果如图:
7 i1 \7 i! Y0 C- n! J![]()
4 k) P' }' L4 l* G图片显示可以正常ping通百度的IP地址。至此EC20 4G模块就可以正常使用了。 v8 w' n/ }. I3 P
' n/ [) V) t8 r
+ ]4 ?$ Y' a7 X5 Q
|