WLAN驱动分析文档













1引言

1.1目的

通过编写阅读本文档,可以达到如下目的:

  1. WLAN技术有一定了解

  2. 802.11a802.11b及相应的扩展协议有一定的了解

  3. 详细阐述了WLAN驱动的原理及802.11eWMM扩展。

  4. AndroidLIB层与WLAN驱动的接口暂时并无描述。

1.2项目背景

该项目主要是利用android的开源结构,以三星的S3C6410CPUAW-GH381WLAN网络接口卡的一款android手机系统。


1.3参考资料

  1. WLANDesignGuide by Agilent

  2. Providing QoSin WLANs by intel

2预备知识

2.1WLAN技术

WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种

基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等。

2.2802.11协议简述

2.2.1概述

作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASET快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。在19999月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b802.111Mbps2Mbps速率下又增加了5.5Mbps11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。

主要内容:
  1.802.11工作方式
  2.802.11物理层
  3.802.11b的增强物理层
  4.802.11数字链路层
  5.联合结构、蜂窝结构和漫游

2.2.2802.11工作方式

802.11定义了两种类型的设备,一种是无线站,通常是通过一台PC机器加上一块无线网络接口卡构成的,另一个称为无线接入点(AccessPoint,AP),它的作用是提供无线和有线网络之间的桥接。一个无线接入点通常由一个无线输出口和一个有线的网络接口(802.3接口)构成,桥接软件符合802.1d桥接协议。接入点就像是无线网络的一个无线基站,将多个无线的接入站聚合到有线的网络上。无线的终端可以是802.11PCMCIA卡、PCI接口、ISA接口的,或者是在非计算机终端上的嵌入式设备(例如802.11手机)

2.2.3802.11物理层

802.11最初定义的三个物理层包括了两个扩散频谱技术和一个红外传播规范,无线传输的频道定义在2.4GHzISM波段内,这个频段,在各个国际无线管理机构中,例如美国的USA,欧洲的ETSI和日本的MKK都是非注册使用频段。这样,使用802.11的客户端设备就不需要任何无线许可。扩散频谱技术保证了802.11的设备在这个频段上的可用性和可靠的吞吐量,这项技术还可以保证同其他使用同一频段的设备不互相影响。802.11无线标准定义的传输速率是1Mbps音频相关概念和2Mbps,可以使用FHSS(frequencyhoppingspreadspectrum)DSSS(directsequencespreadspectrum)技术,需要指出的是,FHSSDHSS技术在运行机制上是完全不同的,所以采用这两种技术的设备没有互操作性。

2.2.4802.11b的增强物理层

802.11b在无线局域网协议中最大的贡献就在于它在802.11协议的物理层增加了两个新的速度:5.5Mbps11Mbps。为了实现这个目标,DSSS被选作该标准的唯一的物理层传输技术,这个决定使得802.11b可以和1Mbps2M802.11bpsDSSS系统互操作。最初802.11DSSS标准使用11位的chippingBarker序列-来将数据编码并发送,每一个11位的chipping代表一个一位的数字信号1或者0,这个序列被转化成波形(称为一个Symbol),然后在空气中传播。这些Symbol1MSps(每秒1Msymbols)的速度进行传送,传送的机制称为BPSK(BinaryPhaseShiftingKeying),在2Mbps的传送速率中,使用了一种更加复杂的传送方式称为QPSK(QuandraturePhaseShiftingKeying)QPSK中的数据传输率是BPSK的两倍,以此提高了无线传输的带宽。
802.11b标准中,一种更先进的编码技术被采用了,在这个编码技术中,抛弃了原有的11Barker序列技术,而采用了CCK(ComplementaryCodeKeying)技术,它的核心编码中有一个648位编码组成的集合,在这个集合中的数据有特殊的数学特性使得他们能够在经过干扰或者由于反射造成的多方接受问题后还能够被正确地互相区分。5.5Mbps使用CCK串来携带4位的数字信息,而11Mbps的速率使用CCK串来携带8位的数字信息。两个速率的传送都利用QPSK作为调制的手段,不过信号的调制速率为1.375MSps。这也是802.11b获得高速的机理。表1中列举了这些数据。
为了支持在有噪音的环境下能够获得较好的传输速率,802.11b采用了动态速率调节技术,来允许用户在不同的环境下自动使用不同的连接速度来补充环境的不利影响。在理想状态下,用户以11M的全速运行,然而,当用户移出理想的11M速率传送的位置或者距离时,或者潜在地受到了干扰的话,这把速度自动按序降低为5.5Mbps2Mbps1Mbps。同样,当用户回到理想环境的话,连接速度也会以反向增加直至11Mbps。速率调节机制是在物理层自动实现而不会对用户和其它上层协议产生任何影响。

