无线模块拨号驱动

https://blog.csdn.net/xingyuan1hao/article/details/89279730

https://blog.csdn.net/wandersky0822/article/details/101674806?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

一、ecm、ppp、ndis 拨号

Modem拨号,PPP属于数据链路层协议,它使用HDLC协议格式来封装数据帧,而在数据流中如果遇到
0x7D,则表示后面的数据是控制信息,当它出现的时候,设备需从数据模式切换成控制模式,病处理
这些信息,设备需要对每一个字节的数据进行解析,并作出相应的处理,占用较多的资源。

NDIS拨号,Ethernet协议是通过使用不同的以太网帧的包头来区分控制信息和数据信息,一个以太网帧
的包头大小是固定的14字节,所以对于每一个帧,设备只需要处理其包头即可。

ppp通过pppd进行拨号,NDIS通过gobinet进行拨号。分别采用各自不同的原理,进行网络通信拨号。

转载:RmNet,CDC-ECM ,NDIS,RNDIS区别
https://www.cnblogs.com/ricks/p/9448712.html

RmNet和CDC-ECM区别:更像是两种拨号方式的区别,RmNet获取公网IP,ECD-ECM获取局域网IP。

在高通平台上,rmnet driver 和标准的CDC-ECM是有区别的,rmnet 也是属于CDC-ECM
他们具体的区别在于对于USB命令的封装以及使用的USB接口,端点定义方式不同

 如果是使用rmnet,那么发起data call是通过QMI工具发的QMI命令,QMI工具为QMICM,QMICM集成了QMI命令
 而通过标准的CDC-ECM发起data call,则是发送标准的ECM命令。

 如果是QMICM建立的data call,不走router的,所以它的IP地址获得的是公网IP。
 而通过标准的CDC-ECM建立的data call,是走router的,获得的IP地址是私有的IP如192.168开头

NDIS和Rndis区别:NDIS是一种规范,定义了网络驱动接口的api。RNDIS是一种技术,是将TCP/IP封装在USB报文里,实现网络通信。

1,RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。

