正如图中看到的一样,存在着两种WiFi设备,具体是哪一类要看IEEE802.11标准的MLME如何实现。
如果直接通过硬件实现,那么设备就是硬MAC(fullMAC)设备如果通过软件的方式实现,那么设备就是软MAC(softMAC)设备。现阶段大部分无线设备都是软件实现的软MAC设备。
通常我们把Linux内核无线子系统看成两大块:cfg80211和mac80211,它们连通内核其他模块和用户空间的应用程序。
特别指出,cfg80211在内核空间提供配置管理服务,内核与应用层通过nl80211实现配置管理接口。需要记住的是,
硬MAC设备和软MAC设备都需要cfg80211才能工作。而mac80211只是一个驱动API,它只支持软件实现的软MAC设备。
接下来,我们主要关注软MAC设备。
Linux内核无线子系统统一各种WiFi设备,并处理OSI模型中最底层的MAC、PHY两层。
若进一步划分,MAC层可以分为MAC高层和MAC底层。前者负责管理MAC层无线网络的探测发现、身份认证、关联等
后者实现MAC层如ACK等紧急 *** 作。大部分情况下,硬件(如无线适配器)处理大部分的PHY层以及MAC底层 *** 作。Linux子系统实现大部分的MAC高层回调函数。
2模块间接口
从图一中我们可以看出,各个模块之间分界线很清晰,并且模块间相互透明不可见。模块之间一般不会相互影响。
举个例子,我们在WiFi设备驱动做修改(如,打补丁、添加新的WiFi驱动等),这些变更并不会影响到mac80211模块,
所以我们根本不用改动mac80211的代码。再如,昆明北大青鸟http://www.kmbdqn.cn/建议添加一个新的网络协议理论上是不用修改套接字层以及设备无关层代码。一般情况下,内核通过一系列的函数指针实现各层之间相互透明。
查看是否有mac80211模块需要根据内核模块编译。具体 *** 作步骤如下:1、启动linux内核,查看linux下wlan总体架构。
2、查看网络管理器基于GUI的模块,进入内核模块编译。
3、在内核模块中查看模块代码。
4、代码为mac80211则表示有该模块。
你好,1. 基本概念
cfg80211: 用于对无线设备进行配置管理。与FullMAC, mac80211和nl80211一起工作。(Kernel态)
mac80211: 是一个driver开发者可用于为SoftMAC无线设备写驱动的框架 (Kernel态)。
nl80211: 用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议(User态)
WNIC : Wireless Network Interface Controller, 它总是指望硬件执行协议(如IEEE802.11)描述的功能。
MLME: 即MAC(Media Access Control ) Layer Management Entity,它管理物理层MAC状态机。
SoftMAC: 其MLME由软件实现,mac80211为SoftMAC实现提供了一个driver API。 即:SoftMAC设备允许对硬件执行更好地控制,允许用软件实现对802.11的帧管理,包括解析和产生802.11无线帧。目前大多数802.11设备为SoftMAC,而FullMAC设备较少。
FullMAC: 其MLME由硬件管理,当写FullMAC无线驱动时,不需要使用mac80211。
wpa_supplicant: 是用户空间一个应用程序,主要发起MLME命令,然后处理相关结果。
2. cfg80211
cfg80211是Linux 802.11配置API。cfg80211用于代码wext(Wireless-Extensions),nl80211用于配置一个cfg80211设备,且用于kernel与userspace间的通信。wext现处理维护状态,没有新的功能被增加,只是修改bug。如果需要通过wext *** 作,则需要定义CONFIG_CFG80211_WEXT。
cfg80211 and nl80211: 基于消息机制,使用netlink接口
wext: 基于ioctl机制
struct ieee80211_hw: 表示硬件信息和状态
ieee80211_alloc_hw:每个driver调用ieee80211_alloc_hw分配ieee80211_hw,且以ieee80211_ops为参数
ieee80211_register_hw:每个driver调用ieee80211_register_hw创建wlan0和 wmaster0,并进行各种初始化。
struct ieee80211_ops:每个driver实现它的成员函数,且它的成员函数都以struct ieee80211_hw做为第一个参数。在struct ieee80211_ops中定义了24个方法,以下7个方法必须实现:
tx,start,stop,add_interface,remove_interface,config和configure_filter。
3. mac80211
它是一个driver开发者可用于为SoftMAC无线设备写驱动的框架,mac80211为SoftMAC设备实现了cfg80211回调函数,且mac80211通过cfg80211实现了向网络子系统注册和配置。配置由cfg80211通过nl80211和wext实现。
mac80211在体系结构中的位置如下图所示:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)