天天看點

linux 3g撥号,嵌入式Linux系統實作3G網卡撥号

嵌入式Linux系統實作3G網卡撥号

本文介紹在嵌入式Linux中,實作3G聯網的基本方法。包括驅動配置,和聯網的過程。也對在PC上實作3G的過程進行了介紹。

硬體:3g usb子產品(華為ce189的3g網卡)+一張sim卡(電信cdma2000)

軟體系統:Linux

主要内容:

一、在pc端确認撥号功能可用

二、在嵌入式端的實作

三、其它

一、在pc端确認撥号功能可用

==================================

在windows下直接插入網卡即可自動安裝其驅動,比較簡單直覺,其實linux下連接配接也很簡單,這裡給出linux下的連接配接方式。

系統:Ubuntu 12.04

1、将sim卡插入3g網卡,再将3g網卡插入pc。

2、對3g網卡進行網絡配置

這裡有圖形和指令行兩種方式。後面在嵌入式系統中會采用指令行方式配置3g資訊。

2.1、圖形方式

通過圖形設定比較直覺,可大緻了解3g配置所需的資訊。

編輯連結->移動寬帶->添加(新連接配接名為china telecom 1)

具體配置:

(1)IP配置:自動(即ppp自動)

(2)移動寬帶:

編号:#777

使用者名:[email protected]

密碼:vnet.mobi

(3)ppp設定:

預設。

即chap、pap等鑒權方式都選中。

(4)連接配接

儲存上述配置後,即可通過點選建立的連接配接"china telecom 1"連上。

(5)确認聯網情況

ifconfig可見網絡的名字為ppp0

通過firefox即可上網。

2.2指令行腳本方式:

通過pppd撥号上網,可以對連接配接過程有更深一步的了解,且使用預先配置好的資訊,無需使用者幹預。如下

(1)pppd對cdma2000的撥号腳本

#cat /etc/ppp/peers/cdma2000ce189

#This is pppd script used by huawei ce189.

/dev/ttyUSB0

115200

crtscts

modem

debug

lock

nodetach

usepeerdns

defaultroute

noipdefault

noauth

user "[email protected]"

password "vnet.mobi"

#lcp-echo-failure 5

#lcp-echo-interval 30

#persist

0.0.0.0:0.0.0.0

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

這裡,注意,noauth選項一定要有,這裡"lcp-echo-failure 5"表示5次心跳确認失敗後會終止連接配接、"lcp-echo-interval 30"表示心跳确認時間為30秒,"persist"表示基于前面心跳失敗後,不會終止連接配接而是重新撥号。

(2)pppd撥号腳本調用的chat撥号腳本

#cat /etc/ppp/cdma2000-connect-chat

TIMEOUT 5

ABORT "DELAYED"

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

ABORT "NO CARRIER"

""   AT

"OK-+++\c-OK" ATH0

TIMEOUT 40

""   AT

OK  ATDT#777

CONNECT ""

這裡,腳本含義參見"man chat",基本每行是" "。

(3)調用pppd撥号腳本:

#pppd call cdma2000ce189

這裡,即調用前面的腳本配置并連接配接上網。結果和圖形的一樣。通過"Ctrl-C"即可斷開連接配接。

至此,即可通過圖形或指令行方式實作3g上網。

二、在嵌入式端的實作

==================================

在嵌入式闆子上實作3G連接配接過程類似,不過需要可運作在嵌入式闆上的工具。

核心版本:2.6.18

1、交叉編譯必要的工具

(1)libusb-1.0.9:

用于編譯usb-modeswitch-2.0.1

(2)usb-modeswitch-2.0.1:

用于切換網卡的模式

(3)usb-modeswitch-data-20130807

用于切換時指定切換的型号。

(4)ppp-2.4.4

用于撥号的pppd,和發送撥号指令的chat程式(可單獨編譯)。

ftp://ftp.samba.org/pub/ppp

以上程式可參考如下Makefile進行編譯:

#cat Makefile

CROSS_TOOL   :=/usr/local/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-

CC=$(CROSS_TOOL)gcc

AR=$(CROSS_TOOL)ar

LD=$(CROSS_TOOL)g++

STRIP=$(CROSS_TOOL)strip

