公司最近有个国外有个项目需要用到WCDMA猫,网上简单选型了一下决定使用ZTE的型号MF667S的猫,本以为在Linux下拨号是比较简单的(之前有两款3G猫的调试经验),估计半天能搞定,结果折腾了一周才调通,记录一下调试过程中遇到的坑.

  1,模式切换

  由于现在的猫都有多种模式,目的是为了Windows下的小白用户第一次插入的时候以cdrom或者u盘的模式使用,安装里面自带的驱动后,再由驱动切换到猫的模式.这种方法在Windows下是很方便的,但是到了Linux下就很蛋疼了,需要借助usb_modeswitch来进行模式切换.主页

  下载最新的usb_modeswitch,编译,编辑一下配置文件usb_modeswitch.conf:

DefaultVendor=0x19d2
DefaultProduct=0x1588
TargetVendor=0x19d2
TargetProduct=0x1589
MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"

  其中DefaultVendor和TargetVendor都是0x19d2,这也是ZTE公司的厂商ID,DefaultProduct为0x1588,是插入猫后做为USB模式系统认到的产品ID,可通过lsusb或者cat /proc/bus/usb/devices查看.TargetProduct0x1589是切换为猫后的产品ID,切换后可用lsusb查看.(不过感觉这里可以随便填一个,没什么用).MessageContent从usb_modeswitch主页抄的,试过只用一个MessageContent无法激活,需要MessageContent2一起使用.就这配置文件还踩了一个坑,以前的猫有加个MessageEndPoint=0xa,移植的时候也一同移植过来了,结果发消息怎么都是出错,后来移除后用默认的0x1发现可以切换了-.-.

  配置文件写好了,执行命令:./usb_modeswitch -W -c /etc/usb_modeswitch.conf,得到以下信息

 * usb_modeswitch: handle USB devices with multiple modes
* Version 2.2. (C) Josua Dietze
* Based on libusb1/libusbx ! PLEASE REPORT NEW CONFIGURATIONS ! DefaultVendor= 0x19d2
DefaultProduct= 0x1588
TargetVendor= 0x19d2
TargetProduct= 0x1589
MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"
NeedResponse= Look for target devices ...
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID :
found USB ID 0dfc:
found USB ID 19d2:
vendor ID matched
No devices in target mode or class found
Look for default devices ...
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID 1d6b:
found USB ID :
found USB ID 0dfc:
found USB ID 19d2:
vendor ID matched
product ID matched
Found devices in default mode ()
Access device on bus
Current configuration number is
Use interface number
Use endpoints 0x01 (out) and 0x81 (in) USB description data (for identification)
-------------------------
Manufacturer: ZTE,Incorporated
Product: ZTE Mobile Broadband Station
Serial No.: 1234567890ABCDEF
-------------------------
Looking for active driver ...
OK, driver detached
Set up interface
Use endpoint 0x01 for message sending ...
Trying to send message to endpoint 0x01 ...
OK, message successfully sent
Trying to send message to endpoint 0x01 ...
OK, message successfully sent
Reset response endpoint 0x81
Reset message endpoint 0x01
-> Run lsusb to note any changes. Bye!

  说明已经切换成功了,再cat /proc/bus/usb/devices查看设备信息如下:

T:  Bus= Lev= Prnt= Port= Cnt= Dev#=   Spd= MxCh=
D: Ver= 2.00 Cls=(comm.) Sub= Prot= MxPS= #Cfgs=
P: Vendor=19d2 ProdID= Rev= 0.00
S: Manufacturer=ZTE,Incorporated
S: Product=ZTE Mobile Broadband Station
S: SerialNumber=1234567890ABCDEF
C:* #Ifs= Cfg#= Atr=a0 MxPwr=500mA
A: FirstIf#= IfCount= Cls=(comm.) Sub= Prot=
I:* If#= Alt= #EPs= Cls=(comm.) Sub= Prot= Driver=cdc_ether
E: Ad=(I) Atr=(Int.) MxPS= Ivl=125us
I: If#= Alt= #EPs= Cls=0a(data ) Sub= Prot= Driver=cdc_ether
I:* If#= Alt= #EPs= Cls=0a(data ) Sub= Prot= Driver=cdc_ether
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms
I:* If#= Alt= #EPs= Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=(I) Atr=(Int.) MxPS= Ivl=500us
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms
I:* If#= Alt= #EPs= Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms
I:* If#= Alt= #EPs= Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms
I:* If#= Alt= #EPs= Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms
I:* If#= Alt= #EPs= Cls=(stor.) Sub= Prot= Driver=usb-storage
E: Ad=(I) Atr=(Bulk) MxPS= Ivl=0ms
E: Ad=(O) Atr=(Bulk) MxPS= Ivl=0ms

  ProdID已经切换成1589,自动加载了个cdc_ether驱动,还有4个设备未驱动和一个usb存储.cdc_ether驱动生成了一个usb0的网口设备.至此,说明WCDMA猫已经切换模式成功.

  2,设备映射

  模式切换成功后,由于自动加载了网卡驱动生成了usb0的网口设备,让我又踩了一个坑,以为这是一个纯网卡的模块,论坛上搜索了一番,也没有这个型号猫的明确说明,相近的型号也描述的不清不楚的,试过dhclinet usb0,无效.还有说要访问个gateway授权再分配IP的(纯属扯谈).后来才发现这个usb0的网卡设备完全没用,这个猫是一个传统的usb转串口的猫.