2.2.5802.11数字链路层

802.11MAC802.3协议的MAC非常相似,都是在一个共享媒体之上支持多个用户共享资源,由发送者在发送数据前先进行网络的可用性。在802.3协议中,是由一种称为CSMA/CD(CarrierSenseMultipleAccesswithCollisionDetection)的协议来完成调节,而在802.11无线局域网协议中,冲突的检测存在一定的问题,这个问题称为"Near/Far"现象,这是由于要检测冲突,设备必须能够一边接受数据信号一边传送数据信号,而这在无线系统中是无法办到的。鉴于这个差异,在802.11中对CSMA/CD进行了一些调整,采用了新的协议CSMA/CA(CarrierSenseMultipleAccesswithCollisionAvoidance)或者。

DCF(DistributedCoordinationFunction)CSMA/CA利用ACK信号来避免冲突的发生,也就是说,只有当客户端收到网络上返回的ACK信号后才确认送出的数据已经正确到达目的。CSMA/CA通过这种方式来提供无线的共享访问,这种显式的ACK机制在处理无线问题时非常有效。然而不管是对于802.11还是802.3来说,这种方式都增加了额外的负担,所以802.11网络和类似的Ethernet网比较总是在性能上稍逊一筹。

另一个的无线MAC层问题是"hiddennode"问题。两个相反的工作站利用一个中心接入点进行连接,这两个工作站都能够""到中心接入点的存在,而互相之间则可能由于障碍或者距离原因无法感知到对方的存在。为了解决这个问题,802.11MAC层上引入了一个新的Send/CleartoSend(RTS/CTS)选项,当这个选项打开后,一个发送工作站传送一个RTS信号,随后等待访问接入点回送RTS信号,由于所有的网络中的工作站能够""到访问接入点发出的信号,所以CTS能够让他们停止传送数据,这样发送端就可以发送数据和接受ACK信号而不会造成数据的冲突,这就间接解决了"hiddennode"问题。由于RTS/CTS需要占用网络资源而增加了额外的网络负担,一般只是在那些大数据报上采用(重传大数据报会耗费较大)

最后,802.11MAC子层提供了另两个强壮的功能,CRC校验和包分片。在802.11协议中,每一个在无线网络中传输的数据报都被附加上了校验位以保证它在传送的时候没有出现错误,这和Ethernet中通过上层TCP/IP协议来对数据进行校验有所不同。包分片的功能允许大的数据报在传送的时候被分成较小的部分分批传送。这在网络十分拥挤或者存在干扰的情况下(大数据报在这种环境下传送非常容易遭到破坏)是一个非常有用的特性。这项技术大大减少了许多情况下数据报被重传的概率,从而提高了无线网络的整体性能。MAC子层负责将收到的被分片的大数据报进行重新组装,对于上层协议这个分片的过程是完全透明的。

2.2.6联合结构、蜂窝结构和漫游

