1.USB_ModeSwitch
1.1简介
USB_ModeSwitch is (surprise!) a mode switching tool for controlling 'multi-mode' USB devices.
USB工作模式:USB存储模式,USB Serial模式。现在3G,无线网卡模块使用USB接口,其工作模式是usb serial模式。
具体说明见:
1.2 内核配置
1.2.1 USB驱动
Device Drivers>>USB support>><*>USB SerialConverter support [*]USBGeneric Serial Driver <*>USBdriver for GSM and CDMA modems
1.2.2 PPP协议支持
Device Drivers>>Network device support<*> PPP (point-to-point protocol) support [*] PPP multilink support (EXPERIMENTAL) <*> PPP support for async serial ports <*> PPP support for sync tty ports <*> PPP Deflate compression <*> PPP BSD-Compress compression
2.下载制作usb_modeswitch工具
2.1下载源文件与解压
2.1.1
mkdir usbmodeswitchcd usbmodeswitchwget http://pkgs.fedoraproject.org/repo/pkgs/libusb1/libusb-1.0.0.tar.bz2/df2447c23750ef2b4a314200feacc2ee/libusb-1.0.0.tar.bz2wget http://jaist.dl.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2wget http://pkgs.fedoraproject.org/repo/pkgs/usb_modeswitch/usb-modeswitch-1.2.4.tar.bz2/dbd4ce7966d7b4a5a0604a8280f7164d/usb-modeswitch-1.2.4.tar.bz2wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20170205.tar.bz2
2.1.2 解压
tar xjf libusb-1.0.0.tar.bz2tar xjf libusb-compat-0.1.5.tar.bz2 tar xjf usb-modeswitch-1.2.4.tar.bz2tar xjf usb-modeswitch-data-20170205.tar.bz2
2.2编译工具(ARM架构)
mkdir install
2.2.1编译libusb
cd libusb-1.0.0./configure CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc(自己的目录) --prefix=xxx/install(自己的目录) --disable-shared --enable-static --build=i686 --host=arm-linuxmake make install
用命令查看ls ../install,有以下文件
include lib
2.2.2编译libusb-compat
cd ../libusb-compat-0.1.5export PKG_CONFIG_PATH=xxx/install/lib/pkgconfig(自己的目录):$PKG_CONFIG_PATH./configure CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc(自己的目录) --prefix=xxx/install(自己的目录) --disable-shared --enable-static --build=i686 --host=arm-linuxmakemake install
2.2.3编译usbmodeswitch
cd usb-modeswitch-1.2.4
修改Makefile,vim Makefile如下:
#CC = gcc#CFLAGS += -Wall#LIBS = -l usbCC = /usr/local/arm/4.3.2/bin/arm-linux-gccCFLAGS += -Wall -I ../install/include -staticLIBS = -L ../install/lib -l usb -l usb-1.0 -l pthread -lrt
或者通过如下命令修改
sed -i -e "s|^CC.*|CC = /usr/local/arm/4.3.2/bin/arm-linux-gcc |g" Makefilesed -i -e "s|^CFLAGS.*|CFLAGS += -Wall -I../install/include -static|g" Makefilesed -i -e "s|^LIBS.*|LIBS = -L../install/lib/ -l usb -l usb-1.0 -l pthread -lrt|g" Makefile
file usb_modeswitch查看生成的usb_modeswitch
usb_modeswitch: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped
2.3复制usb_modeswitch
将usb-modeswitch-data-20170205下的usb_modeswitch.d中的所有文件都打包
tar -cjf usb_modeswitch.d.tar.bz2 usb_modeswitch.d
拷贝到开发板的etc/usb_modeswitch.d/目录,并解压 tar -xjf usb_modeswitch.d.tar.bz2把usb_modeswitch下载到开发板的/usr/sbin目录下。
具体方法不在这里阐述了,可以根据自己情况!
3.编译PPP
3.1配置ppp
mkdir pppcd ppp/wget https://www.samba.org/ftp/ppp/ppp-2.4.4.tar.gztar -xzf ppp-2.4.4.tar.gzcd ppp-2.4.4./configure
3.2修改chat.c
cd chat/
修改chat.c文件如下:
1168 if (timeout_next) { 1169 timeout_next = 0; 1170 s = clean(s,0); //添加 1171 timeout = atoi(s); 1172 free(s); //添加 1173 if (timeout <= 0)3.3修改chat中的Makefile
INSTALL= installCC=/usr/local/arm/4.3.2/bin/arm-linux-gcc #增加all: chatchat: chat.o $(CC) -static -o chat chat.o #增加静态编译
3.4修改PPPD目录下的auth.c
cd ../pppd
修改如下:
1316 //ao->neg_upap = !refuse_pap && (passwd[0] != 0 || get_pap_passwd(NULL));1317 ao->neg_upap = !refuse_pap; //modified
3.5修改PPPD中的Makefile
33 CC = /usr/local/arm/4.3.2/bin/arm-linux-gcc34 # CC = gcc47 # MPPE=y52 # FILTER=y69 # PLUGIN=y
3.6编译PPPD-2.4.4
cd ../make
用file chat/chat pppd/pppd查看
chat/chat: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not strippedpppd/pppd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped
3.7复制chat和pppd到开发板
将交叉编译出来的这两个应用程序chat和pppd拷贝到开发板 /usr/sbin目录下
4.配置拨号上网的脚本
4.1配置文件——wcdma
vim wcdmadebugnodetachlock/dev/ttyUSB0115200user "card"password "card"crtsctsshow-passwordusepeerdnsnoauthnoipdefaultnovjnovjccompnoccpdefaultrouteipcp-accept-localipcp-accept-remoteconnect '/usr/sbin/chat -s -v -f wcdma-chat-connect'disconnect '/usr/sbin/chat -s -v -f wcdma-chat-disconnect'
4.2配置文件——wcdma-chat-connect
vim wcdma-chat-connect
TIMEOUT 5ABORT 'NO CARRIER'ABORT 'ERROR'ABORT 'NO DIALTONE'ABORT 'BUSY'ABORT 'NO ANSWER''' /rATOK /rATZOK /rAT+CGDCONT=1,"IP","3gnet",,0,0OK-AT-OK ATDT*99#CONNECT /d/c
4.3配置文件——wcdma-chat-disconnect
vim wcdma-chat-disconnect
ABORT "BUSY"ABORT "ERROR"ABORT "NO DIALTONE"SAY "/nSending break to the modem/n"'' "/K"'' "+++ATH"SAY "/nGoodbay/n"
4.4下载配置文件
mkdir -p /etc/ppp/peers/mkdir /var/run -p mkdir /var/lock -p
将wcdma、wcdma-chat-connect、wcdma-chat-disconnect三个文件下载到此目录下。
此外, 将/etc/resolv.conf下的resolv.conf下载到开发板/etc5.增加3G网卡的配置文件
当插上3G网卡时,我们可以发现
![OZS606k.png](http://i.imgur.com/OZS606k.png)
######################################################### Huawei E1550# Huawei E1750## Contributor: Anders Blomdell, Ahmed SolimanDefaultVendor= 0x12d1DefaultProduct= 0x1446TargetVendor= 0x12d1TargetProduct= 0x1001MessageContent="55534243123456780000000000000011060000000000000000000000000000"MessageEndpoint=0x01CheckSuccess=5HuaweiMode=0
6.使用usb_modeswitch
6.1挂载usbfs文件系统
临时挂载
mount -t usbfs usbfs /proc/bus/usb/
查看一下
自动挂载usbfs文件系统
vi /etc/fstab加上usbfs /proc/bus/usb usbfs defaults 0 0
6.2切换到串口设备工作
usb_modeswitch -c xxx.conf(自己的3G网卡配置文件)
cat /proc/bus/usb/devices
7.测试——AT指令
进入AT命令界面模式:
microcom -s 115200 /dev/ttyUSB0(自己的USB号)
- 查看模块制造商:at+cgmi
- 查看模块版本信息:at+cgmr
- 查看GPRS模块型号:at+cgmm
- 查看SIM卡是否在位:at+cpin? (Ready表示在位)
- 查看GPRS模块信号强度,其中”,”前的数字为信号强度,at+csq
- 查SIM卡是否注册上网络,其中”,”后的值为SIM卡的注册状态。如果状态值为0,表示未注册;如果为1表示本地号码注册上;如果为2,表示正在搜索运营商注册,但没注册上;如果为3表示拒绝注册;如果为4,未知状态;如果为5, 漫游号码注册上。at+creg?
- 查SIM卡运营商,at+cops?
8.测试-PPP拨号
进入/etc/ppp/peers/目录执行
pppd call wcdma&
在/etc目录下新建resolv.conf,设置域名。
之后可以ping www.baidu.com注:此外根据相关文献,有时还要编辑option.c,添加自己的3G网卡ID
vim drivers/usb/serial/option.c
参考文献: