找回密码
 注册
关于网站域名变更的通知
查看: 430|回复: 0
打印 上一主题 下一主题

迅为IMX6ULL开发板Linux 4G通信实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-21 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
前面的章节中学习了如何使用有线网络或者使用 wifi,但是使用无线网络或者 wifi 有许多环境限制,这种时候就可以使用 4G 模块来上网。在本章中学习一下如何使用 4G 模块实现上网功能。* M8 [) j' j9 c: v9 o; o+ g) e7 r
56.1 4G  网络连接
( R$ \- ]& S9 k9 {# q对于嵌入式 Linux 而言,4G 网络连接是一个比较容易实现的功能,大多数的 4G 模块接口都是 MiniPCIE接口,但是深入了解一下就会发现,4G 模块的通信接口都是 USB,所以 4G 模块的驱动就是 USB 驱动,只要 USB 驱动正常,4G 模块在硬件上就能正常通信。下面看一下 4G 模块的硬件原理图:
6 W1 q. Z# }+ c, x
4 ?6 L, B& w6 v$ v4 c; H' O
0 x% C4 x( o( G1 j) q- k/ t0 U在原理图中,U25 是 4G 模块的 MiniPCIE 接口,然后通信引脚会接到 U15 的 HUB 芯片上,所以 4G 模块会被识别成 USB 设备,CON5 是 SIM 卡接口,在使用 4G 模块时,需要先插入 SIM 卡。在 i.MX6UL 终结者开发板上使用的 EC20 4G 模块,如图 56.1.3 所示:
/ b" w! p6 C' x+ x4 Q# c$ |: |6 e: A0 ^7 z) h3 k. M" T
56.2 EC20 4G  模块配置5 m5 c) E  J; c; @! T* a! ^
56.2.1  添加 USB  设备信息
, a' Q! V% X% X9 P要使用 EC20 4G 模块首先需要在 Linux 内核中添加 EC20 的 USB 信息,这样内核启动后,才能正确识别6 D3 i( x% k7 a: x( \1 o
EC20 4G 模块。打开 Linux 内核下的 drivers/usb/serial/option.c 文件,添加如下信息:  J, P7 q- f1 t/ v- _0 h
1809 /* add support EC220 4G Module */: V9 q, I! s; V2 S9 H& d
1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */% q" s% v* p+ e( q0 g9 A6 ^9 s: |
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */5 b8 L- @) e- X  H
1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
9 D: k5 Q% e. f) i" R1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */$ N+ k% I. q9 A$ O5 r
1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */. u3 f" S0 b$ M, O* G7 E# H9 H& F/ W6 ~
1815 /* end add */' p" V9 G6 m' R2 w
其中第 1813 行是 EC20 4G 模块的 USB 信息。
' x; ^* z, `, Y1 X56.2.2 Linux  内核配置) X5 b  |# Y  Y* Z% w9 w; q! G
添加完 EC20 4G 模块的 USB 信息后,需要修改 Linux 内核配置来支持 USBNET 功能。具体配置如下:
9 @1 M0 {7 z+ O. C  C4 _Device Drivers --->Network device support --->% H& p( C: D% r& U- p$ u
<*> USB Network Adapters --->
, N) @& L$ j6 O( T# G. S0 P; _<*> Multi-purpose USB Networking Framework* y: E9 H* W" T# ]& Y
配置如图 56.2.2.1 所示:# h6 E* j6 h2 s! X3 ]' k
& E# }9 G* Y6 B  c; J
接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:
1 l- j/ [4 i/ I" Y+ KDevice Drivers --->USB support --->
8 O6 X7 J+ Q3 p<*> USB Serial Converter support --->( _- q2 h8 W7 D6 _
<*> USB driver for GSM and CDMA modems. M7 F6 V4 g% U. d; x, c' d
配置如图 56.2.2.2 所示:
, P; N7 p: M% ^1 |  e: l# t7 `- J' ?% q/ h& F
然后配置 ppp,配置路径如下:
9 N' I7 y) \5 v# \, t5 Y6 F' ADevice Drivers --->Network device support --->
( t: H( h4 t  Y5 K& R) I  Z. A& a<*> PPP (point-to-point protocol) support
! K7 L8 N; `( i- S1 |0 [<*> PPP BSD-Compress compression
# [1 G- r& n" m$ h. y<*> PPP Deflate compressionPPP filtering
2 q/ l3 q# m- Q0 M<*> PPP MPPE compression (encryption)PPP multilink support
7 @, ?8 ?3 r6 Q' k" K( B<*> PPP over Ethernet
) m% O) c  n9 s. I4 _3 [3 i<*> PPP support for async serial ports
! |" D. W7 H4 ?$ R, x2 P5 v<*> PPP support for sync tty ports3 L/ }" u" |7 C0 h7 k/ ]
配置如图 56.2.2.3 所示:$ P  t8 i# K) S* j3 \( b: h& g" e

' O4 o) i, ]# b4 o- P! [配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图56.2.2.4 信息打印:
  `4 u, s8 W) q, Z! f8 a3 q
. a; |3 X$ ]* v6 c* {可以看出 EC20 4G 模块识别成功,并且虚拟出 5 个 USB 设备,分别为 ttyUSB0~ttyUSB4。
; w8 \9 @5 t1 }56.3 EC20 4G  模块联网测试
3 A6 G1 \  u6 W8 h) [0 I2 B! }* Y9 U56.3.1 PPP  软件包编译/ E, O3 E  x! K" x1 X" \
首先拷贝 ppp-2.4.4.tar.gz 到 Ubuntu 下,然后执行下面的命令解压:
$ ]  r" g! Z5 E4 ctar -xvf ppp-2.4.4.tar.gz
) L! i2 F. G% q% {+ {解压完成得到 ppp-2.4.4 目录,进入 ppp-2.4.4 目录如图 56.3.1.1 所示:
* [- b% ?# t) g" r! {" T+ w5 v8 ^- a% m/ l2 s8 {- r8 V
使用 configure 进行配置,命令如下:& J! K# e" w8 E2 O
./configure
* z& \8 }7 T+ c( j; [2 R; o0 M结果如图 56.3.1.2 所示:/ g+ K, ~9 k" R/ Y

* j" \1 r+ l) T. u6 \( C$ c# P配置完成后,使用下面的命令进行编译:! r) a$ a/ A4 y" M* E8 i
make CC=ARM-linux-gnueabihf-gcc2 p/ H. Q9 n- k& j8 w
“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板 Linux 内核使用同一个编译器。, h' n/ W" p. F' _" a
编译完成如图 56.3.1.3 所示:
; d/ o* A8 j' R+ X( h
, U1 J: g6 w1 q. P) b编译完成后,分别在 chat、pppd、pppdump、pppstats 四个目录下生成 chat、pppd、pppdump、pppstats可执行文件,用于后面的 4G 模块联网测试。
, P+ ^1 [9 I& u9 i. Z, ^56.3.2 EC20 4G  模块联网测试
* R9 y! ^7 \% S  M- s7 L9 m/ q首先安装好 EC20 4G 模块、天线和 SIM 卡,如图 56.3.2.1 所示:
$ Y+ k4 O7 k7 L" O$ C/ |& {/ r! N% `
开发板准备好后启动 Linux 系统,待系统启动后,进入/etc 目录,然后创建 ppp 目录,具体命令如下:8 P: ~9 @6 k. m, l6 U. p
cd /etc //进入 etc 目录
, g. X8 T. I( `3 B5 Imkdir ppp //创建 ppp 目录
* i. c' J9 Q  C% S1 t- G目录创建完后,使用 U 盘将上一节编译的 chat、pppd、pppdump、pppstats 四个可执行文件拷贝到/etc/ppp目录下,如图 56.3.2.2 所示:
0 h2 Z7 }% ~. h4 V7 H
" S  [+ L  U# ^# {  z/ R4 H然后在/etc/ppp 目录下创建 pap-secrets 文件,使用下面命令:
& s" |: l+ A7 x% K. k, Dtouch pap-secrets //创建 pap-secrets 文件3 c4 H" z4 {6 ~5 n$ C0 E4 l
vi pap-secrets //打开 pap-secrets 文件6 s& l& j$ m* S# ~
输入如下内容:7 w+ X/ d: Q9 w: }: c) {6 m( p
# Secrets for authentication using PAP
: B' O! }& O. F0 a5 G# client server secret IP addresses
% J) x- W( V7 q. [- V8 Qcard * card *
" M! r: n2 s. B$ k在 4G 信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是 card,密码是 card。
$ ^# I9 J2 h% ^然后创建新文件夹 peers,命令“mkdir peers”。
8 e( j" Q7 J  j2 y& ?4 f进入 peers 文件夹,创建 wcdma 文件,命令如下:8 Z2 Z2 c& A* s( E- F
touch wcdma' N9 o: J( n2 s# o
vi wcdma. U9 f$ _0 T# P* Q- Y, y
输入如下内容:. q  u3 N3 L2 t' c: T- ]! P
# /etc/ppp/peers/wcdma
& d, {; a  E; i+ \# This is pppd script for China liantong
" l$ h& W, g) K( [; {# Usage: root>pppd call wcdma
1 x; T7 `, m6 ?8 {% H2 Nhide-password5 P! F1 j6 ?$ x, G5 ~! X
noauth
4 B; z/ x7 E9 S+ S$ u  ~connect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'& _0 ?5 \4 L" l  l: w  `8 q: l
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
2 M: I: R9 m. c  U+ b+ o$ X) \debug
2 g: z- i3 t  U- U  _8 Q/dev/ttyUSB2& S0 `7 f4 q5 ]% N: Y
1152004 y4 s0 M, U, Y! k- `% S
defaultroute
% r' h3 `7 l4 D7 U0 dnoipdefault: S9 Q$ m! O0 R  m7 v
novj: j+ m2 a7 q" Y" }: o& w
novjccomp
+ z6 P" K) D7 X" M2 j# Onoccp
& h. O6 f8 c4 |ipcp-accept-local
6 u4 `3 ~( y8 ~ipcp-accept-remote7 H8 B& O8 K' k$ u( v8 K5 A* k
local
0 A8 U9 f: Y, ]$ Mlock
# h) T! s  z$ K( T: ldump
% `, G7 B% p6 t$ wnodetach
; J' S+ R2 X4 iuser "card"
3 w* G  S% H9 e" A  s9 Cpassword "card"
* w5 x! x( ?$ ~" M9 W1 f8 rcrtscts
! M' s6 }" ^) e8 |% x$ b  p3 Premotename 3gppp" x+ m7 h6 u) V/ e6 O% J8 n  h0 Q2 u
ipparam 3gppp
' d3 ?5 T! p; D" D2 e2 b% ]usepeerdns7 u7 ~: ^) V, G: F4 k
需要注意的是使用/dev/ttyUSB2 设备节点文件。
" ~: w2 n$ n5 ?8 z“user "card"”和“password "card"”对应了 pap-secrets 文件中的用户名和密码。4 a/ g! _- |: C, f! f8 L
创建 wcdma-chat-connect 文件:
7 X" Y. n. M0 D4 htouch wcdma-chat-connect9 P) I) W$ E' f: V) V
vi wcdma-chat-connect& e3 ^6 X# J/ g; ^- I) O
内容如下:
8 J$ k+ P) i8 X/ E! v& {: o# ~7 OABORT "BUSY"
& P( L) }. H9 O1 _) f5 s& TABORT "NO CARRIER"
0 v. T3 P& Q# j+ _7 SABORT "NO DIALTONE"! b+ n! \; C( G& t+ i7 W' |
ABORT "ERROR"; z( V. O7 m# `
ABORT "NO ANSWER"' ~9 u5 C6 h$ r' M' N3 }" K# Y
TIMEOUT 1206 }" G* `: u* R
"" AT2 s/ ]: ^0 s0 l& o
OK \rATZ
( ]" p3 b" T9 G# qOK \rAT+CGDCONT=1,"IP","3gnet",,0,0" N- M  y  G) _7 e5 c" o; {! w" C$ L
OK-AT-OK ATDT*99#( p& c8 r2 H9 r
CONNECT \d\c
& h! o; X' F: V3 g4 }0 z在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
4 Z+ N: d9 ^2 LOK-AT-OK ATDT*99#
7 V2 m' J) n6 ^" y- X* t9 |这两句话会根据移动联通或者是电信而变化,这里用的是移动 4G。! A, w. N$ U6 w( t, n! O0 ]
创建 wcdma-chat-disconnect 文件:. B4 L; O5 A  e* j5 `6 a0 P  j0 R+ k
touch wcdma-chat-disconnect
; _2 E1 \% v- Wvi wcdma-chat-disconnect
" k! N- O% ?( s4 w6 H3 d  ]内容如下:+ Z$ E. I& z* ^0 x8 M0 w
ABORT "ERROR", [3 x( r$ A6 P8 }/ P
ABORT "NO DIALTONE", D: d0 \' o! p9 i6 l& n6 L
SAY "INSending break to the modem\n"
4 y9 [1 w8 e) q""\k"! H0 x/ Q+ }$ W3 c% X4 F& P# |
""+++ATH", H0 K3 f$ z$ d& t$ _: \; [$ ~* f) ^6 y0 h9 C
SAY "\nGood bye\n"
+ o: H7 M7 c) l2 V2 k所需文件创建完成后,就可以进行联网测试了。
- ]2 [) T, X( F. a: w% e首先关闭 eth0 设备,因为和 EC20 4G 模块有冲突,同时只能使用一个设备。命令如下:1 {' a5 C7 }2 H: B8 o  o2 i
ifconfig eth0 down
8 U& f% h( Q8 }7 f8 j. ~0 o: o2 i然后在/etc/ppp 目录下输入指令:
9 U) g. U# o2 y% A7 o7 U6 m./pppd call wcdma &$ a  P; F! T( D" K8 F
结果如图 56.3.2.3 所示:8 E* _" N; M+ {7 ]: d) ^3 k9 r

+ [, s) P) P% w* l/ X# n: \" f7 \上图表示联网成功后的 IP 地址为 10.47.135.182,使用 ifconfig 命令查看结果如图 56.3.2.4:
+ z$ n, m- Y8 I" }9 w2 e6 [3 X4 c9 E& K
这时使用 ping 命令查看能够 ping 通外网,命令如下:
+ n0 g6 c% n8 v4 Iping 202.108.22.5 -c 4
: I4 ^  o8 R& F8 d7 n( }( C! H- f“-c”选项指定 ping 网络的次数。“202.108.22.5”是百度的 IP 地址,结果如图 56.3.2.5:3 G! w: S. j( B  i# X

5 b1 J% C$ F! Q7 q, Q7 A9 {$ N发现不能 ping 通外网,愿意是因为 DNS 没有设置对,在 etc 下有一个文件 resolv.conf 。这个文件是用来放 DNS 的。就是这个里面的域名没有设置对。然而在 eth0 的运行脚本里强制性的把这个文件复制为了192.168.1.1 。这就造成即便在这里文件里设置上正确的 DNS,再开机后也会发现这个文件里已经是192.168.1.1 了。这是因为 eth0,是开机自启动的。
: d3 r1 P! P: D我们在/etc 目录下新建一个文件 resolv.conf_back:
# [! A. D" C/ t% ytouch resolv.conf_back
6 i7 ^/ z/ O; y) c& _+ i6 fvi resolv.conf_back
: ~8 ~3 {1 d8 z: O' Z/ Z输入如下内容:
1 i7 o. J* ]5 w6 I( W- onameserver 202.99.160.686 P# w1 [$ M- X( C$ X
nameserver 221.130.33.524 ^4 w# ~/ w) {9 I0 b4 S
nameserver 221.130.33.607 ]) {7 X- J: b8 ?# ~) [
nameserver 192.168.1.1
, V/ S+ N7 }/ x! B然后在新建一个脚本文件 ppp0:2 K4 i5 k/ K$ h3 X: B+ o: D) \( _
touch ppp0
# }$ y. N1 d$ c; Avi ppp0
2 G$ e  V8 W# E4 w) z0 h7 P' S; Q输入如下内容:
; H/ G2 ?" T% s2 E4 G#!/bin/sh
6 M; b0 Y! n/ @ifconfig eth0 down. x: y$ ]$ W6 B! a9 C" t7 m1 ?- t
cp /etc/resolv.conf_back /etc/resolv.conf* n0 x" s6 c9 w3 w/ ^& m( X
/etc/ppp/pppd call wcdma&# P" P4 b  y1 H2 N& n
修改 ppp0 文件的执行权限:
( Z- t1 h; ?+ I0 }3 ochmod 777 ppp0
6 j/ ^) @( V) z; f0 K这里第一步是将 eth0 关掉,第二步将我们的 DNS 文件覆盖到 resolv.conf 上,第三步运行。然后重新开机,执行 ppp0 脚本,命令如下:
; h) z2 r5 Q6 F9 o/ ~$ S% ~/etc/ppp0
; Y# {, D6 U( o脚本执行成功后,重新使用 ping 命令,结果如图 56.3.2.6 所示:- L6 N4 b; Z3 J, N
% N8 u2 N1 x9 p& \% q
图片显示可以正常 ping 通百度的 IP 地址。至此 EC20 4G 模块就可以正常使用了。2 m* x: H" f4 @8 c# K, g5 M

. x  }/ v5 y7 P) Q* u
) ^- l, D5 Z) m  Z+ N5 W
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-11 09:20 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表