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

丶灬走出姿态 提交于 2020-12-21 17:32:01

前面的章节中学习了如何使用有线网络或者使用 wifi,但是使用无线网络或者 wifi 有许多环境限制,这种时候就可以使用 4G 模块来上网。在本章中学习一下如何使用 4G 模块实现上网功能。
56.1 4G  网络连接
对于嵌入式 Linux 而言,4G 网络连接是一个比较容易实现的功能,大多数的 4G 模块接口都是 MiniPCIE接口,但是深入了解一下就会发现,4G 模块的通信接口都是 USB,所以 4G 模块的驱动就是 USB 驱动,只要 USB 驱动正常,4G 模块在硬件上就能正常通信。下面看一下 4G 模块的硬件原理图:


在原理图中,U25 是 4G 模块的 MiniPCIE 接口,然后通信引脚会接到 U15 的 HUB 芯片上,所以 4G 模块会被识别成 USB 设备,CON5 是 SIM 卡接口,在使用 4G 模块时,需要先插入 SIM 卡。在 i.MX6UL 终结者开发板上使用的 EC20 4G 模块,如图 56.1.3 所示:

56.2 EC20 4G  模块配置
56.2.1  添加 USB  设备信息
要使用 EC20 4G 模块首先需要在 Linux 内核中添加 EC20 的 USB 信息,这样内核启动后,才能正确识别
EC20 4G 模块。打开 Linux 内核下的 drivers/usb/serial/option.c 文件,添加如下信息:
1809 /* add support EC220 4G Module */
1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
1815 /* end add */
其中第 1813 行是 EC20 4G 模块的 USB 信息。
56.2.2 Linux  内核配置
添加完 EC20 4G 模块的 USB 信息后,需要修改 Linux 内核配置来支持 USBNET 功能。具体配置如下:
Device Drivers --->

  • Network device support --->
    <*> USB Network Adapters --->
    <*> Multi-purpose USB Networking Framework
    配置如图 56.2.2.1 所示:

    接下来我们还需要使能 USB 串口 GSM、CDMA 驱动,配置路径如下:
    Device Drivers --->
  • USB support --->
    <*> USB Serial Converter support --->
    <*> USB driver for GSM and CDMA modems
    配置如图 56.2.2.2 所示:

    然后配置 ppp,配置路径如下:
    Device Drivers --->
  • Network device support --->
    <*> PPP (point-to-point protocol) support
    <*> PPP BSD-Compress compression
    <*> PPP Deflate compression
  • PPP filtering
    <*> PPP MPPE compression (encryption)
  • PPP multilink support
    <*> PPP over Ethernet
    <*> PPP support for async serial ports
    <*> PPP support for sync tty ports
    配置如图 56.2.2.3 所示:

    配置完成后,重新编译内核,然后使用新的内核启动开发板。如果配置成功开发板启动后会有如图56.2.2.4 信息打印:

    可以看出 EC20 4G 模块识别成功,并且虚拟出 5 个 USB 设备,分别为 ttyUSB0~ttyUSB4。
    56.3 EC20 4G  模块联网测试
    56.3.1 PPP  软件包编译
    首先拷贝 ppp-2.4.4.tar.gz 到 Ubuntu 下,然后执行下面的命令解压:
    tar -xvf ppp-2.4.4.tar.gz
    解压完成得到 ppp-2.4.4 目录,进入 ppp-2.4.4 目录如图 56.3.1.1 所示:

    使用 configure 进行配置,命令如下:
    ./configure
    结果如图 56.3.1.2 所示:

    配置完成后,使用下面的命令进行编译:
    make CC=arm-linux-gnueabihf-gcc
    “CC=arm-linux-gnueabihf-gcc”指定编译器,和开发板 Linux 内核使用同一个编译器。
    编译完成如图 56.3.1.3 所示:

    编译完成后,分别在 chat、pppd、pppdump、pppstats 四个目录下生成 chat、pppd、pppdump、pppstats可执行文件,用于后面的 4G 模块联网测试。
    56.3.2 EC20 4G  模块联网测试
    首先安装好 EC20 4G 模块、天线和 SIM 卡,如图 56.3.2.1 所示:

    开发板准备好后启动 Linux 系统,待系统启动后,进入/etc 目录,然后创建 ppp 目录,具体命令如下:
    cd /etc //进入 etc 目录
    mkdir ppp //创建 ppp 目录
    目录创建完后,使用 U 盘将上一节编译的 chat、pppd、pppdump、pppstats 四个可执行文件拷贝到/etc/ppp目录下,如图 56.3.2.2 所示:

    然后在/etc/ppp 目录下创建 pap-secrets 文件,使用下面命令:
    touch pap-secrets //创建 pap-secrets 文件
    vi pap-secrets //打开 pap-secrets 文件
    输入如下内容:
    # Secrets for authentication using PAP
    # client server secret IP addresses
    card * card *
    在 4G 信号在通信时候有一个密码的比对,密码对了就可以通信了。上面显示用户是 card,密码是 card。
    然后创建新文件夹 peers,命令“mkdir peers”。
    进入 peers 文件夹,创建 wcdma 文件,命令如下:
    touch wcdma
    vi wcdma
    输入如下内容:
    # /etc/ppp/peers/wcdma
    # This is pppd script for China liantong
    # Usage: root>pppd call wcdma
    hide-password
    noauth
    connect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
    disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
    debug
    /dev/ttyUSB2
    115200
    defaultroute
    noipdefault
    novj
    novjccomp
    noccp
    ipcp-accept-local
    ipcp-accept-remote
    local
    lock
    dump
    nodetach
    user "card"
    password "card"
    crtscts
    remotename 3gppp
    ipparam 3gppp
    usepeerdns
    需要注意的是使用/dev/ttyUSB2 设备节点文件。
    “user "card"”和“password "card"”对应了 pap-secrets 文件中的用户名和密码。
    创建 wcdma-chat-connect 文件:
    touch wcdma-chat-connect
    vi wcdma-chat-connect
    内容如下:
    ABORT "BUSY"
    ABORT "NO CARRIER"
    ABORT "NO DIALTONE"
    ABORT "ERROR"
    ABORT "NO ANSWER"
    TIMEOUT 120
    "" AT
    OK \rATZ
    OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
    OK-AT-OK ATDT*99#
    CONNECT \d\c
    在这里 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
    OK-AT-OK ATDT*99#
    这两句话会根据移动联通或者是电信而变化,这里用的是移动 4G。
    创建 wcdma-chat-disconnect 文件:
    touch wcdma-chat-disconnect
    vi wcdma-chat-disconnect
    内容如下:
    ABORT "ERROR"
    ABORT "NO DIALTONE"
    SAY "INSending break to the modem\n"
    ""\k"
    ""+++ATH"
    SAY "\nGood bye\n"
    所需文件创建完成后,就可以进行联网测试了。
    首先关闭 eth0 设备,因为和 EC20 4G 模块有冲突,同时只能使用一个设备。命令如下:
    ifconfig eth0 down
    然后在/etc/ppp 目录下输入指令:
    ./pppd call wcdma &
    结果如图 56.3.2.3 所示:

    上图表示联网成功后的 IP 地址为 10.47.135.182,使用 ifconfig 命令查看结果如图 56.3.2.4:

    这时使用 ping 命令查看能够 ping 通外网,命令如下:
    ping 202.108.22.5 -c 4
    “-c”选项指定 ping 网络的次数。“202.108.22.5”是百度的 IP 地址,结果如图 56.3.2.5:

    发现不能 ping 通外网,愿意是因为 DNS 没有设置对,在 etc 下有一个文件 resolv.conf 。这个文件是用来放 DNS 的。就是这个里面的域名没有设置对。然而在 eth0 的运行脚本里强制性的把这个文件复制为了192.168.1.1 。这就造成即便在这里文件里设置上正确的 DNS,再开机后也会发现这个文件里已经是192.168.1.1 了。这是因为 eth0,是开机自启动的。
    我们在/etc 目录下新建一个文件 resolv.conf_back:
    touch resolv.conf_back
    vi resolv.conf_back
    输入如下内容:
    nameserver 202.99.160.68
    nameserver 221.130.33.52
    nameserver 221.130.33.60
    nameserver 192.168.1.1
    然后在新建一个脚本文件 ppp0:
    touch ppp0
    vi ppp0
    输入如下内容:
    #!/bin/sh
    ifconfig eth0 down
    cp /etc/resolv.conf_back /etc/resolv.conf
    /etc/ppp/pppd call wcdma&
    修改 ppp0 文件的执行权限:
    chmod 777 ppp0
    这里第一步是将 eth0 关掉,第二步将我们的 DNS 文件覆盖到 resolv.conf 上,第三步运行。然后重新开机,执行 ppp0 脚本,命令如下:
    /etc/ppp0
    脚本执行成功后,重新使用 ping 命令,结果如图 56.3.2.6 所示:

    图片显示可以正常 ping 通百度的 IP 地址。至此 EC20 4G 模块就可以正常使用了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!