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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
前面的章节中学习了如何使用有线网络或者使用 wifi,但是使用无线网络或者 wifi 有许多环境限制,这种时候就可以使用 4G 模块来上网。在本章中学习一下如何使用 4G 模块实现上网功能。' a/ X3 f  S" G1 d8 n
56.1 4G  网络连接
5 `% _" l- D" E& }4 R: i& R. C5 M对于嵌入式 Linux 而言,4G 网络连接是一个比较容易实现的功能,大多数的 4G 模块接口都是 MiniPCIE接口,但是深入了解一下就会发现,4G 模块的通信接口都是 USB,所以 4G 模块的驱动就是 USB 驱动,只要 USB 驱动正常,4G 模块在硬件上就能正常通信。下面看一下 4G 模块的硬件原理图:
/ V& y* l2 P! ^1 }; S5 G
- \' n0 H# Y# N$ O# E; J9 g) p. y9 X
在原理图中,U25 是 4G 模块的 MiniPCIE 接口,然后通信引脚会接到 U15 的 HUB 芯片上,所以 4G 模块会被识别成 USB 设备,CON5 是 SIM 卡接口,在使用 4G 模块时,需要先插入 SIM 卡。在 i.MX6UL 终结者开发板上使用的 EC20 4G 模块,如图 56.1.3 所示:
  L8 d6 |4 _+ I/ ~) e. i: {/ n6 R' u8 H, g2 {. o7 Q
56.2 EC20 4G  模块配置2 |% h) ~3 _# P. g* ^
56.2.1  添加 USB  设备信息) J7 M5 S% x' Y) X% w2 x1 Z
要使用 EC20 4G 模块首先需要在 Linux 内核中添加 EC20 的 USB 信息,这样内核启动后,才能正确识别
( e1 _3 K( f0 v. N/ S3 |  UEC20 4G 模块。打开 Linux 内核下的 drivers/usb/serial/option.c 文件,添加如下信息:
* ]+ B  u" P" {1809 /* add support EC220 4G Module */
. z( I. }& s/ O- w+ _  U! _# e1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */& j% C6 |/ K% l* j! A( o
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */6 l% r) I7 E5 r5 d0 O
1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
+ e$ L% t- f6 ~3 }1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */) Q6 s) }! U2 y7 E1 u% {% ?& q
1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
# g  a5 d8 I2 `' o% v, _! \1 V" U2 Z1815 /* end add */
" f4 S9 M4 _6 y& r' F其中第 1813 行是 EC20 4G 模块的 USB 信息。
5 @8 o5 f; l  ~+ M: w9 C7 Q) [' f% D0 K2 h56.2.2 Linux  内核配置
* _2 |( p% d6 [. A4 n; `添加完 EC20 4G 模块的 USB 信息后,需要修改 Linux 内核配置来支持 USBNET 功能。具体配置如下:
  Q$ q. O! q% O& H  EDevice Drivers --->Network device support --->: a: s+ S2 G& \4 }, c' \
<*> USB Network Adapters --->
, D6 D7 v- \; p% O<*> Multi-purpose USB Networking Framework
* N% c2 M3 ?) u; Y配置如图 56.2.2.1 所示:& M, v% n6 F2 j8 v& \
4 |+ a5 ?' k  E
接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:. N. q$ l0 E. v+ u+ R6 e% v
Device Drivers --->USB support --->( C, D3 R% h7 G1 {' ~
<*> USB Serial Converter support --->- b5 I8 t6 W0 S- X" H
<*> USB driver for GSM and CDMA modems
; t4 B0 A( b  l4 G4 x) |# o# R配置如图 56.2.2.2 所示:
# \6 x$ |$ n8 N. M; }. ^$ |
* Y- o2 W5 X" M5 z8 f4 X/ u' ~9 i然后配置 ppp,配置路径如下:4 D( |, x2 _( m( U
Device Drivers --->Network device support --->+ F% n1 s" q! p5 v4 G4 N  e/ W
<*> PPP (point-to-point protocol) support
7 d  N" r2 i9 t" u<*> PPP BSD-Compress compression
: b% H+ p. C# [& i6 b<*> PPP Deflate compressionPPP filtering
. P5 }! }! p2 n/ J0 ]$ Z' X<*> PPP MPPE compression (encryption)PPP multilink support' ?' ~" f8 l9 b% V9 ~- [% E# g
<*> PPP over Ethernet
% _# {: X1 a7 I  {8 `9 d- U+ y) g<*> PPP support for async serial ports
1 @4 F8 I) @" V' J- G7 [& u4 c<*> PPP support for sync tty ports
1 A) Q" H" @- x$ q# t% {/ j/ g配置如图 56.2.2.3 所示:
; C& V. z* [# p/ `3 x' C4 g
8 e+ z4 j* J$ q" k. _" o配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图56.2.2.4 信息打印:! p1 i3 c: E& @, l6 T( x

+ u9 K2 P  ~, w6 n7 Q! E可以看出 EC20 4G 模块识别成功,并且虚拟出 5 个 USB 设备,分别为 ttyUSB0~ttyUSB4。
, a4 M4 m$ V+ \* F56.3 EC20 4G  模块联网测试
3 B1 M" j7 u  _$ v( D56.3.1 PPP  软件包编译
& V1 T0 j0 z9 D首先拷贝 ppp-2.4.4.tar.gz 到 Ubuntu 下,然后执行下面的命令解压:
5 ^& `8 \; \: m' O1 g1 c. L8 G+ Utar -xvf ppp-2.4.4.tar.gz7 X( Q% d) @5 [6 f
解压完成得到 ppp-2.4.4 目录,进入 ppp-2.4.4 目录如图 56.3.1.1 所示:7 T: k4 ?( Y* a+ O4 P
8 I# o# \) n2 q3 Y
使用 configure 进行配置,命令如下:
+ t+ b# ~1 c0 h: b$ C5 A./configure
4 C5 }# E, e' z/ T9 J结果如图 56.3.1.2 所示:3 p! c4 b" `7 v
# u3 e2 |* c- K: H; ?& |
配置完成后,使用下面的命令进行编译:) d' p8 X3 N' |. L: M3 _) \
make CC=ARM-linux-gnueabihf-gcc6 o% t4 ^! \# _9 G  {
“CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板 Linux 内核使用同一个编译器。
1 w% `0 m# j& j7 J: @编译完成如图 56.3.1.3 所示:
0 L" i8 f; j6 {* l
" Z/ j" b  u, a  p( f+ X3 h. Q编译完成后,分别在 chat、pppd、pppdump、pppstats 四个目录下生成 chat、pppd、pppdump、pppstats可执行文件,用于后面的 4G 模块联网测试。
3 w7 |  D# A8 ?, d  S! R! J* C) e8 h56.3.2 EC20 4G  模块联网测试
9 E  o, N' [; v6 B& W8 V, f/ l首先安装好 EC20 4G 模块、天线和 SIM 卡,如图 56.3.2.1 所示:
+ K- c: ^( G0 b- h3 O- T. O' |& n
开发板准备好后启动 Linux 系统,待系统启动后,进入/etc 目录,然后创建 ppp 目录,具体命令如下:2 [1 ^& [/ s% g" {' P0 u1 f8 Q
cd /etc //进入 etc 目录
: C: F3 t) R7 ?! y8 V4 Y9 Ymkdir ppp //创建 ppp 目录1 o' l  G8 K+ z1 A
目录创建完后,使用 U 盘将上一节编译的 chat、pppd、pppdump、pppstats 四个可执行文件拷贝到/etc/ppp目录下,如图 56.3.2.2 所示:
6 j% y8 K5 e. F- |5 W. y* B; d- i( J) J% M! T7 _
然后在/etc/ppp 目录下创建 pap-secrets 文件,使用下面命令:
* a' d7 g8 {% [/ U0 v( N* K3 Dtouch pap-secrets //创建 pap-secrets 文件( m; o) d7 [& U
vi pap-secrets //打开 pap-secrets 文件9 l( ]2 J: D& W; r) U- M
输入如下内容:9 o: ~; t( j! O
# Secrets for authentication using PAP: {$ s; @% V& h) ~3 F
# client server secret IP addresses' Z4 ?# J" s" ]# t5 D# b
card * card ** P2 C# Y% l, V5 Q& [; y! j
在 4G 信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是 card,密码是 card。) ~; z1 C' ?6 {7 x* r& n( R
然后创建新文件夹 peers,命令“mkdir peers”。
3 y1 K, b3 A7 r/ F  s/ k进入 peers 文件夹,创建 wcdma 文件,命令如下:
, x( p' E, `. F/ D4 }) ~  U+ [. qtouch wcdma
! j, I' ^, Y# v& m; {$ c4 w9 `& b" n) @vi wcdma, V0 q  v  f2 m2 u# V
输入如下内容:" C4 ^7 {5 _: G- i2 I0 O% Y' f
# /etc/ppp/peers/wcdma& Y- z4 x; Y1 Q6 X
# This is pppd script for China liantong/ c7 b8 S4 v1 ]6 s9 W
# Usage: root>pppd call wcdma
; \: J4 Z7 o4 t9 lhide-password
$ i! E) D0 `% jnoauth
! J0 K  Q' E/ w# v* h% sconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'! h; B  ~% Q& p) m) |
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'2 \* P, M+ v( c& m7 w& P  _  \
debug1 F  B- k" m% E' y( A2 ~
/dev/ttyUSB2% C$ s" h6 |! C7 X- z+ x; J& N& B
115200
3 d2 n6 z, _/ Z# O! B4 O6 ndefaultroute, W; w% s+ ?3 b% f3 Z2 v# }
noipdefault) m' g8 m- V5 ~" E1 t1 K+ r
novj
; z# c% f7 M6 U8 R5 ~3 |3 V3 enovjccomp: h8 F( p/ V5 d9 e4 b6 {
noccp
% `9 N3 H: q- Mipcp-accept-local) B' X, L# I; e
ipcp-accept-remote
% j/ A# a7 d$ J$ `* Blocal! }. L0 F4 C6 _
lock' G1 o. e+ s# o  ~/ x
dump
% ^3 X' E0 q) g5 X! }* rnodetach) @8 i4 v( ~) A2 a. F
user "card"
. ?" T. Y6 a3 u* |! q# @8 C" B1 s; tpassword "card"
0 Z5 `; Z" @: Y7 G# ]( S8 m& ~: Hcrtscts
1 J; m2 g" @2 p- Q. L& u" s1 c  gremotename 3gppp
3 c) O; r7 Z$ @ipparam 3gppp. T7 @! K% c  t9 Y: b# O: q
usepeerdns4 c* s4 T9 L' F' P- `+ d$ j
需要注意的是使用/dev/ttyUSB2 设备节点文件。/ m6 z( ]5 O2 ?4 A1 w+ y
“user "card"”和“password "card"”对应了 pap-secrets 文件中的用户名和密码。5 |; D1 y' o9 m" t$ }6 l# N5 A
创建 wcdma-chat-connect 文件:. t8 ~- n8 n  Q
touch wcdma-chat-connect
5 z2 n& m) \+ T$ e8 b+ z% cvi wcdma-chat-connect
( |+ b3 U& }4 X6 N) h内容如下:( f% b2 j* y7 J) b8 K* x
ABORT "BUSY"
3 B+ M' c6 q  A4 s9 b  T, s) cABORT "NO CARRIER"- Y5 J, R. E1 `) v* F% C
ABORT "NO DIALTONE"- U2 ~5 z" h* E/ c" K
ABORT "ERROR"( ]$ F" K& H  ]) n7 _
ABORT "NO ANSWER"! a4 w& ?* {5 i2 @% x+ L6 d
TIMEOUT 1201 p! ~: v* ~$ k& h2 X
"" AT3 x$ Z) `) {6 C
OK \rATZ
1 I% z& K% ~  {6 SOK \rAT+CGDCONT=1,"IP","3gnet",,0,08 V3 }' s: n0 i+ E( y, c# l
OK-AT-OK ATDT*99#
& d8 R! q  k5 ^& h9 `CONNECT \d\c8 u8 x* s7 x4 M# [& D! u
在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0. C5 X% m1 c2 D9 P9 h
OK-AT-OK ATDT*99#
+ e; `' @8 `% D3 G7 r这两句话会根据移动联通或者是电信而变化,这里用的是移动 4G。1 Y( r% ]- z2 [3 j5 ~
创建 wcdma-chat-disconnect 文件:- W0 e. ?: B7 ?; y# @' j9 ~
touch wcdma-chat-disconnect
' O( i5 [9 p3 |2 Z  v4 J& {vi wcdma-chat-disconnect
! T6 ~& h; _2 k1 h, `内容如下:2 O$ l& D! S( {9 A/ z4 O( y
ABORT "ERROR"0 u: O0 M+ p' }8 y* ~6 M" Z
ABORT "NO DIALTONE"
2 M% `, Q2 h% R8 q3 q) s+ b. GSAY "INSending break to the modem\n"( U8 g# K6 E* r5 z
""\k"
5 N1 t4 D" g& P$ M/ ?- c0 N""+++ATH"
2 l' r$ w2 n9 s! s/ A3 mSAY "\nGood bye\n"( L4 ^1 e) A4 ]# c% l* |
所需文件创建完成后,就可以进行联网测试了。
" V8 J9 Z( y) A0 u! J/ {) }0 M, Y& k首先关闭 eth0 设备,因为和 EC20 4G 模块有冲突,同时只能使用一个设备。命令如下:! f4 Y6 X( p2 z" ]5 D
ifconfig eth0 down! A+ X( g" ]: i, s5 l$ l1 O# ]
然后在/etc/ppp 目录下输入指令:
9 L7 H4 S! a* c9 l* N./pppd call wcdma &, L5 l' z  k( p# a# Y" s, F8 T
结果如图 56.3.2.3 所示:& {, `5 s3 r/ o8 N1 a$ M% J
  D9 `+ M# R4 m" L
上图表示联网成功后的 IP 地址为 10.47.135.182,使用 ifconfig 命令查看结果如图 56.3.2.4:
& |7 {+ v. c: C  ]- A5 k! q' `! u6 ~: o8 @1 K
这时使用 ping 命令查看能够 ping 通外网,命令如下:
( A5 f7 z! e' a0 _7 z6 Z( Iping 202.108.22.5 -c 4; S  N  ?; _! }/ t: u. R  E5 \: @5 ^
“-c”选项指定 ping 网络的次数。“202.108.22.5”是百度的 IP 地址,结果如图 56.3.2.5:
" B8 K) q2 ?+ v" ^9 H* l2 Z* F1 v4 U3 x6 t7 ]
发现不能 ping 通外网,愿意是因为 DNS 没有设置对,在 etc 下有一个文件 resolv.conf 。这个文件是用来放 DNS 的。就是这个里面的域名没有设置对。然而在 eth0 的运行脚本里强制性的把这个文件复制为了192.168.1.1 。这就造成即便在这里文件里设置上正确的 DNS,再开机后也会发现这个文件里已经是192.168.1.1 了。这是因为 eth0,是开机自启动的。
* f( _- ~8 d( ~9 A$ R# z( @% E我们在/etc 目录下新建一个文件 resolv.conf_back:
, @- ~1 d0 f( b4 Jtouch resolv.conf_back, E+ W$ }# w; a% z7 J' w1 [  D( J
vi resolv.conf_back
- q! ?8 X+ m3 b/ H; l输入如下内容:  m" t4 d8 M" Y) k8 N
nameserver 202.99.160.68
  D5 n( P4 F" j0 t$ |8 J( D$ @nameserver 221.130.33.52
& Z6 W# J: ^  g, `. T2 ~+ M! Q% Q/ cnameserver 221.130.33.60* F' A# b+ S) I' ^( ^3 _) j7 W! d
nameserver 192.168.1.1
, r; z6 y, t: f' g7 T8 J然后在新建一个脚本文件 ppp0:# r5 V! `7 {) T2 c
touch ppp07 q! C& G6 ?0 W3 o; Y: L  c2 }
vi ppp0
6 h# I( f$ H( R, i9 ^输入如下内容:" v, N+ i2 X( p: {" w" V( c1 z6 J* Y  d
#!/bin/sh2 j/ U' |6 Y4 D+ i9 z
ifconfig eth0 down, q! {3 S- R4 t9 M! b1 K2 U$ }& j
cp /etc/resolv.conf_back /etc/resolv.conf3 v+ o" {! B+ q+ n$ K6 W
/etc/ppp/pppd call wcdma&
& ^3 h7 V$ `& t  N  u修改 ppp0 文件的执行权限:  y( z2 r2 C! C  r# y
chmod 777 ppp0/ ]+ K! y2 W9 K* t8 o
这里第一步是将 eth0 关掉,第二步将我们的 DNS 文件覆盖到 resolv.conf 上,第三步运行。然后重新开机,执行 ppp0 脚本,命令如下:
5 B& s& b8 k$ f- |- D) O4 n1 i0 Y3 ~, u/etc/ppp0# y* o4 {8 k$ y" ^: m) w. s5 G3 C' n
脚本执行成功后,重新使用 ping 命令,结果如图 56.3.2.6 所示:
/ a, k3 Z# Q% H& u* J
- L- {2 v8 d/ Q6 m1 k图片显示可以正常 ping 通百度的 IP 地址。至此 EC20 4G 模块就可以正常使用了。
2 }$ |5 |9 {; i" M' n7 o7 H% ?1 x0 B% m6 A& x/ H. k6 u6 U" d
0 O2 M0 u; g- r7 w5 f0 p( H3 d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 13:47 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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