CPLUSPLUS=$(CROSS_TOOL)g++

LIBRARY_LINK = $(CROSS_TOOL)ld -o

CUR_DIR:=$(PWD)

THE_SRC:=usb-modeswitch-2.0.1

THE_BUILD:=build_path

THE_INSTALL:=install_path

depend:

mkdir -p ${THE_BUILD}/${THE_BUILD}

mkdir -p ${CUR_DIR}/${THE_INSTALL}

cd ${CUR_DIR}/${THE_BUILD} && ../${THE_SRC}/configure --build=i686 --host=arm-linux --prefix=${CUR_DIR}/${THE_INSTALL}

build:

cd ${CUR_DIR}/${THE_BUILD} && make

install:

cd ${CUR_DIR}/${THE_BUILD} && make install

clean:

cd ${CUR_DIR}/${THE_BUILD} && make clean

rm -rf ${CUR_DIR}/${THE_INSTALL}

rm -rf ${CUR_DIR}/${THE_BUILD}

.PHONY:depend libs clean

關鍵在于CROSS_TOOL和THE_SRC的設定,以及代碼中的Makefile。具體過程省略,請參考參考資料。

2、配置核心

打開ppp相關配置:

Device Drivers  --->

[*] Network device support  --->

PPP (point-to-point protocol) support

[*]     PPP multilink support (EXPERIMENTAL)

[*]     PPP filtering

PPP support for async serial ports

PPP support for sync tty ports

打開usb序列槽相關配置:

[*] USB support  --->

USB Serial Converter support  --->

[*]   USB Serial Console device support

[*]   USB Generic Serial Driver

USB driver for GSM and CDMA modems

3、确定産品型号

3.1、配置好的核心,先編譯後,啟動系統,插入子產品usbserial.ko、option.ko。

3.2、插入3g網卡,

#lsusb

這樣會顯示相應資訊:

12d1:1505

這裡,若無lsusb指令,可以檢視/sys/bus/usb/devices/下有相應的裝置資訊,其中:

# cat /sys/bus/usb/devices/1-1/idProduct

1505

# cat /sys/bus/usb/devices/1-1/idVendor

12d1

這裡假設是1-1。

3.3、切換網卡模式

可了解為以前usb網卡都被識别為usb存儲類型,這裡切換相當于将usb網卡拔掉,再改變模式再插上,這樣識别成合适的usb類型。

#usb_modeswitch -c /etc/usb_modswitch.d/12d1:1505

切換後檢視切換後的裝置資訊:

# cat /sys/bus/usb/devices/1-1/idProduct

140c

# cat /sys/bus/usb/devices/1-1/idVendor

12d1

這裡,12d1實際是廠商号“華為”,140c實際是該廠商的裝置産品号。

4、修改核心代碼,添加相應裝置:

#vim kernel/drivers/usb/serial/option.c

添加内容:

...

#define HUAWEI_VENDOR_ID                0x12D1

...

#define HUAWEI_PRODUCT_CE189            0x140c

...

static struct usb_device_id option_ids[] = {

...

{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_CE189) },

...

};

...

static struct usb_device_id option_ids1[] = {

...

{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_CE189) },

...

};

...

5、撥号

5.1、對修改好的核心子產品編譯後,重新開機系統并插入子產品:

#insmod usbserial.ko

#insmod option.ko

5.2、切換3g網卡的usb模式

#usb_modeswitch -c /etc/usb_modswitch.d/12d1:1505

...

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

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

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

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

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

