1. 程式人生 > >ARM平臺嵌入式Linux下使用3G/4G 模組

ARM平臺嵌入式Linux下使用3G/4G 模組

簡介

隨著工業發展,嵌入式裝置接入網路的需求日益增多,在沒有有線或者無線乙太網的環境下,直接通過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裝置

[email protected]:/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

[email protected]:/home# ./usb_modeswitch -c 12d1:1f01

……

[email protected]:/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檢視

[email protected]:/home# lsusb

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

……

d). 檢視網路,出現eth1,正確獲取ip並連線到網路,下面就可以用使用乙太網同樣方法使用網路了

[email protected]:/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). 驗證網路連線

[email protected]:/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

[email protected]:/home# ./usb_modeswitch -c 12d1\:1f01

……

[email protected]:/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 檢視

[email protected]:/home# lsusb

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

……

c). 測試連線

[email protected]:/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

[email protected]:/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

[email protected]:/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'

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

[email protected]:/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

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

[email protected]:/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). 連線網路

[email protected]:/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

檢視網路狀態

[email protected]:/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). 測試網路

[email protected]:/etc/ppp/peers# echo nameserver 221.12.1.227 > /etc/resolv.conf                 //設定DNS伺服器

[email protected]:/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。

參考文件

相關推薦

ARM平臺嵌入式Linux使用3G/4G 模組

簡介 隨著工業發展,嵌入式裝置接入網路的需求日益增多,在沒有有線或者無線乙太網的環境下,直接通過3G/4G Modem連線運營商網路來接入網際網路不失為一個好方法,本文就著重介紹基於ARM平臺的嵌入式裝置在Embedded Linux下使用3G/4G Modem的方法。 目

ARM平臺嵌入式LinuxSPI裝置連線

在嵌入式ARM平臺裝置上,經常有在一個SPI bus上面掛接一個或者多個SPI裝置的需求,由於掛載一個裝置的情況比較簡單,本文主要就在嵌入式Linux環境下掛載多個SPI裝置進行說明。 本文所採用的硬體為Toradex 公司Colibri VF61計算機模組和開發載板,

嵌入式ARM平臺基於Linux配置應用程式開機自啟動(fluxbox參考)

本文轉載於 http://www.eefocus.com/toradex/blog/18-01/426601_a6317.html,特此感謝 By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統

嵌入式ARM平臺基於Linux配置24bit RGB輸出

By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統進行開發已經越來越成為主流,本文就著重演示在EmbeddedLinux下配置24bit RGB LCD顯示。 本文所演示的平臺來自於ToradexColibri iMX6

ARM-linux上實現4G模組PPP撥號上網

轉自 http://blog.sina.com.cn/s/blog_7880d3350102wb92.html 在ARM平臺上實現4G模組的PPP撥號上網,參考網上的資料和自己的理解,從一無所知到開發完成花了一週多。最後看到ARM板ping通www.baidu.com時甚

嵌入式ARM平臺基於Linux配置應用程式開機自啟動

By Toradex秦海 1). 簡介 嵌入式ARM平臺裝置採用Embedded Linux作業系統進行開發已經越來越成為主流,本文就著重說明在EmbeddedLinux下配置應用程式開機自啟動的方法,並就基於Qt的應用程式卡機自啟動指令碼的配置進一步說明。 本文所演示的

嵌入式LinuxQt的中文顯示

tdi IT too file ron main.c nts 環境變量 copy 一般情況下,嵌入式Qt界面需要中文顯示,下面總結自己在項目中用到的可行的辦法 1,下載一種中文簡體字體,比如我用的是”方正準圓簡體“,把字體文件放在ARM開發板系統的Qt字庫中,即/usr/l

Linux4G虛擬地址空間

在windows下4G 地址空間中低2G,0x00000000-0x7FFFFFFF 是使用者地址空間,4G地址空間中高2G,0x80000000-0xFFFFFFFF 是 系統地址空間。訪問 系統地址空間需要程式有ring0的許可權。而Linux對4G空間的劃分不同與windows。linu

linux的應用模組傳參及驅動模組傳參的區別

在使用者態下程式設計可以通過main(intargc,char*argv[])來傳遞命令列引數,而編寫一個核心模組則通過module_param ()來傳遞引數 一. 應用程式命令列傳參 執行結果如下: 二. 核心模組傳參 module_param(name,

LVGUI在嵌入式LINUX的編譯

    本文比較亂,算是一個隨筆,記錄一下將LVGUI交叉編譯到MIPS架構的嵌入式Linux裝置中,主要關於自己編寫對應的makefile來對LVGUI進行編譯。 首先,Makefile 最好和lv的幾個工程目錄在同一目錄下,如下圖: 其次,為了讓標頭檔案(h檔

嵌入式LinuxCAN匯流排配置

題背景:本人開發板使用的是迅為iTOP4412精英版,額外購買的CAN/485模組,如下圖:   但是插上模組之後,在終端使用ifconfig can0命令發現開發板讀不到CAN裝置,顯示“ifconfig: SIOCGIFFLAGS: No such device”。如下圖:   在重新配置核心後,可以讀出

Linux移植EC20 4G模組驅動簡易教程

關於4G模組常見的品牌與型號: 品牌 型號 市場價格 晶片組 狀態 HUAWEI ME909s-821 210

嵌入式LinuxALSA音訊架構ALSA-lib移植與編譯心得

*************************************************************************************************************************** 作者:EasyWave

Linux編譯核心模組的Makefile的幾種寫法

對一個簡單的模組: [email protected]:~/works/kernel/DeviceDrivers/1/modules$ cat simple.c #include <linux/init.h> #include <linux/mo

DM368開發 -- 華為3G/4G模組移植

一、模組介紹用的是華為 ME909s-821 Mini PCIe。 ME909s-821 Mini PCIe是ME909s-821的變形版本,標準Mini PCIe封裝;支援下行150Mbps,上行50Mbps的傳輸速率;提供高質量的語音、簡訊功能;豐富的擴充套件功能:FOT

嵌入式Linux串列埠除錯

By Toradex秦海 1). 簡介 UART串列埠是嵌入式裝置最為常用的除錯和通訊介面之一,無論是RS232還是RS422/485都有著非常廣泛的應用,因此本文就基於嵌入式Linux演示在User Space進行串列埠除錯。 本文所演示的平臺來自於Toradex Co

嵌入式Linux中文字型顯示

By Toradex 胡珊逢 1). 簡介 嵌入式平臺預設釋出的嵌入式Linux版本通常並不包含中文字型支援,本文就通過Toradex計算機模組平臺來演示如何新增中文字型的顯示,因為Toradex的Linux釋出是基於OpenEmbedded/Yocot 專案編譯的,因此這

基於嵌入式linux的libcurl開發

1、ubuntu 交叉編譯環境搭建: 原始碼:curl-7.5.31.tar.gz (https://curl.haxx.se/download.html) 交叉編譯環境:arm-none-linux-gnueabi- [email protected]

嵌入式LinuxGstreamer程式設計示例

By Toradex秦海 1). 簡介 Gstreamer多媒體開發框架是當前嵌入式Linux裝置最為常用的多媒體應用處理平臺,關於Gstreamer開發框架的介紹請參考我們過往發表的其他相關文章,這裡不再贅述而是直接展示使用C語言基於Gstreamer進行攝像頭處理的示例

嵌入式Linux最簡單驅動模組編譯與剖析

# 最簡單的核心模組: #include<linux/module.h> #include<linux/kernel.h> static int my_driver_init(void) { printk("hello\n"); return