802.11MAC子层负责解决客户端工作站和访问接入点之间的连接。当一个802.11客户端进入一个或者多个接入点的覆盖范围时,它会根据信号的强弱以及包错误率来自动选择一个接入点来进行连接,一旦被一个接入点接受,客户端就会将发送接受信号的频道切换为接入点的频段。这种重新协商通常发生在无线工作站移出了它原连接的接入点的服务范围,信号衰减后。其他的情况还发生在建筑物造成的信号的变化或者仅仅由于原有接入点中的拥塞。在拥塞的情况下,这种重新协商实现quot;负载平衡"的功能,它将能够使得整个无线网络的利用率达到最高。802.11DSSS中一共存在着相互覆盖的14个频道,在这14个频道中,仅有三个频道是完全不覆盖的,利用这些频道来作为多蜂窝覆盖是最合适的。如果两个接入点的覆盖范围互相影响,同时他们使用了互相覆盖的频段,这会造成他们在信号传输时的互相干扰,从而降低了他们各自网络的性能和效率。


2.3802.11四种主要物理组件

1.工作站(Station),构建网络的主要目的是为了在工作站间传送数据。所谓工作站,是指配备无线网络接口的计算设备。

2.接入点(AccessPoint),802.11网络所使用的帧必须经过转换,方能被传递至其他不同类型的网络。具备无线至有线的桥接功能的设备称为接入点,接入点的功能不仅于此,但桥接最为重要。

3.无线媒介(WirelessMedium),802.11标准以无线媒介在工作站之间传递帧。其所定义的物理层不只是一种,802.11最初标准化了两种射频物理层以及一种红外线物理层。

4.分布式系统(DistributionSystem),当几个接入点串联以覆盖较大区域时,彼此之间必须相互通信以掌握移动式工作站的行踪。分布式系统属于802.11的逻辑组件,负责将帧转送至目的地。

下图为802.11网络的基本服务集(basicservice set),其中包含了这四种物理组件。

2.4802.11MAX基础

2.4.1802.11原子帧传送

原子操作意味着这一数据帧的传送非成即败,再此帧传送过程中,无论哪一步丢帧都意味着重新传送。

2.4.2RTS/CTS

802.11允许工作站使用Requestto Send(RTS)Clearto Send(CTS)信号来清空传送区域以防止隐藏节点导致的冲突问题。

RTS帧本身有两个目的,预约无线链路的使用权与要求接收到这一帧的其它工作站保持沉默。和RTS帧一样,CTS帧也会令附近的工作站保持沉默。

注意附加了RTS/CTS帧的传输过程也为原子传输。


2.4.3载波监听功能

802.11具有两种载波监听功能:物理载波监听与虚拟载波监听。物理载波监听功能由物理层提供,由于造价昂贵且对隐藏节点并无法提供必要的信息,因此大多数采用虚拟载波监听的方法。

虚拟载波监听是由网络分配量(NAV)所提供。802.11的帧通常会包含一个Duration字段,用来预定一段媒体使用时间。NAV本身其实就是一个定时器,用来指定预计要占用媒介多少时间。工作站会将NAV设定为预计使用媒介的时间,这包括完成整个操作必须用到的所有帧。其他工作站会将NAV的值倒数至零。只要NAV的值不为零,就代表媒介处于忙碌状态。当NAV为零,虚拟载波监听功能会显示媒介处于空闲状态。NAV是由RTSCTS帧上的表头来载送的。


2.4.4帧间间隔

不同的帧间间隔会为不同类型的传输产生不同的优先次序,当媒体闲置下来时,高优先级的数据所等待的时间较短。因此,如有任何高优先级的数据待传,在优先级较低的帧试图访问媒介之前,优先级较高的数据早就将媒介占为己用了。

短帧间间隔(SIFS),SIFS用于高优先级的传输场合,例如RTS/CTS以及肯定确认帧。经过一段SIFS,即可进行高优先级的传输,媒体即处于忙碌状态。

