随着开放源代码的出现,开发的时间已经快速下降,同时质量也迅速提高。 对于所有参与WLAN /WiFi开发的人来说,让我们来研究一下基于开源mac80211框架的Linux的WLAN架构吧。
下面的框图说明了Linux的WLAN架构。 请看下面的详细资料。
用户空间:
配置:wpa_supplicant和hostapd:
所有直接与用户交互的应用程序都在这里。 例如可以基于GUI / CLI。 在Ubuntu / Fedora发行版本的网络管理器是基于GUI的,但最核心的部分是基于命令行的。例如,使用wpa_supplicant用于控制STA的部分和使用hostapd用于控制AP的部分。两者都是可通过其CLI版本(wpa_cli,hostapd_cli)配置的。
它们支持不同的功能,如SME,MLME,安全,无线直连(P2P),AP和STA的配置。
工具:
我们也有工具来直接发送命令到驱动来设置一些参数,如通道,带宽,一些自定义的命令等。
用户空间和内核空间之间的桥
如何在用户空间中的各种应用程序和内核中的核心实体之间进行沟通呢? 我们有不同的方法,但都是基于不同的套接字接口。WExt ==> 通用无线扩展:IOCTL接口
NL80211==> Netlink套接字
HostAP ==> 原始数据包套接字
特定于芯片组:
Atheros==> IOCTL 接口
Prism,IPW etc.
内核空间
配置和UMAC
对于开源世界来说,内核的WLAN架构是mac80211,它分成2个内核模块。cfg80211.ko:它处理所有的配置,和用户空间的交互。
mac80211.ko:协议:上层的MAC,和驱动程序的交互。
大部分功能和管理是由具有mac80211模块在底层的MAC协助下处理的。
低层的Mac驱动程序
低层的MAC驱动担任UMAC和芯片组(固件和硬件)之间的桥梁。 他们通过Linux内核提供的服务来执行所有的设备初始化,注册到操作系统上,错误注册,中断注册等。一个精心编写的驱动程序遵循这些约定:
- 保持一个操作系统无关层:方便移植到不同的操作系统。
- 保持一个UMAC无关层:方便移植到不同的UMAC上:专有,开源,第三方等。
- 总线抽象层:保持不同的物理总线之间,如PCI,PCIe,AHB,SDIO等的相容性
芯片组:固件和硬件
完整的802.11协议的功能在这里实现。固件可能是运行在一个单独的处理器/微控制器上,它配置和控制硬件,同时还通过一个芯片组(控制路径)特定的通讯接口与主机(驱动程序)进行交互。
数据路径通常包括一个硬件上的DMA控制器,它负责产生中断给主处理器和从/至主机传输数据包到硬件队列。
参考文献:
wpa_supplicant_hostapd_devel_doc
http://www.omappedia.org/wiki/MAC802.11_based_Wilink
wpa_supplicant