关闭

3g modem模式切换

2205人阅读 评论(0) 收藏 举报
分类:
主要经手了3G路由器项目的USB模式切换模块的开发和维护。3G路由器项目是随着3G在国内市场的铺开而上马的,其中的一个重点模块就是3G USB Modem的模式切换。这个问题之所以存在,是因为市面上的大多数3G USB Modem都采用了这样的工作模式:第一次接到PC上时,表现为一个CD ROM设备,在这个“伪”CD ROM上存有3G USB Modem的驱动程序,用户可以安装驱动程序,安装完成之后,3G USB Modem自动从“伪”CD ROM设备切换成Modem模式,此时就可以正常的拨号上网了。在PC上,Windows系统提供了对3G USB Modem设备自动切换设备模式的支持,但Linux并没有提供自动切换USB设备工作模式的能力,这就要求我司3G路由器具备自动切换USB设备模式的功能。

问题是:USB设备的模式切换,并不是一个标准的设备功能,各厂家的3G USB Modem实现自动模式切换的方法不一样,各种各样的方法都有,因此,尽管不可能做到兼容市场上所有的3G USB Modem,但至少需要达到的目标是:对市场上主流的3G USB Modem,都需要能支持(至少不能比竞争对手能够支持的3G USB Modem数量少)。

另一个难点是:要找出USB设备模式切换的途径,基本上只能通过逆向工程的办法来完成。这方面,网络上有一些资源可以利用:一个是SniffUSB项目,该项目提供了一个用于嗅探USB通信过程的工具;另一个项目是usb_modeswitch,该项目的目标就是要实现3G USB Modem在Linux平台下的切换。

补充一点USB的背景:USB总线协议的协议层有一点类似有线网络,是通过packet在USB设备之间完成通信和控制,这样,就可以像在网络上使用抓包工具(如wireshark, ethereal, tcpdump)捕捉网络通信的数据包一样,也可以通过特殊的工具捕捉USB设备之间的数据包,并对其进行分析。在3G路由器项目中,使用的USB抓包工具就是前面提到的SniffUSB。通过对捕捉到的通信数据包的分析,可以得到一些有可能是促成USB设备切换模式的数据包。这个时候,就轮到usb_modeswitch出场了,usb_modeswitch的作用,就是把这些可疑的数据包发送给指定USB设备,看设备是否切换模式,如果发生了,那么我们也就知道应该如何让USB设备切换模式了。

之前已经有同事完成了3G USB Modem模块的部分功能,但尚不完整,只能支持国内华为和中兴的两个3G USB Modem,我的任务是:学习SniffUSB和usb_modeswitch的工作机制,完善代码,支持更多的3G USB Modem。在此过程中,花了不少时间学习USB协议,并为SniffUSB的使用撰写了使用说明(SniffUSB使用起来是比较有挑战性的,因此需要一份文档,以便后续接手的同事有所参考)。分析数据包的阶段,我一开始是采用人肉分析的方式,一条一条地猜测,效率非常的低,后来,有一些经验之后,就总结出了一定的规律,为了减轻人工分析的负担,我编写了Python脚本以辅助分析。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:166721次
    • 积分:1998
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:83篇
    • 译文:0篇
    • 评论:6条
    最新评论