PCF帧间间隔(PIFS),PIFS主要被PCF使用在无竞争操作中,在无竞争时期,有数据待传的工作站可以等待PIFS后再加以传送,其优先级高于任何竞争式传输。

DCF帧间间隔(DIFS),DIFS是竞争式服务中最短的媒介闲置时间。如果媒介闲置时间长于DIFS,则工作站可以立即对媒体进行访问。

扩展帧间间隔(EIFS),EIFS并非固定的时间间隔,只有在帧传输出现错误时才会用到EIFS


2.4.5DCF竞争服务

大部分的传输操作会采用DCF(分布式协调功能),它提供了类似Ethernet的基于竞争的服务。DCF允许多个独立的工作站彼此交互,无需通过中心控制节点,因此可以运用于IBSS网络或基础结构型网络。

试图传送任何数据前,工作站必须查看媒介是否处于闲置状态。若它处于忙碌状态,工作站必须延迟访问并利用指数退避算法来避免发生冲突。

步骤如下:

  1. 检查medium(传输媒体)是否空闲(IDLE,检查的方式为:medium的空闲时间是否大于DIFS,如果大于则开始传输,往后的状态将为BusyMedium状态,如图所示。在BusyMedium状态将会“拖延传送”(因为medium被占用)。DeferAccess即为“拖延传送”的时间。

  2. SIFS时间用于等待接收端返回的Ack信息以确认数据包的到达。另外关于ContentionWindow的作用,实际上在检测到medium的空闲时间大于DIFS时。仍然没有立即传送数据,而是等待一个随机的时间randombackoff time。每一个工作站都与其他工作站不同的随机时间,Slottime为最小单位,即每个随机时间都是Slottime的倍数!Backoff-time的计算方法可以查看802.11标准。


2.4.6封包帧

其原理是将多个MSDU单元一起传输,MSDU即为上面讨论的每次medium空闲时传输的数据单元。这里将一次传输多个数据单元,连接包的大小不得大于4k


2.4.7PCF无竞争服务

无竞争周期一开始,接入点就会送出一个Beacon帧。该Beacon帧中的CFPMaxDuration(无竞争最大持续期间)字段,用来标明无竞争周期最长持续多久。所有收到此Beacon的工作站会将NAV设定为此时间值,并将DCF媒介访问排除在这段期间之外。

为了避免干扰,所有无竞争传输会另外以SIFS(短帧间间隔)与PIFSPCF帧间间隔)加以隔离防护。这两者都比DCF帧间间隔短,因此在DCF周期内没有其他DCF工作站可以访问媒介。

接入点接管无线媒介后,会根据轮询列表(pollinglist)分别询问与之关联的工作站是否有数据待传。在无竞争周期内,除非关联以轮询帧提出请求,否则工作站不得传送数据。无竞争轮询帧通常简写为CF-Poll。一个CF-Poll帧代表授权传送一个帧。除非接入点送出多次轮询请求,否者每次只能传送一个帧。

轮询列表所列出的都是无竞争周期内受邀传送帧的特权工作站。工作站一旦与接入点关联,就会被列在轮询列表中。

3802.11e WMM应用介绍

3.1802.11e802.11的不同

80211e中采用了另外两种机制来提供Qos服务:EDCA(增强型分布式协调访问机制)与HCCA(混合式协调控制信道访问机制)。

1.EDCA机制相比于DCF机制主要有以下改进之处

aEDCA机制引入了业务优先级的概念,对于不同业务类型设定不同的优先级,高优先级的多媒体实时业务(如视频,语音)具有更多的机会接入信道,减小了这些业务的时间延迟,使得其在网络中播出更加流畅。

b、具有更加灵活的帧间间隔仲裁帧间间隔AIFS。不同的访问类型AC有着不同的AIFS值,AIFS值越小,优先级越高。小的AIFS值意味着视频、语音等多媒体实时业务能够比不太敏感的一般数据通信更快地接入无线网络,从而实现实时通信。

