原创 ARM平台嵌入式Linux下使用3G/4G 模块

2016-4-12 14:47 480 2 2 分类: MCU/ 嵌入式

简介

随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或者无线以太网的环境下,直接通过3G/4G Modem连接运营商网络来接入互联网不失为一个好方法,本文就着重介绍基于ARM平台的嵌入式设备在Embedded Linux下使用3G/4G Modem的方法。

目前市面上的3G/4G modem和主机的连接方式主要有串口、USB和mini-PCIE,串口模块比较传统且使用比较简单,而mini-PCIE在工业设备中目前应用还不广泛,因此本文使用USB 3G/4G modem来进行演示。

硬件准备

嵌入式平台基于Toradex Colibri i.MX6工业产品级ARM核心板搭配Colibri开发载板,Embedded Linux采用Toradex官方发布兼容Yocto Project 的Linux V2.5版本。

3G Modem使用华为 E303s WCDMA Modem,支持中国联通的3G网络

Linux Kernel准备

关于Linux kernel源代码下载及基本编译更新操作请参考这里,本文不再赘述,只简单列出操作如下:

a). 下载Linux kernel源代码

b). 下载安装Toolchain,并link到 “ ~/gcc-linaro “ 目录

$ wget http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro

 

c). 设置环境变量

$ export ARCH=arm

$ export PATH=~/gcc-linaro/bin/:$PATH

$ export CROSS_COMPILE=arm-linux-gnueabihf-

 

d). 配置

$ make colibri_imx6_defconfig

$ make menuconfig      //添加下面列出功能