[  124.810000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2

[  124.830000] option 1-1:1.3: GSM modem (1-port) converter detected

[  124.830000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3

[  124.850000] option 1-1:1.4: GSM modem (1-port) converter detected

[  124.860000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB4

...

#mknod /dev/ttyUSB0 c 188 0

#mknod /dev/ttyUSB1 c 188 1

#mknod /dev/ttyUSB2 c 188 2

#mknod /dev/ttyUSB3 c 188 3

#mknod /dev/ttyUSB4 c 188 4

這裡,根據切換後的提醒,建立相應的通訊裝置節點。

5.3、撥号

按照和pc一樣的方式,建立pppd撥号腳本和chat腳本,并撥号:

#pppd cdma2000ce189

最後會連接配接成功。

5.4、聯網

這裡,拔掉網線,確定隻有3g網絡

# ifconfig

eth0      Link encap:Ethernet  HWaddr 74:37:2F:00:00:00

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

collisions:0 txqueuelen:1000

RX bytes:166139 (162.2 KiB)  TX bytes:39884 (38.9 KiB)

Interrupt:52 Base address:0x7000

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

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

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

collisions:0 txqueuelen:0

RX bytes:1669 (1.6 KiB)  TX bytes:1669 (1.6 KiB)

ppp0      Link encap:Point-to-Point Protocol

inet addr:183.41.122.220  P-t-P:183.41.0.1  Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

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

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

collisions:0 txqueuelen:3

RX bytes:66 (66.0 B)  TX bytes:3164 (3.0 KiB)

路由:

# route

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

183.41.0.1      *               255.255.255.255 UH    0      0        0 ppp0

default         *               0.0.0.0         U     0      0        0 ppp0

5.5、ping百度:

# ping

ping: bad address ''

# ping 115.239.210.27

PING 115.239.210.27 (115.239.210.27): 56 data bytes

64 bytes from 115.239.210.27: seq=0 ttl=56 time=2260.913 ms

64 bytes from 115.239.210.27: seq=1 ttl=56 time=1254.671 ms

64 bytes from 115.239.210.27: seq=2 ttl=56 time=250.752 ms

64 bytes from 115.239.210.27: seq=3 ttl=56 time=125.597 ms

這裡可手動設定/etc/resolv.conf,添加百度的dns資訊。

三、其它

==================================

1.裝置識别

在前面“二、在嵌入式端的實作”的第3步,嘗試過直接用3g網卡的裝置資訊添加至option.c,并且不用usb_modeswitch,結果失敗。其實是因為切換後,裝置資訊變了。後再華為的em660上發現,直接修改option.c即可,不用usb_modeswitch。

可做參考,如下:

*修改核心代碼,添加相應裝置:

#vim kernel/drivers/usb/serial/option.c

添加内容:

...

#define HUAWEI_VENDOR_ID                0x12D1

...

#define HUAWEI_PRODUCT_CE189            0x1505

...

static struct usb_device_id option_ids[] = {

...

{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_CE189) },

...

};

...

static struct usb_device_id option_ids1[] = {

...

{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_CE189) },

...

};

...

*啟動

#insmod usbserial.ko

#insmod option.ko

...

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

...

#mknod /dev/ttyUSB0 c 188 0

按照提醒,手動建立裝置節點/dev/ttyUSB0,然後采用和pc一樣的撥号腳本,無法撥通,原因是沒有其他通道(/dev/ttyUSB1等)。

2.AT指令調試測試

測試和發送at指令的方法非常簡單,可以自己寫一個小程式寫序列槽檔案。

如有工具如minicom,也可以在minicom下啟動闆子後,直接:

#cat /dev/ttyUSB0&

#echo "at" >/dev/ttyUSB0

等等等。其中,cat表示顯示輸出,echo指明寫入的指令。具體有哪些指令,需要參考相應3G規範手冊。

3.連通性問題

為什麼配置設定了私有位址?

對不同地區電信3g聯網問題:一般配置設定公網ip;有些地區,營運商可能會配置設定私網位址(可能是為了節省ip資源或者安全性),導緻裝置隻能向外通路,無法直接通路裝置;還有些地區,不允許對配置設定的位址進行ping操作;具體政策需視當地營運商而定。

總結一下,大緻如下:

*當地營運商為用戶端裝置配置設定IP是動态的,有時會配置設定私網IP,有時會配置設定公網IP(可能是為了節省IP位址資源)。

*營運商在其内部路由器可能會設定,使得私網IP隻能向外通路,公網IP可以雙向。

*如果裝置作為用戶端向外通路,則不用關心其是否能被外通路,隻需動态配置設定,不用固定ip。

*如果裝置作為伺服器,那麼可能需要固定IP,以確定能被通路到。

*咨詢過電信在深圳的客服,說3G暫無提供固定IP的業務。

為什麼無法連接配接?

檢視是否欠費。

參考資料:

http://blog.csdn.net/haomcu/article/details/7285891

作者:QuietHeart

Email:[email protected]

日期:2013年09月23日