c、不同的访问类型AC在等待信道空闲以后,进入退避时的竞争窗口CW的大小也不同,对于每个AC,有不同的CWmin[AC]CWmax[AC]。优先级越高的ACCWmin[AC]CWmax[AC]值越小。

d、引入了发送机会(TXOP)的概念。TXOPQSTA有权在无线媒体上发送帧交互序列的时隙时间,QSTA应确保它的TXOP的持续时间不会超出规则指定的TXOP最大持续时间,如果要发送的数据太大而不能在一个TXOP限制内发送完,则这个站点就把该数据包分多次发送。

e、可以使无线接入点(AP)能够根据无线站点(STA)的数据类型与丢包、时延及抖动的敏感度分配无线资源,提高了无线带宽的利用率和数据包的管理能力。


2.HCCA机制相比于PCF机制主要有以下改进之处

a、由于HCCA机制的工作也分为竞争期CP和无竞争期CFP,在竞争期CP阶段,使用EDCA机制竞争信道,因此它具有上述的EDCA优于DCF的全部优点。

bHCCA能够在竞争期CP阶段轮询站点,并能基于QSTA具体通信业务流的需要,对数据包进行排序,而不像PCF那样,只能在无竞争期CFP阶段轮询站点。

c、混合协调器HC具有比其他站点(STA)都高的优先权。由于帧间隔PIFSDIFSAIFS都要短,因此HC无需与其他站点竞争,就可以获得信道的控制权。

dHCCA中的轮询TXOP具有QoS(+)CF-Poll帧描述的周期,在一个TXOP的时间间隔内,一个QSTA可通过发送多个序列交互帧实现HC的虚拟载波检测,从而提供改进的CFP保护。

四、EDCA的发包方式,我们需要与PCF相比较。EDCA叫增强的分布式信道接入,与原始的DCF相比较有以下区别。

3.2802.11eWMM模块的原理

1EDCA发送包示意图:

    1. EDCADCF对比示意图:

    1. HCCA发包示意图

关于WMM模块的实现,在驱动代码的Wlan_wmm.c中。

4WLAN驱动结构介绍

4.1SDIO驱动

由于网络接口卡挂接在SDIO总线上,所以在此之前我们先看一下SDIO的驱动结构。其驱动在drivers/mmc目录下的结构为:

|--mmc

| |-- card

| |-- core

| |-- host

主要关注的目录是core目录。

这个目录完成sdio总线的注册操作,相应的ops操作,以及支持mmc的代码。详细的情况将在函数接口部分详细讨论。

4.2详细接口及代码分析

4.2.1SDIO注册流程分析

相应的函数流程图如下:

sbi_register函数开始,调用了内核注册接口sdio_register_driver,这个注册函数为驱动程序指明了nameid、探测函数wlan_probe、移除函数wlan_removewlan_probe用来初始化设备以及做一些准备工作,wlan_remove是其逆过程。

sdio_register_driver的代码在内核中,查看可知它大致完成三件事情:

1、将wlan_sdio在内核中注册。内核中有关于各种设备的一个大链表,这里将wlan_sdio驱动挂入其中。

2、查看总线上所有wlan设备的配置空间,查找id_table与这里的wlan_sdio相同的设备并将此设备与驱动程序相关联上(此过程在内核中完成,并不由wlan_probe完成),再驱动与设备关联上后会调用wlan_probe函数完成对设备的一些准备工作。

3、进行设备与驱动程序的挂接工作。

添加设备是在函数sbi_register_dev中,这段过程在wlan_probe中完成,具体为wlan_probe->wlan_add_card->sbi_register_dev,主要是为中断函数sbi_interrupt注册,读io端口寄存器及设置块大小(用于传输缓存)。这段代码将在WLAN驱动流程分析中涉及。

