EDA365电子论坛网
标题: 迅为IMX6ull开发板Linux系统EC20 4G模块移植 [打印本页]
作者: 孤久厌闹 时间: 2020-11-16 11:21
标题: 迅为IMX6ull开发板Linux系统EC20 4G模块移植
1.4G网络连接9 i1 S8 m- R8 {+ J8 e0 G3 S* P
对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的通信接口都是USB,所以4G模块的驱动就是USB驱动,只要USB驱动正常,4G模块在硬件上就能正常通信。下面看一下4G模块的硬件原理图:
6 n- q2 W) C7 k2 Z% L
# D. Q# q3 Z1 q1 |5 j- S5 g: L

' [" P+ F8 r- T! a1 s) h/ ^9 \. r& [在原理图中,U25是4G模块的MiniPCIE接口,然后通信引脚会接到U15的HUB芯片上,所以4G模块会被识别成USB设备,CON5是SIM卡接口,在使用4G模块时,需要先插入SIM卡。在i.MX6UL终结者开发板上使用的EC20 4G模块,如图
, Q% X, W' T6 ]
2. EC20 4G模块配置
- L) y. i% `' O m: A ^2.1. 添加USB设备信息0 H u& Q. l/ n7 Y' r/ l# g$ o
要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G模块。打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息:7 B i+ g0 r6 x; a6 @5 J
1809 /* add support EC220 4G Module */" B- V( Z* e# k! S* N
1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */5 H8 X0 P7 H6 e6 q8 t
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
' Z7 t" {8 J4 R- O1 X! m1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */1 t( B- G) p, M& d! M* w! @( k
1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
( {9 `, i6 C7 i' ?- r. t1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */ Y1 }. M8 j& I8 F% O- | Y
1815 /* end add */其中第1813行是EC20 4G模块的USB信息。
. ^# l _% @. y& a$ ?' h! j4 J6 C2 }
, c- J- U8 ?0 q( z7 d. \$ _2.2. Linux内核配置5 P/ [6 G J& w9 w4 N: q: q, J0 k
添加完EC20 4G模块的USB信息后,需要修改Linux 内核配置来支持USBNET功能。具体配置如下:
5 k; k( e, }$ ^Device Drivers --->
7 g# q# U1 y, K1 f' P x+ d9 b' j( {Network device support --->+ r4 i; H0 M% ?7 h+ o2 i0 n
<*> USB Network Adapters --->0 V8 H5 E, o: z. ~" p9 A5 X
<*> Multi-purpose USB Networking Framework配置如图
u0 }6 n: Z l( V! k( i, @
+ `% y! F6 \: g$ E# Q2 V) L
接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:
/ t( ~$ h1 q- |Device Drivers --->7 K# W9 D3 B5 _3 T9 g% _( I
USB support --->
1 b+ Z( k) _/ J$ |! |& C1 V0 [* R1 W<*> USB Serial Converter support --->
! ^, y* R9 m j0 E( c9 f1 \ A<*> USB driver for GSM and CDMA modems
7 t1 v, u( e3 C& \1 U配置如图2 E8 i2 Q' W- n* v% Q0 Y
3 A! d b4 q& D+ |' s7 K
然后配置ppp,配置路径如下:
: ^0 R' K1 z0 _$ F# LDevice Drivers --->
! K& [0 d" _2 n3 m. RNetwork device support --->
8 z' p3 I9 `3 a% R: b" [<*> PPP (point-to-point protocol) support
1 N/ W& A* K1 C9 _<*> PPP BSD-Compress compression3 B) O0 h; W# e
<*> PPP Deflate compression0 j3 ]# q! ~* l6 [8 K# o
PPP filtering
, f7 \: Y1 H9 O6 ^* R2 f<*> PPP MPPE compression (encryption)
; C; `; i% ~1 hPPP multilink support6 P0 f+ E0 X+ w$ H; F/ R8 [
<*> PPP over Ethernet, h8 o; H+ c/ }& ]5 ?
<*> PPP support for async serial ports) H: L* ?9 v5 P9 I8 _6 b
<*> PPP support for sync tty ports
! a3 w& `8 J' y- ~; \ b! ?, D$ ^tty ports配置如图. z! D6 x7 m) d* i! t
9 K) m; \! p3 G- u1 L# [$ f
配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图 2.2.4信息打印: 
# T% Y9 g8 Y; ~$ H可以看出EC20 4G模块识别成功,并且虚拟出5个USB设备,分别为ttyUSB0~ttyUSB4。( n/ d/ r7 {7 L; }
7 e* x/ G4 e- e! m' S- S* Q
3. EC20 4G模块联网测试
& W1 P0 M" c3 i2 h; h' z3.1. PPP软件包编译
* w* V7 t% j. z( ^首先拷贝ppp-2.4.4.tar.gz到Ubuntu下,然后执行下面的命令解压:
3 o7 K* @1 F# @" C8 u( `3 X4 @tar -xvf ppp-2.4.4.tar.gz
5 k: N6 L7 O% `1 f. d% {) ?解压完成得到ppp-2.4.4目录,进入ppp-2.4.4目录如图! g: A1 D! }, T

! F( V8 a1 ^4 g# e( u! m6 f+ ^使用configure进行配置,命令如下:./configure结果如图
# o+ x" V* I q; d
: x5 `% r! ^* R# X% p) |
配置完成后,使用下面的命令进行编译:
$ ^0 B4 f z. |$ Y3 Nmake CC=arm-linux-gnueabihf-gcc4 g. s& T" g" K
“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板Linux内核使用同一个编译器。编译完成如图
% j! L, a; k% T3 r) K
$ f. Y1 r+ H8 p
编译完成后,分别在chat、pppd、pppdump、pppstats四个目录下生成chat、pppd、pppdump、pppstats可执行文件,用于后面的4G模块联网测试。
* H. k6 q2 {: G1 E8 u! j, U2 x3 l% k! o5 w5 N
3.2. EC20 4G模块联网测试
% O# Y% ~+ S/ N( `: S首先安装好EC20 4G模块、天线和SIM卡,如图. h1 }* G% ?2 N- M+ t/ \
) @+ c8 A. c4 H$ ^
开发板准备好后启动Linux系统,待系统启动后,进入/etc目录,然后创建ppp目录,具体命令如下:" u, a* T& j4 s
cd /etc //进入etc目录
# V5 U1 v8 i* gmkdir ppp //创建ppp目录$ [# |" v' E' h3 I
目录创建完后,使用U盘将上一节编译的chat、pppd、pppdump、pppstats四个可执行文件拷贝到/etc/ppp目录下,如图 :$ S) M/ C9 ?& e! p. f
# ]& Z8 }' V* I3 W& C0 w! E; z
然后在/etc/ppp目录下创建pap-secrets文件,使用下面命令:
& @2 G. G$ k# C6 itouch pap-secrets //创建pap-secrets文件vi pap-secrets //打开pap-secret2 J9 V/ D- B0 v9 {' \7 P/ o
输入如下内容:7 Y6 Z% j, W8 u8 G7 ~+ W# k
# Secrets for authentication using PAP. D. T6 H4 p6 @
# client server secret IP addresses( G6 y2 z0 }0 l
card * card *
: N" t7 O; [; M& Y' f- F) \: I在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是card,密码是card。
( E4 x$ t1 t' D: U8 A8 c$ j! ~然后创建新文件夹peers,命令“mkdir peers”。; Y2 M5 @/ z0 B q0 {: y
进入peers文件夹,创建wcdma文件,命令如下:' ^- N& \; j$ Q4 p
touch wcdma( s( l4 [+ g6 {/ z; R8 Y% V
vi wcdma: Q" H* }& p$ D O9 {# f$ X% _9 {
输入如下内容:% R# v1 k$ T4 S% T) Y( _8 Q
# /etc/ppp/peers/wcdma
6 E1 E; z0 f% z3 `% r" w# This is pppd script for China liantong
5 W* m( J' I/ m# Usage: root>pppd call wcdma
- F" H: ]% K+ P/ m2 Z2 Ohide-password/ a0 R' M% @1 L$ x, b/ s, N) R) x
noauth
: e- b7 v0 u/ p$ g0 {7 X7 wconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'+ H; ~7 b: B- O( p2 N3 d* B- y2 W
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'& R4 H" h. K3 Y
debug. J$ Y" d4 l+ j2 ~, n
/dev/ttyUSB2& Z8 W3 @: N( N6 ^9 {
115200
6 O1 J1 @3 F2 j B+ F: r) n( pdefaultroute
g$ Y U- O7 V. m \noipdefault
# W) S/ ]- z1 F6 _; ^* U1 G6 Mnovj D. `! g8 d/ j
novjccomp+ q" P: c5 v. v& a
noccp" y+ a2 |; A8 i, ]( K
ipcp-accept-local
$ ]- W, k. i- z9 |9 m/ t) z' xipcp-accept-remote! O6 |( r- o9 N0 X5 f$ T
local. f( h, v- @) d' J( U* N
lock6 I0 l7 U! q" x/ @ i1 }' O6 t7 v
dump
9 v( g' C7 E9 E Cnodetach; U; y7 R; b( Y1 _1 l3 U
user "card"
* R/ y2 [( J2 b: s8 Zpassword "card"
5 v: u9 P& H. d: X& L0 n$ icrtscts
g% l5 x$ J6 v$ y3 v- I, vremotename 3gppp
0 o" m9 @# O* I1 J5 G9 X) sipparam 3gppp4 H( F- }8 n/ U3 o0 y3 Z
usepeerdns& R( b, F- \2 U- V; ]
需要注意的是使用/dev/ttyUSB2设备节点文件。1 L# h; q' Y/ F5 T3 S
“user "card"”和“password "card"”对应了pap-secrets文件中的用户名和密码。
+ o5 h: g# H8 P0 ^ w创建wcdma-chat-connect文件:& d1 _' _9 J& i) j. N! l! W6 e
touch wcdma-chat-connect& K4 D, Z; a" i* R
vi wcdma-chat-connect# R, z5 H2 t, d) o7 t7 _! F5 c
内容如下:/ `# q/ M- L9 K6 D+ P
ABORT "BUSY"
2 k1 @0 a* h- I: zABORT "NO CARRIER"/ e( p* N% x. z' }2 y
ABORT "NO DIALTONE"% N6 z: c3 Z9 ]( a. u
ABORT "ERROR"
! P3 Q* v9 K2 x$ W# iABORT "NO ANSWER"
4 F: k- T# _) |9 F- dTIMEOUT 120
" o+ M- C9 S$ s. d. }7 i& l"" AT9 l; y1 c$ ~& r) y8 E
OK \rATZ+ g% F5 g5 _, g& I' u" C
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
8 I8 ]6 x) @! m0 X3 e+ J3 h$ ]2 G1 ~# @OK-AT-OK ATDT*99#
9 n/ ?( r0 l# N1 vCONNECT \d\c
7 Z/ i* k- Q, Q* L在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
( T) {* B/ u6 B& h4 N/ {OK-AT-OK ATDT*99#
$ D0 y N: d+ d m3 ]这两句话会根据移动联通或者是电信而变化,这里用的是移动4G。
# Q. ~- N# A8 G2 l4 V9 ~ Q$ v# Y; g9 O* O
创建wcdma-chat-disconnect文件:
! H. |6 t* O9 u" N6 _& [9 ytouch wcdma-chat-disconnect
+ \) ~# ]; Y9 E# y4 g; Y) T- Tvi wcdma-chat-disconnect
' {% ~1 m7 d C( [3 M: q' n内容如下:
! I: J9 K6 r1 m7 U8 p: SABORT "ERROR"
3 G2 P- X. ~" z1 W& R" w9 [ABORT "NO DIALTONE"! V" p/ ]! U% ]* Q
SAY "INSending break to the modem\n"
g! B: p4 | Q5 E$ |0 }# B""\k"; W" V, V+ B1 A- n" F; |' A3 ^
""+++ATH"# x c. S, [. T& y7 |' M; _; c0 E
SAY "\nGood bye\n"
6 R1 V9 A0 F9 f6 s, ?" T* ^所需文件创建完成后,就可以进行联网测试了。' G" M4 F% {* [ }5 O% K
; P9 l# c: G2 O! p
首先关闭eth0设备,因为和EC20 4G模块有冲突,同时只能使用一个设备。命令如下: W3 C/ l) p) z9 R" t. B3 h; Q
ifconfig eth0 down
' Z8 Q# F; F. A8 a然后在/etc/ppp目录下输入指令:
7 \# E( `# `/ C! W6 X./pppd call wcdma &
3 C" \7 `- ]0 g* ]结果如图3 h- X: Q! N) x3 C' L1 c2 X
2 F1 N4 o4 x# I. m& z/ [3 b3 l: G
上图表示联网成功后的IP地址为10.47.135.182,使用ifconfig命令查看结果如图$ H! e* n# G1 W
7 Y; z% s) {- F
这时使用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:
3 j) ?3 x2 N$ Z" s1 C# Ptouch resolv.conf_back, e2 I a8 }" {0 E
vi resolv.conf_back
" r5 g0 j! @$ c) X6 ^ n" F l输入如下内容:1 i& i3 I& }$ T! F" R; n
nameserver 202.99.160.68
3 L$ r1 } n$ C3 K0 N) ]nameserver 221.130.33.52
2 p8 s( F( C- k" g/ anameserver 221.130.33.60
7 ^; _$ x$ l* Tnameserver 192.168.1.1) y5 I1 L+ I/ N2 J5 `# H
然后在新建一个脚本文件ppp0:9 n2 D7 ]$ g1 L1 {7 v/ ^
touch ppp0
0 }8 k' p/ h/ Ivi ppp0
5 i% O2 K6 j3 \; j/ w0 `输入如下内容: U) B9 g4 h( s0 [/ L
#!/bin/sh( ]" K! C' a" F7 W4 S, j
ifconfig eth0 down
( J+ d/ |! E# _$ _/ M; }9 R5 [9 mcp /etc/resolv.conf_back
2 l$ L" n- j- s% }/etc/resolv.conf/etc/ppp/pppd call wcdma&1 n! j! E$ D! t1 F7 V
修改ppp0文件的执行权限:
' o( x" |& I/ o5 r% Wchmod 777 ppp0
# I; H, F- p, E6 ^+ d5 h' J这里第一步是将eth0关掉,第二步将我们的DNS文件覆盖到resolv.conf上,第三步运行。然后重新开机,执行ppp0脚本,命令如下:" P3 u, V' P( { |' Y) C# F& q L1 ?
/etc/ppp0
5 W; _. u5 H2 R8 @. d1 {; W脚本执行成功后,重新使用ping命令,结果如图:
3 n# r2 @' Z/ h
3 w$ P- V8 J% ?- Y图片显示可以正常ping通百度的IP地址。至此EC20 4G模块就可以正常使用了。' a) x0 _! }2 I! N* v3 @+ R

4 I% x# h$ k0 _/ `
# M) r0 N6 A5 c) x) l
作者: yin123 时间: 2020-11-16 17:24
IMX6ull开发板Linux系统EC20 4G模块移植
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |