USB拨号驱动

1. 拨号介绍

ppp拨号:modem相当于猫,自身不能上网;
ECM拨号:网络共享方式,AP和modem都能上网。
在这里插入图片描述
在这里插入图片描述

1.1 ppp拨号

      **PPP(点到点协议)**在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。

1.1.1 linux中PPP实现方式

传输层、网络层(TCP/IP)——数据链路层(PPP)——物理层(串口,网口)

(1)发送时,TCP/IP数据包经过PPP打包之后经过串口发送。
(2)接收时,从串口上来的数据经PPP解包之后上报给TCP/IP协议层。
linux下ppp框架结构如下图:
在这里插入图片描述

1.1.2 PPP协议栈

主要负责PPP层数据的封装、压缩与解压缩.另外,它还对普通数据包和PPP过程的数据包进行了分流,将普通数据包提交到TCP/IP协议栈,而将PPP过程的数据包放到/dev/ppp设备队列中,等待pppd去收取并处理.
http://hi.csdn.net/attachment/201112/31/0_1325300769F8Qz.gif
在这里插入图片描述

1.1.3 pppd

pppd是一个用户空间的后台服务进程(daemon。pppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。pppd只是一个普通的用户进程,pppd与内核中的PPP协议处理模块之间通过设备文件(/dev/ppp)进行通信。pppd有一个辅助工具chat,用来与GSM模组建立会话。它向串口发送AT命令,建立与GSM模组的会话,以便让PPP协议可以在串口上传输数据包。

设备文件/dev/ppp。通过read系统调用,pppd可以读取PPP协议处理模块的数据包,当然,PPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrl系统调用,pppd可以设置PPP协议的参数,可以建立/关闭连接。在pppd里,每种协议实现都在独立的C文件中,它们通常要实现protent接口,该接口主要用于处理数据包,和fsm_callbacks接口,该接口主要用于状态机的状态切换。

1.2 ECM

      以太网控制模型(Ethernet Networking Control Model) 用于在设备和主机之间传输以太网数据包。
      在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。ECM的驱动源码文件是drivers/net/usb/cdc_ether.c
CDC-ECM同UVC原理上是一样的,定义一套标准协议主从机都遵守了就不需要额外的驱动程序。
      数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。

1.3 GobiNet 和 qmi-wwan

详细看过GobiNet 的代码后,发现GobiNet 已经支持QMI-WWAN了,即使使用QMI-WWAN驱动的,也可以使用GobiNet 来进行后台的管理,包括拨号,掉线重拨等。

1.3.1 Gobinet拨号

GOBI 高通Gobi无线宽带芯片技术,只需一个模块即可支持多种移动宽带网络和众多移动运营商.
高通公司称全新的芯片将基于Gobi 4G LTE无线基带、MDM9615和MDM9215。这种技术可以在FDD和TDD网络下进行LTE连接,同时支持HSPA+和EV-DO网络、2G/3G网络。这意味着用户可以在本地使用高速4G LTE网络,在其他地方使用3G网络。Gobi平台在MDM芯片组的基础上还提供了软件增强层,这样可以使用不同技术下的无线连接更简单。

1.3.2 QMI-WWAN协议拨号

QMI: Qualcom Message Interface
MSM: Mobile station mode
AP:  Application Procesor

高通平台目前都是非对称多核心,最主要的是AP和Modem。
两个处理器怎么进行通信呢,我们把AP和Modem当作两个主机,问题就变得了很简单,TCP/IP协议不是一种非常成功的进程间跨主机通信方式。高通没有采用这种方式,但是借鉴了TCP/IP的框架设计。
Qualcomm MSM Interface,作用用于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是手机,PDA,计算机)对高通BP侧的AMSS系统进行操作,如调用函数,读取数据,设置其中的NV项等。
参考:http://blog.csdn.net/u012439416/article/category/7004974

1.4 rndis

NDIS(Network Driver Interface Specification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。

NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

NDIS支持三种类型的网络驱动程序:
(1)NDIS网卡驱动程序(NICdrivers) :网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。
(2)NDIS中间驱动程序 (InterMediateProtocolDrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。
(3)NDIS协议驱动程序 (Upper Level Protocol Drivers):协议驱动程序执行具体的网络协议,如IPX/SPX、TCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动程序的信息
ndis既然是标准,那么win、linux都可以使用,广义的来讲,在windows上是ndis,只要符合ndis标准的无线网卡、有线网卡,不需要驱动,直接就可以在win7以上的系统上使用。

但是在linux上它却是以另一个名字为大家知晓"ECM(Ethernet Control Model) "/“NCM”,其实ECM NCM只是在linux上规定 了ndis规范的“物理层”实现形式,是通过USB CDC通信类来实现了,所以双叫CDC-ECM,在华为的这个文档里写的很清楚
在这里插入图片描述
linux下其它ndis层怎么实现了我就不知道了,但是我知道ndis物理层除了使用标准ECM来实现之外,还有一个非标准的QMI WWAN ,这是高通自己定义的ndis物理层标准,由于高通的行业地位,这个非标甚至比标准运用的还要广泛,ECM QMI由于使用协议不同,拨号连网的命令也不同, 华为ME909是echo “AT^NDISDUP=1,1”>/dev/ttyUSB0 而STIM7100是 echo “AT$QCRMCALL=1,1” > /dev/ttyUSB2 命令形式不一样,但实质是一样的,都是建立连接,获得运营商IP地址。

如果是支持ECM标准的4G模块,3.X的内核支持,直接在内核中配置就可以了。比如华为ME909

如果是支持高通QMI的模块,好像有文档说3.4以上的内核直接支持,那是不是也是内核menuconfig时,添加 上就行也呢?这个我还没有验证。使用高通方案的模块多的很sim7100 ec20几乎都是。

最后说MBIM,(Mobile Broadband Interface Model),这是正宗的移动宽带接口模型,专门用于3G/4G/5G模块的,上面说的ndis这个并不是专门用在移动宽带上的,比如USB接口的百兆网卡RTL8152也是基于ndis的,所以它能做到免驱。但是MBIM只在win8以上的windows上使用,不知道为什么 linux没有使用,好象这种新技术都是windows先用,然后才慢慢推广到linux上。(最近调试imx6ull板子时,在4.x.xx的内核中发现了 CDC MBIM support选项,说明新内核已经支持了)

1.5 ping

(1)描述问题:ubuntu服务器能ping通IP地址,但ping不通域名。
(2)查找原因
打开终端执行ping baidu.com(ping百度的域名),结果是ping: baidu.com: Temporary failure in name resolution
执行ping 220.181.57.216(baidu.com对应的IP地址),可以收到回传数据。
所以可以断定,DNS解析服务器出问题了。
(3)解决办法
编辑resolv.conf文件,该文件是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。执行命令:sudo vim /etc/resolv.conf,将下面内容加入:

nameserver 8.8.8.8      //google的域名解析服务器
nameserver 114.114.114.114   //联通的域名解析服务器

1.6 公网IP和私网IP

在百度直接搜索IP会显示公网IP,在cmd中输入ipconfig,或者在Linux终端下输入ifconfig,会显示出私有ip。

公网IP一般是运营商分配的,公网ip才能上网,但是不可能给每一个电脑分配一个IP,ipv4肯定是不够的。所以需要私有IP,这种ip一般是用于局域网的管理,不能直接连上互联网,必须通过公网ip上网。

在很早的时候就预料到了ipv4可能不足,所以在每一类的ip地址中都预留了一部分地址作为私有ip:

类型	        ip范围	                    私有地址范围
A	1.0.0.0~126.255.255.255	    10.0.0.0~10.255.255.255
B	128.0.0.0~191.255.255.255	172.16.0.0~172.31.255.255
C	192.0.0.0~223.255.255.255	192.168.0.0~192.168.255.255

这也是为什么大多数时候,你使用ipconfig查到的一般就只是以172.开头的b类私有Ip,或者以192.168开头的c类私有Ip。

私有ip有底下的几个限制:
(1)私有 IP 的路由信息不能对外散播 (只能存在内部网络);
(2)使用私有 IP 作为来源或目的地址的封包,不能透过 Internet 来转送 (不然网络会混乱);
(3)关于私有 IP 的参考纪录(如 DNS),只能限于内部网络使用。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值