公司最近有个国外有个项目需要用到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. Delphi编写DLL供C#调用的实例

    Delphi中编写的Dll: library TestDLL; { Important note about DLL memory management: ShareMem must be the f ...

  2. canvas内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Android 打包

    1.数字签名(指的是我们打包程序时所用keystore的SHA1指纹) 2.debug打包,不能在android 市场上架,使用的签名是默认的签名,1年后失效:release打包使用的是自己的签名,可 ...

  4. SequoiaDB 笔记

    SequoiaDB 笔记 这几天翻了翻SequoiaDB的代码,记了点笔记.不保证下面内容的正确性(肯定有错的地方) 个人观感 优点 代码还不错,设计也算简洁. EDU和CB的使用让整个系统变得简单很 ...

  5. 获取iPhone 联系人列表,并且根据分析得到的姓名首字母进行排序

    获取手机联系人以iOS9为分界点,大家都知道到了iOS9很多方法都更新了,好多接口都弃用,被新的接口代替.这Demo种有新旧两个接口,使用前判断当前iOS版本. 下面是Demo连接地址:Github的 ...

  6. 未能加载文件或程序集“MySql.Web.v20, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件

    未能加载文件或程序集“MySql.Web.v20, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖 ...

  7. jQuery Mobile的基本使用

    本人是软件开发的初学者,总结了一点点日常所学,记录在此,主要目的是鼓励自己坚持学习,怕有一天忘记了,还能复习曾经学过的知识点. 如有大神路过为我指点迷津,纠正改错更是感激不尽,但请不要喷我这个菜鸟!谢 ...

  8. web初学之MVC

    之前对JavaEE的MVC模式有些许了解,但一直没有很好的掌握,在读代码时候也很模糊不清.因此对MVC又通过各种资料有了全面的理解. 一.首先,需要从了解JavaEE技术开始.JavaEE技术在设计程 ...

  9. const char **

    foo (const char **p){    }   main (int argh,char **argv) {      foo(argv); } warning : argument is i ...

  10. Android 工程师如何快速学会web前段

    Android 工程师如何快速学会web前段 今天主要聊一下本人最近在学习web前段的感受,最近html5是越来越火了,前段时间公司做了一个项目然后让我们“android”的程序猿过去帮忙把客户 端框 ...