在系统启动的时候rc.local里加上下面的命令:modeprobe usbserial.ko vendor=0x19d2 product=0x1589,再重新执行第一步,OK,串口出来了.

ls /dev/ttyUSB* -l,有时候会生成0-3共4个USB口,有时候会生成0-4共5个USB控制口,不解为什么.

  3,AT拨号

  ttyUSB设备生成后就可以对设备进行AT指令拨号了,由于生成了4-5个USB节点,只好一个个试验哪个节点是猫口,经测试发现,USB0 USB1接收AT指令能返回OK,USB2 USB3直接返回TIMEOUT,说明2,3不是,猫口在0,1之间.继续测试锁定猫口为第一个设备/dev/ttyUSB0.

  接下来就是写脚本了.SCRIPT:

ABORT BUSY
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
'' AT+CGDCONT=,"IP","3GNET" OK
ATDT*# CONNECT

pppd 115200 connect "/usr/sbin/chat -f dial.script -v" /dev/ttyUSB0 modem defaultroute

  通过上面的命令和脚本,发送AT+CGDCONT=1,"IP","3GNET"可以得到OK,再发送ATDT*99#却返回ERROR-.-;于是又在论坛摸索了半天,发现有个人遇到了相同的情况,提示在最前面加一条AT+CFUN=1,0(注册网络)果然就不返回ERROR返回CONNECT了.本以为大功告成,谁知道pppd在下一步的时候又提示检测不到本地IP,而且看log,CONNECT之后确实没有返回本地和远程的IP信息.

  在这一步又卡壳了几天,最后想着换一批pppd参数,折腾了几下终于拨上去了-.-;最终的脚本和命令如下:

ABORT BUSY
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
'' AT+CFUN=, OK
AT+CGDCONT=,"IP","3GNET" OK
ATDT*# CONNECT

pppd 115200 connect "/usr/sbin/chat -f dial.script -v" /dev/ttyUSB0 ipcp-accept-local ipcp-accept-remote defaultroute usepeerdns

PS:这款猫还有个BUG,每次拨号,必须要拨两次才能成功,第一次拨号ATDT最后还是会返回ERROR,第二次拨号就可以正确的拨上去了-.-,ZTE的东西就是不太靠谱,最后没办法只有在上层应用加个判断,拨号拨两次再检查状态...

中兴MF667S WCDMA猫Linux拨号笔记的更多相关文章

  1. 中兴F412光猫超级密码破解、破解用户限制、关闭远程控制、恢复路由器拨号

    不少家庭都改了光纤入户,那肯定少不了光猫的吧.今天以中兴F412光猫为例介绍下此型号光猫超级密码的破解方法.一.F412超级密码破解方法1.运行CMD,输入telnet 192.168.1.1: 2. ...

  2. 中国电信中兴F460光猫破解及路由级联设置

    http://blog.csdn.net/pipisorry/article/details/50636541 中国电信中兴F460光猫破解,获取超级密码,修改配置. 之前家里的宽带升级了,换成了光纤 ...

  3. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  4. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  5. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  6. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  7. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  8. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

  9. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

随机推荐

  1. Xenko基础API笔记2-Enum Keys按键

    Name   Description A The 'a' key. Add The 'add' key. Apps The 'apps' key. Attn The 'attn' key. B The ...

  2. U盘FAT32文件系统转换成NTFS文件系统

    首先 点击-开始--运行---输入CMD ----输入convert X:/FS:NTFS 其中 X是U盘所在的盘符

  3. ApexSQLLog总结

    我们程序最近做更新,要做新功能的测试.程序经常出现大的事务,每次commit之后如果发现数据不对的问题也不能再回滚进行断点调试了,因为数据库数据已经更改了,所以一直想找一个回滚我数据库所有操作的工具. ...

  4. Unity已经学会的

    1.以MonoBehaviour为脚本的开发模式. 2.MonoBehaviour的大多数API. 3.动画系统大多数了解. 4.UI了解一些,能写UI. 5.Editor了解一些,能写Editor. ...

  5. webform JS打印方法

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DaYin.aspx.cs&qu ...

  6. 安装mysql 5.7+版本缺少data文件夹

    打开cmd命令窗口,并且进入到mysql安装目录的bin目录下.然后输入命令: mysqld --initialize-insecure --user=mysql 然后回车:去目录下查看,已经自动创建 ...

  7. ionic

    ionic是一个用来开发混合手机应用的,开源的,免费的代码库.可以优化html.css和js的性能,构建高效的应用程序,而且还可以用于构建Sass和AngularJS的优化.ionic会是一个可以信赖 ...

  8. python学习心得第五章

    python学习心得第五章 1.冒泡排序: 冒泡是一种基础的算法,通过这算法可以将一堆值进行有效的排列,可以是从大到小,可以从小到大,条件是任意给出的. 冒泡的原理: 将需要比较的数(n个)有序的两个 ...

  9. DataSnap 2009 系列之三 (生命周期篇)

    DataSnap 2009 系列之三 (生命周期篇) DataSnap 2009的服务器对象的生命周期依赖于DSServerClass组件的设置 当DSServer启动时从DSServerClass组 ...

  10. Git版本控制与工作流

    基本概念 Git是什么? Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更 ...