2,NDIS(Network Driver Interface Specification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。 NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

NDIS支持三种类型的网络驱动程序: NDIS网卡驱动程序(NICdrivers) 网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。 NDIS中间驱动程序 (InterMediateProtocolDrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。 NDIS协议驱动程序 (Upper Level Protocol Drivers):协议驱动程序执行具体的网络协议,如IPX/SPX、TCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动程序的信息。

3,RAS是典型的拨号实现,需要利用Windows mobile的PPP协议栈实现连接配置和建立 rndis,Remote Network Driver Interface Specification,既是RemoteNDIS,既是远程网络驱动接口规范。基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。

NDIS可以划分成应用层(DHCP client/server)、传输层(UDP)、网络层(ARP/IP)、链路层(Ethernet II)、物理层(USB)。
ndis物理层
ECM是标准的NIC设备接口,与Ethernet协议相对应。

以太网帧格式
Modem拨号,PPP属于数据链路层协议,它使用HDLC协议格式来封装数据帧,而在数据流中如果遇到
0x7D,则表示后面的数据是控制信息,当它出现的时候,设备需从数据模式切换成控制模式,病处理
这些信息,设备需要对每一个字节的数据进行解析,并作出相应的处理,占用较多的资源。

NDIS拨号,Ethernet协议是通过使用不同的以太网帧的包头来区分控制信息和数据信息,一个以太网帧
的包头大小是固定的14字节,所以对于每一个帧,设备只需要处理其包头即可。

转载:Linux PPP详细介绍
http://blog.sina.com.cn/s/blog_893e7cc101014ipq.html

什么是PPP

PPP是一种网络中最为基础的协议。PPP协议(Point-to-Point Protocol)是一种数据链路层协议,它是为在同等单元之间传输数据包这样的简单链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。


PPP协议包括以下三个部分:

1. 数据帧封装方法。

2. 链路控制协议LCP(Link Control Protocol):它用于对封装格式选项的自动协商,建立和终止连接,探测链路错误和配置错误。

3. 针对不同网络层协议的一族网络控制协议NCP(Network Control Protocol): PPP协议规定了针对每一种网络层协议都有相应的网络控制协议,并用它们来管理各个协议不同的需求。


PPP认证方式
  1. 口令验证协议(PAP)
  PAP 是一种简单的明文验证方式。NAS(网络接入服务器,Network Access Server)要求用户提供用户名和口令,PAP以明文方式返回用户信息。

  2. 挑战-握手验证协议(CHAP)
   CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID和 一个任意生成的挑战字串(arbitrary challenge string)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,称为Secret Password,其中用户名以非哈希方式发送。



linux中PPP怎样实现的

PPP 协议之下是以太网和串口等物理层,之上是IP协议等网络层。这里,对于下层,我们只讨论串口的情况,对于上层,我们只讨论TCP/IP的情况。发送 时,TCP/IP数据包经过PPP打包之后经过串口发送。接收时,从串口上来的数据经PPP解包之后上报给TCP/IP协议层。linux下ppp框架结构如下图:



PPP协议栈

主要负责PPP层数据的封装、压缩与解压缩.另外,它还对普通数据包和Ppp过程的数据包进行了分流,将普通数据包提交到TCP/IP协议栈,而将Ppp过程的数据包放到/dev/ppp设备队列中,等待Pppd去收取并处理.

http://hi.csdn.net/attachment/201112/31/0_1325300769F8Qz.gif

PPP 是一个分层结构。在底层,它能使用同步媒介(如 ISDN 或同步 DDN 专线),也能适用异步媒介(如基于 Modem 拨号的PSTN 网络)。在数据链路层,PPP 在链路建立方面提供了丰富的服务,这些服务以 LCP 协商选项的形式提供。在上层,PPP 通过

NCPs 提供对多种网络层协议的支持。PPP对于每一种网络层协议都有一种封装格式来区别它们的报文。
 



什么是pppd

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


 

/dev/ppp
 

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


以太网控制模型(Ethernet Networking Control Model) 用于在设备和主机之间传输以太网数据包。
在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。
CDC ECM设备通常是一个以太网卡,用于连接LAN或者是WLAN
ECM的驱动源码文件是drivers/net/usb/cdc_ether.c

 

转载:USB中CDC-ECM的了解和配置

https://blog.csdn.net/kangear/article/details/37605811

USB中典型类及子类:


CDC-ECM同UVC原理上是一样的,定义一套标准协议主从机都遵守了就不需要额外的驱动程序。
以太网控制模型是用在主从设备间的以太网帧数据的交换。
数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。


Linux内核配置支持CDC-ECM:

Device Drivers  --->

    [*] Network device support  --->

        USB Network Adapters  --->

            <*> Multi-purpose USB Networking Framework

            -*-   CDC Ethernet support (smart devices such as cable modems)

总结:ECM的驱动源码文件是drivers/net/usb/cdc_ether.c。不需要添加Vid Pid等等任何操作就可以使用。cdc_ether.c与传统的以太网芯片的驱动程序并不一样,并不是实现xxx_open(),xxx_stop(),xxx_tx(), xxx_hard_header(), xxx_get_stats, xxx_tx_timeout()而是实现了:usbnet_generic_cdc_bind(), usbnet_cdc_unbind(), usbnet_cdc_bind(), usbnet_cdc_status()等4个API。

二、Gobinet QMI-WWAN区别

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

上面是从别的地方看到了,但是并没有说区别,  经过多方查看资料,我的理解就很简单,Gobinet  QMI-WWAN作用是一样的,都是在Linux上高通模块的驱动程序,分界线就是linux3.4内核,之前高通的QMI-WWAN并没有添加到linux内核中,所以高通就开发了Gobinet软件包,包括4G驱动与4G拨号程序,  但是linux3.4内核已经把QMI添加到内核中了,所以使用高通方案的4G模块就不需要这么麻烦了,  在menuconfig的时候

* CONFIG_USB_SERIAL=y
* CONFIG_USB_SERIAL_WWAN=y
* CONFIG_USB_SERIAL_OPTION=y

* CONFIG_USB_WDM=y
* CONFIG_USBNET=y
* CONFIG_USB_NET_QMI_WWAN=y

添加了这些配置,就可以了, 大大简化了4G模块的使用。

所以说本质上他们是一样的,都是NDIS规范在"物理层"上的实现形式,驱动的也是同一个高通4G模块。

就这么简单!!!!

For a long time, the only way to use such QMI+net pair in the Linux kernel was to use the out-of-tree GobiNet drivers provided by Qualcomm or by other manufacturers, along with user-space tools also developed by them (some of them free/open, some of them proprietary). Luckily, a couple of years ago a new qmi_wwan driver was developed by Bjørn Mork and merged into the upstream kernel. This new driver provided access to both the QMI port and the network interface, but was much simpler than the original GobiNet one. The scope was reduced so much, that most of the work that the GobiNet driver was doing in kernel-space, now it had to be done by userspace applications. There are now at least 3 different user-space implementations allowing to use QMI devices through the qmi_wwan port: ofono, uqmi and of course, libqmi .

看了上面这段话。看来我的理解是正确的!!!

 

200409后记 :

详细看过GobiNet 的代码后,发现GobiNet 已经支持QMI-WWAN了,即使使用QMI-WWAN驱动的,也可以使用GobiNet 来进行后台的管理, 包括拨号,掉线重拨等。
1.Gobinet拨号
  GOBI 高通Gobi无线宽带芯片技术,只需一个模块即可支持多种移动宽带网络和众多移动运营商.
  高通公司称全新的芯片将基于Gobi 4G LTE无线基带、MDM9615和MDM9215。这种技术可以在FDD和TDD网络下进行LTE连接,同时支持HSPA+和EV-DO网络、2G/3G网络。这意味着用户可以在本地使用高速4G LTE网络,在其他地方使用3G网络。Gobi平台在MDM芯片组的基础上还提供了软件增强层,这样可以使用不同技术下的无线连接更简单。
 
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
3.ppp协议拨号:点对点协议
  PPP(点到点协议)在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。
  官网源码:https://ppp.samba.org

三、NDIS开发详解

https://blog.csdn.net/xgbing/article/details/625260

这几个问题困扰了我很长时间,经过我不懈的努力 加上  我的悟性,  我自认为 理解了那么一点。

ndis (Network Driver Interface Specification) 网络驱动接口规范,这是一个规范,我也可以理解为标准,这个规范规定的比较宽,从物理层到应用层都有涉及,(也就是介绍中说的:横跨传输层、网络层和数据链路层)

下面是网卡查到的相关介绍:

NDIS(Network Driver Interface Specification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。 NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

NDIS支持三种类型的网络驱动程序: NDIS网卡驱动程序(NICdrivers) 网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。 NDIS中间驱动程序 (InterMediateProtocolDrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。 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选项,说明新内核已经支持了)


QMI: Qualcom Message Interface

Network Driver Interface Specification网络驱动接口规范

ECM:Ethernet Control Model  以太网控制模型

MBIM,(Mobile Broadband Interface Model

 

不是我不明白,这世界变化快,双多一个GOBINET,这属于哪个层呢?

1.Gobinet拨号
  GOBI 高通Gobi无线宽带芯片技术,只需一个模块即可支持多种移动宽带网络和众多移动运营商.
  高通公司称全新的芯片将基于Gobi 4G LTE无线基带、MDM9615和MDM9215。这种技术可以在FDD和TDD网络下进行LTE连接,同时支持HSPA+和EV-DO网络、2G/3G网络。这意味着用户可以在本地使用高速4G LTE网络,在其他地方使用3G网络。Gobi平台在MDM芯片组的基础上还提供了软件增强层,这样可以使用不同技术下的无线连接更简单。
 
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
3.ppp协议拨号:点对点协议
  PPP(点到点协议)在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。

猜你喜欢

转载自www.cnblogs.com/jodyccf/p/12981104.html