嵌入式Linux下3G原理

来源:互联网 发布:apache benchmark 编辑:程序博客网 时间:2024/06/05 18:48

传统3G上网卡几乎都采用modem形式,支持usb插口。通过usb指令转串口指令发给modem实现modem初始化并实现上网.
由此可以考虑在linux下实现usb指令到串口指令转换的驱动以驱动modem实现上网,各个平台的linux内核中都有usbserial
模块,该模块是可以驱动modem上网的,因此可以考虑使用usbserial模块驱动3G网卡上网。虽然3G上网卡没有类似
windows系统的应用软件以实现modem初始化.但是可以在linux系统下使用pppd、wvdial等应用软件实现modem的初始化,
其中wvdial是目前被广泛采用的应用软件。

上网卡架构:



Modem(中文名字是调制解调器),它由发送、接收、控制、接口、操纵面板及电源等部分组成。数据终端设备以二进制
串行信号形式提供发送的数据,经接口转换为内部逻辑电平送入发送部分,经调制电路调制成线路要求的信号向线路发送.接
收部分接收来自线路的信号,经滤波、反调制、电平转换后还原成数字信号送入数字终端设备。

 

Linux下3G上网的基本原理:

根据3G上网流程图图2,主要做了如下:[作:将双模式的3G网卡转换成modem模式,使用了eject指令或usb modeswitch
软件,其中使用usb modeswitch需要配置usb modeswitch.conf文件

(1)模式转换的实现

  当今流行的无线上网卡(CDMA,TD-SCDMS等)具有两种模式(U盘模式。Modem模式),插入PC时系统首先将其识别
为Usb Storage设备,在Windows安装驱动以后,U盘自动消失转成Modem:而在linux下没有类似驱动,就需要仿照Windows
的流程进行模式转换。

 模式转换有两种方法:eject命令的方法或者使用usb _modeswitch软件

方法一:通过eject弹出Usb Storage设备
 
       有些上网卡,例如DTM573l,可以使用指令:#eject/dev/scdO弹出Usb Storage设备,然后使用指令:

       #cat /proc/bus/usb/device就发现原来的5700设备已经没有了,出现了一个573l设备,说明通过eject已经成功进行了模武转换。
方法二.通过usb modeswitch软件进行模式转换
有些上网卡通过eject命令不能转换,这时就需要使用usb modeswiteh软件。usb modeswitch软件是一种实现modem模式
转换的软件.该软件使用便捷,安装该软件后,唯一需要做的就是配置usb modeswitch.conf文件。因为在linux下没有类似
windows下那样的驱动与应用软件,这就需要通过截取指令来完成linux系统下的模式转换。sniffusb软件可以截取windows下
3G网卡的模式转换指令。sniffusb软件是抓取usb口数据的应用软件,通过该软件可以抓取windows下usb3G.I二网网卡的模式
转换指令,该指令在linux—F同样可以用,可以用该指令配置usb modeswitch.conf文件。

(2)2驱动通用实现方法和拨号实现

  各个平台下linux内核中都有usbserial模块,它们都实现同样的驱动modem功能,选择该模块保证了所有平台下都可以用同样
方法实现驱动modem并上网。

具体实现:

 第一步:加载驱动模块
#modprobe usbserial vendor=Oxlab7 product=0x573l
Vendor,Product是modem模式下设备的设备ID号,vendor是usb的制造商ID,product是usb产品ID。可以通过如下方
法获得:指令#cat/proc/bus/usb/devices或者指令撑Isusb.
第二步:拨号上网

 

可以使用pppd+chat+call script