在openwrt下面添加3G模块。目前,市场的3G模块大概有两种,一种是插上电脑,直接可以识别出来是USB-3G设备。

对于这种3G模块在openwrt上面的驱动

本文讨论的是另外一种,插上电脑后,电脑识别出来的一个U盘。需要我们切换成usb-3G。

第一步,请参考这篇文章,编译 openwrt 固件

在这里。我们需要用到两个软件包:

libusb-1.0  
usb-modeswith

openwrt 系统自带有,但是我测试不成功,不清楚为什么。于是我去网上找了其他版本的。

libusb-1.0.9.tar.bz2
usb-modeswitch-2.0.1.tar.bz2
usb-modeswitch-data-20131113.tar.bz2

交叉编译:

首先安装好对应的交叉编译工具链。我用的 mipsel-linux-gcc

libusb:

tar -xvf libusb-1.0.9.tar.bz2
cd libusb-1.0.9
CC=mipsel-linux-gcc ./configure --prefix=$PWD/tmp --host=mipsel-linux --build=i686-linux
make
make install

编译安装后的文件在 当前目录下的 tmp 里面。

进入该目录,把所有的头文件和库文件复制到交叉编译工具链里面

//头文件:
sudo cp libusb.h /opt/buildroot-gcc342/include/
//lib:
sudo cp * -rfd /opt/buildroot-gcc342/lib/

同时,把库复制到根文件目录下的 lib 目录

sudo cp *so* -d /开发板的lib目录

usb_modeswitch:

修改 Makefile

CC          = mipsel-linux-gcc
CFLAGS += -Wall
LIBS = -lusb-1.0 -lpthread

然后执行如下操作:

make DESTDIR=$PWD/tmp
make DESTDIR=$PWD/tmp install

编译安装后的文件在 当前目录下的 tmp 文件夹里面。

cd tmp
sudo cp * -rfd 开发板根目录

usb-modeswitch-data-20131113:

make DESTDIR=$PWD/tmp install
cd tmp
sudo cp * -rfd 开发板根目录

最后一步:

根据VIP/PID在device_reference.txt里找到一段配置值,

device_reference.txt 参考网页:

​​

​​ ​​

vi /etc/usb_modeswitch.conf

########################################################
# Prolink P2000 CDMA
#
# Test string: uMa=SSE

DefaultVendor= 0x05c6
DefaultProduct=0x1000

TargetVendor= 0x05c6
TargetProduct= 0x6000

MessageContent="5553424312345678000000000000061b000000020000000000000000000000"
NeedResponse=1

执行 usb_modeswitch -c /etc/usb_modeswitch.conf

如果执行后没有在 /dev 目录下生成 ttyUSB* 设备。请重启一次

输入ifconfig,查看是否有 3g-ppp0 。

root@DayDream:/# ifconfig 
3g-ppp0 Link encap:Point-to-Point Protocol
inet addr:113.115.110.8 P-t-P:113.115.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1290 (1.2 KiB) TX bytes:1316 (1.2 KiB)

但是,我尝试ping www.baidu.com

ping 114.114.114.114 都是ping不通,提示如下:

root@DayDream:/# ping www.baidu.com
ping: bad address 'www.baidu.com'

root@DayDream:/# ping 114.114.114.114
PING 114.114.114.114 (114.114.114.114): 56 data bytes
ping: sendto: Network is unreachable

输入 route 。发现没有设置网关:

root@DayDream:/# route 
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
113.115.0.1 * 255.255.255.255 UH 0 0 0 3g-ppp0
192.168.20.0 * 255.255.255.0 U 0 0 0 br-lan

于是,设置上默认网关

route add default gw 113.115.0.1

在尝试一次。发现成功了:

root@DayDream:/# ping www.baidu.com
PING www.baidu.com (180.97.33.107): 56 data bytes
64 bytes from 180.97.33.107: seq=0 ttl=55 time=87.532 ms

内核的编译配置

make kernel_ menuconfig

USB串口驱动相关的配置项:

Device Drivers  ---> [*] USB support  --->     
<*> Support for Host-side USB
[*] USB announce new devices
[*] Enable USB persist by default
<*> EHCI HCD (USB 2.0) support
[*] Root Hub Transaction Translators
[*] Improved Transaction Translator scheduling
<*> OHCI HCD (USB 1.1) support
<*> USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Wireless Device Management support
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems

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

所需软件包:

ppp  
chat
comgt
librt
libusb-1.0
usb-modeswith
zlib

保存 执行make V=99 后将编译好的镜像文件烧写到开发板。然后启动开发板

配置 网络

/etc/config/network  
config interface 'ppp0'
option ifname 'ppp0'
option service 'evdo'
option username 'card'
option password 'card'
option device '/dev/ttyUSB0'
option proto '3g'
option dialnumber '#777'
option apn 'ctnet'
option auto 1

重启网络

/etc/init.d/netwrok restart