sbi_register_dev函数里还会完成以下工作:开启SDIO设备——对应函数为sdio_claim_hostsdio_enable_func;申明中断处理函数——对应函数为sdio_claim_irq;获得读写数据的地址映射口——对应函数为sbi_read_ioreg->sdio_readb;设置传输数据缓冲区大小——对应函数为sdio_set_block_size

中断状态的查询代码在sbi_get_int_status函数中,sdio不支持双路的读写数据或者命令,因此在未检测到数据或命令的传输完成状态位置位之前不允许再次传送,通过wmm_process_fw_iface_tx_xfer_end->os_stop_queue->netif_stop_queue函数完成停止设备发送数据。netif_stop_queue函数为内核接口函数。

sdio_ireg& DN_LD_HOST_INT_STATUS——发送中断状态位、sdio_ireg&UP_LD_HOST_INT_STATUS接受中断状态位,接受数据时需要从寄存器中获得接受数据的长度并分配缓存空间。通过mv_get_rx_len函数及dev_alloc_skb函数完成。mv_sdio_card_to_host函数完成从sdio卡中读取数据的过程。区分读到的数据是命令、数据或者事件。

4.2.2WILAN驱动流程分析

wlan_probe函数中要完成的工作(主要是wlan_add_card函数)

此函数在sdio的驱动中已经讲诉过是wlan设备的一些准备工作及注册过程,它主要完成以下几件事情:

1)、建立net_device结构,相应的调用是alloc_etherdev函数,此函数为alloc_netdev的上层调用。

2)、接下来是对net_device结构中一些成员的初始化,完成这此注册的函数是内核函数register_netdev

关于其中详细的初始化过程,其大致的流程如下:

a、对net_device结构的进一步初始化,包括指定打开、传送、关闭等函数。

bwlan_init_sw用来初始化软件适配器部分,也就是会初始化一个wlan_adapter结构体,同时初始化wlan中的命令响应定时器。

cwlan_create_thread创建主线程,线程函数是wlan_service_main_thread,此函数为wlan驱动中的主要处理函数,负责对接收数据和发送数据完成中断的相应——对应的函数为sbi_get_int_status,此函数将会完成中断处理;对深度睡眠的设备的唤醒——对应的函数为sbi_exit_deep_sleep;对响应设备命令的回复——对应的函数为wlan_process_cmdresp;对设备事件的处理——对应的函数为wlan_process_event

随后的os_sched_timeout用于超时唤醒(睡眠指定的时间后,由时间超时来唤醒),主要是确认线程安全的建立。

dsbi_register_dev初始化SDIO设备。

eSET_NETDEV_DEV实现sysfs中物理设备创建一个与网络类逻辑设备的链接,也就是说将物理设备与网络设备联系起来。

fwlan_init_fw下载固件至网卡,主要用于命令、时间等的响应。

注意:这里我们区分一下两个函数wlan_tx_packetwlan_process_tx。在wlan_service_main_thread中我们调用的是wmm_process_tx函数用来推送数据,而wmm_process_tx主要使用wlan_process_tx来推送数据,也就是说我们实际使用的是wmm_process_tx函数来推送数据。

那么另一个函数wlan_tx_packet呢?我们注意到这个初始化语句dev->hard_start_xmit=wlan_hard_start_xmit,这是对设备用来实际操作数据推送的函数的初始化,将缓冲区中的数据推送至网卡的这个过程将由此函数完成。这个函数实际调用的函数即是wlan_tx_packet函数,我们在看一下wlan_tx_packet,它会调用wmm_map_and_add_skb将数据放入wmm的缓冲区,然后唤醒主线程wlan_service_main_thread去处理,主线程会调用wmm_process_tx函数。

对于接收数据的函数来说,则是wlan_process_rx_packet,它是在检测到设备发出数据到达的中断时被调用的,也就是说在sbi_get_int_status函数中。



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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

sunxingzhesunjinbiao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值