--------------------

  • 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

     

  • USB support  --->

           <*>     USB Modem (CDC ACM) support

     

  • USB support  --->

        <*>   USB Serial Converter support  --->

                  <*>   USB driver for GSM and CDMA modems

    --------------------

     

    e). 重新编译kernel image

    $ make -j3 uImage LOADADDR=10008000 2>&1 | tee build.log

     

    f). 升级目标板

    根据本章节开始提供的参考升级目标板到新的kernel image

    相关软件准备

    1). PPP

    Toradex image默认已经安装,如果其他ARM平台image也是基于Yocto/OpenEmbedded环境编译,可以在local.conf文件中添加如下选项后编译

    -----------------

    IMAGE_INSTALL_append = " ppp"

    -----------------

    2). usb-modesiwtch-2.3.0

    a). 需要libusb-1.0.x,先从这里下载源文件并解压

    b). 使用上一章节配置的ToolChain如下设置交叉编译libusb

    $ sudo CC="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-gcc" CXX="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-g++" ./configure --host=arm-linux-gnueabihf --prefix=/home/xxx/gcc-linaro --disable-udev

    $ make

    $ make install

    c). 从这里下载usb-modesiwtch并解压

    d). 如下修改usb-modesiwtch 目录下Makefile

    ----------------

    CC          = ~/gcc-linaro/bin/arm-linux-gnueabihf-gcc

    CFLAGS      += -Wall -I/home/xxx/gcc-linaro/include -L/home/xxx/gcc-linaro/lib

    ----------------

    e).交叉编译usb-modesiwtch

    $ make

    f). 从这里下载usb-modeswitch-data,和上面步骤编译出的usb-modesiwtch可执行文件一起上传到目标板

    配置Modem连接网络

    目前比较新的3G/4G都支持Ethernet模式和Fallback模式,而老一些的模块只支持Fallback模式,请根据所需模块情况自行参考下面操作。

    1). Ethernet模式

    a). 将E303s 3G Modem连接目标板,由于Modem上包含为了给Windows系统提供驱动而部署的存储分区,Linux默认将设备识别成USB Mass Storage设备

    root@colibri-imx6:/home# lsusb

    Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode)

    ……

    b). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件

    -----------------------

    # Huawei E303s Ethernet Mode

    DefaultVendor=0x12d1

    DefaultProduct=0x1f01

    TargetVendor=0x12d1

    TargetProduct=0x14db

    MessageEndPoint = "0x01"

    MessageContent="55534243123456780000000000000a11062000000000000100000000000000"

    ------------------------

    c). 使用usb-modeswitch工具将modem设置为Ethernet mode

    root@colibri-imx6:/home# ./usb_modeswitch -c 12d1:1f01

    ……

    root@colibri-imx6:/home# [  840.027676] usb 1-1.1: USB disconnect, device number 4

    [  840.284299] usb 1-1.1: new high-speed USB device number 6 using ci_hdrc

    [  840.427810] cdc_ether 1-1.1:1.0 eth1: register 'cdc_ether' at usb-ci_hdrc.0-1.1, CDC Ethernet Device, 58:2c:80:13:92:63

     

    lsusb查看

    root@colibri-imx6:/home# lsusb

    Bus 001 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131

    ……

    d). 查看网络,出现eth1,正确获取ip并连接到网络,下面就可以用使用以太网同样方法使用网络了

    root@colibri-imx6:/home# ifconfig

    ……

    eth1      Link encap:Ethernet  HWaddr 58:2C:80:13:92:63 

              inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0

              inet6 addr: fe80::5a2c:80ff:fe13:9263/64 Scope:Link

              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

              RX packets:37 errors:0 dropped:0 overruns:0 frame:0

              TX packets:69 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000

              RX bytes:6899 (6.7 KiB)  TX bytes:10381 (10.1 KiB)

    ……

    e). 验证网络连接

    root@colibri-imx6:/home# ping www.baidu.com

    PING www.baidu.com (61.135.169.121): 56 data bytes

    64 bytes from 61.135.169.121: seq=0 ttl=51 time=88.261 ms

    64 bytes from 61.135.169.121: seq=1 ttl=51 time=77.998 ms

    64 bytes from 61.135.169.121: seq=2 ttl=51 time=68.410 ms

    64 bytes from 61.135.169.121: seq=3 ttl=51 time=68.242 ms

    64 bytes from 61.135.169.121: seq=4 ttl=51 time=68.166 ms

    2). Fallback模式

    有一些较老型号的2G/3G Modem只支持这个模式,无需再用usb-modeswitch转换,可以直接参考下面转换后的操作部分。

    a). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件

    -----------------------

    # Huawei E303s Fallback Mode

    DefaultVendor=0x12d1

    DefaultProduct=0x1f01

    TargetVendor=0x12d1

    TargetProduct=0x1001

    MessageEndPoint = "0x01"

    MessageContent="55534243123456780000000000000011063000000100010000000000000000"

    NoDriverLoading=0

    ------------------------

    b). 使用usb-modeswitch工具将modem设置为Fallback mode

    root@colibri-imx6:/home# ./usb_modeswitch -c 12d1\:1f01

    ……

    root@colibri-imx6:/home# [ 2090.566190] usb 1-1.1: new high-speed USB device number 8 using ci_hdrc

    [ 2090.701092] option 1-1.1:1.0: GSM modem (1-port) converter detected

    [ 2090.713488] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0

    [ 2090.723517] option 1-1.1:1.1: GSM modem (1-port) converter detected

    [ 2090.731817] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1

    [ 2090.740318] option 1-1.1:1.2: GSM modem (1-port) converter detected

    [ 2090.748184] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB

     

    lsusb 查看

    root@colibri-imx6:/home# lsusb

    Bus 001 Device 008: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem

    ……

    c). 测试连接

    root@colibri-imx6:/home# ls -l /dev/ttyUSB*

    crw-rw----    1 root     dialout   188,   0 Apr 11 09:49 /dev/ttyUSB0

    crw-rw----    1 root     dialout   188,   1 Apr 11 09:49 /dev/ttyUSB1

    crw-rw----    1 root     dialout   188,   2 Apr 11 09:49 /dev/ttyUSB2

     

    root@colibri-imx6:/home# minicom -D /dev/ttyUSB0

    ------------------

    Welcome to minicom 2.7

    OPTIONS: I18n

    Compiled on Nov  3 2015, 04:06:26.

    Port /dev/ttyUSB0, 09:53:44

    Press CTRL-A Z for help on special keys

     

    AT

    OK

    --------------------

    d). 编写ppp连接配置文件wcdma, wcdma-chat-connect和wcdma-chat-disconnect

    root@colibri-imx6:/etc/ppp/peers# vi wcdma

    -----------------

    nodetach

    lock

    /dev/ttyUSB0

    115200

    user "card"

    password "card"

    crtscts

    #hide-password

    show-password

    usepeerdns

    noauth

    noipdefault

    novj

    novjccomp

    noccp

    defaultroute

    ipcp-accept-local

    ipcp-accept-remote

    connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'

    disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'

    ----------------------

     

    root@colibri-imx6:/etc/ppp/peers# 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

    --------------------------

     

    root@colibri-imx6:/etc/ppp/peers# vi wcdma-chat-disconnect

    -----------------------

    ABORT "ERROR"

    ABORT "NO DIALTONE"

    SAY "\NSending break to the modem\n"

    ""\k"

    ""+++ATH"

    SAY "\nGood bay\n"

    ---------------------------

    e). 连接网络

    root@colibri-imx6:/etc/ppp/peers# pppd call wcdma

    ……

    ATDT*99#^M^M

    CONNECT

     -- got it

     

    send (\d)

    Serial connection established.

    Using interface ppp0

    Connect: ppp0 <--> /dev/ttyUSB0

    CHAP authentication succeeded: Welcome!!

    CHAP authentication succeeded

    Could not determine remote IP address: defaulting to 10.64.64.64

    local  IP address 10.91.228.253

    remote IP address 10.64.64.64

    primary   DNS address 221.12.1.227

    secondary DNS address 221.12.33.227

     

    查看网络状态

    root@colibri-imx6:/etc/ppp/peers# ifconfig

    ……

    ppp0      Link encap:Point-to-Point Protocol 

              inet addr:10.23.107.61  P-t-P:10.64.64.64  Mask:255.255.255.255

              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

              RX packets:6 errors:0 dropped:0 overruns:0 frame:0

              TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:3

              RX bytes:84 (84.0 B)  TX bytes:102 (102.0 B)

    f). 测试网络

    root@colibri-imx6:/etc/ppp/peers# echo nameserver 221.12.1.227 > /etc/resolv.conf                 //设置DNS服务器

    root@colibri-imx6:/etc/ppp/peers# ping www.baidu.com

    PING www.baidu.com (61.135.169.121): 56 data bytes

    64 bytes from 61.135.169.121: seq=0 ttl=52 time=218.477 ms

    64 bytes from 61.135.169.121: seq=1 ttl=52 time=68.066 ms

    64 bytes from 61.135.169.121: seq=2 ttl=52 time=107.773 ms

    64 bytes from 61.135.169.121: seq=3 ttl=52 time=77.604 ms

    64 bytes from 61.135.169.121: seq=4 ttl=52 time=77.339 ms

     

    总结

    根据上述两种模式的测试结果,第一种Ethernet mode相对速度要更稳定一些,因此对于支持两种模式的modem更建议采用Ethernet mode;另外串口modem使用配置也可以参考Fallback mode。本文虽以E303s为例,但其他3G/4G Modem的配置也是类似,只是需要确定对应模式的Vendor ID,Product ID和Message。

    参考文档

    https://www.toradex.cn/zh_cn/computer-on-modules/colibri-arm-family/nxp-freescale-imx6

    https://www.toradex.cn/zh_cn/products/carrier-board/colibri-evaluation-carrier-board

    http://developer.toradex.com/software/linux/linux-software

    http://www.draisberghof.de/usb_modeswitch/

    http://www.cnblogs.com/ziqiuqiandao/archive/2013/06/06/3120972.html

  • 文章评论0条评论)

    登录后参与讨论
    相关推荐阅读
    hai.qin_651820742 2020-12-31 12:08
    NXP iMX8X基于Docker测试CAN接口通讯
    By Toradex秦海1). 简介随着嵌入式设备的发展,由于部署更灵活应用方便等特性,原本在网络应用中广泛使用的docker技术也慢慢在一些嵌入式设备中应用,因此本文就基于嵌入式ARM平台...
    hai.qin_651820742 2020-12-25 17:38
    CAN FD 在 iMX8 计算机模块上的应用
    ​By Toradex胡珊逢CAN 总线在工业、汽车行业具有非常广泛的应用,为网络中设备之间点对点通信提供一种可靠、稳定、经济的方案。伴随网络中设备节点的增加,由于 1Mbps&n...
    hai.qin_651820742 2020-12-11 17:21
    NXP iMX8基于嵌入式Linux部署网络浏览器
    By Toradex秦海1). 简介随着嵌入式设备的发展,网络通信在应用中越来越广泛,而在客户端,就需要可以方便访问网络服务的浏览器配置,本文就基于NXP iMX8平台演示如何在嵌入式Lin...
    hai.qin_651820742 2020-11-20 09:39
    NXP iMX8基于Qtwayland配置双屏显示
    By Toradex秦海1). 简介嵌入式平台多屏显示是比较常见的功能,在NXP iMX6上面,由于使用了基于fbdev/X11的显示接口驱动和显示服务,可以比较方便的通过framebuff...
    hai.qin_651820742 2020-11-17 10:46
    使用Squashfs和Overlayfs提高嵌入式Linux文件系统可靠性
    By Toradex胡珊逢 在使用嵌入式 Linux 系统的时,会出现由于设备意外断电引起文件系统损坏而最终使该设备无法启动的现象。为了应对这种情况,通常会从硬件设计如采...
    hai.qin_651820742 2020-10-29 14:24
    RT-Linux在IMX8上的使用
    By Toradex胡珊逢 Real-time Linux 是指在普通 Linux 内核打上 PREEMPT_RT补丁后使内核满足实时要求。下面我们将...
    广告
    我要评论
    0
    2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0
    广告
    关闭 热点推荐上一条 /6 下一条