可参考现代Linux下的wifi框架-CSDN博客Linux下wifi子系统的数据流-CSDN博客在进一步认识mac80211之前我们先学习几点预备知识MLMEMLME 是MAC Sublayer Management Entity的缩写即MAC 子层管理实体。简单来说它是 802.11 协议中负责管理面功能的模块与负责数据面的功能相对。一、管理面 vs. 数据面层面英文职责例子数据面Data Plane负责用户数据的传输你的网页浏览、视频流、文件下载管理面Management Plane负责建立、维护和断开连接扫描热点、认证、关联、漫游、省电模式管理MLME 就是管理面的核心执行者。二、MLME 具体负责什么MLME 处理的是 802.11 协议中各种管理帧和管理流程功能对应管理帧/流程描述扫描 (Scan)Probe Request / ResponseBeacon发现周围有哪些 Wi-Fi 热点认证 (Authentication)Authentication 帧与 AP 进行身份验证关联 (Association)Association Request / Response与 AP 建立连接获得 AID重关联 (Reassociation)Reassociation Request / Response漫游时重新关联到新 AP解除关联 (Disassociation)Disassociation 帧断开连接解除认证 (Deauthentication)Deauthentication 帧强制踢出或主动退出省电管理PS-Poll, Null Data 帧通知 AP 进入/退出睡眠模式速率控制 (部分)与 AP 协商支持的数据速率三、MLME 的位置在 802.11 协议栈中MLME 位于MAC 层内部位于数据面之上、物理层管理实体PLME之上--------------------- | 管理面 (MLME) | ← 管理帧处理、连接状态机 --------------------- | 数据面 (MAC) | ← 数据帧收发、ACK、加密 --------------------- | 物理层 (PHY) | ---------------------四、MLME 在 AIC8800 中由谁实现这正是我们之前讨论的核心问题。MLME 的实现取决于芯片是SoftMAC还是FullMACSoftMAC 设备MLME 由主机端的mac80211软件实现。FullMAC 设备如 AIC8800MLME主要由芯片内部的固件运行在 Cortex-M4F 上实现以降低主机 CPU 负载和响应延迟。在实际的驱动开发中即使是 FullMAC 的 AIC8800主机侧的aic8800_fdrv驱动仍需通过一些回调或消息如通过rwnx_msg_*接口与固件中的 MLME 交互以转发来自用户态的扫描、连接等命令。五、一句话总结MLME 就是 Wi-Fi 连接的 管家它不负责搬运数据而是负责找谁连接、怎么连上、什么时候断开、睡着了怎么叫醒等所有管理性事务。在 AIC8800 这种 FullMAC 芯片中MLME 的大部分逻辑由模组内部的 Cortex-M4F 固件实现主机驱动通过消息接口来调用它。HardMAC和SoftMACHardMAC和SoftMAC是 802.11 无线设备中两种不同的架构主要区别在于MLME管理面功能是在硬件/固件中实现还是在主机软件的驱动中实现。一、核心区别对比表维度SoftMACHardMAC (FullMAC)MLME 位置主机侧Linuxmac80211软件实现芯片内部固件如 AIC8800 的 Cortex-M4F主机 CPU 负担较高需处理管理帧、扫描、关联等较低芯片自行处理主机只下发命令实时性要求较高需快速响应管理事件较低芯片自主处理不依赖主机响应灵活性高协议 Bug 或新特性可通过软件升级修复低依赖厂商固件更新功耗较高主机 CPU 需频繁参与较低芯片可自主进入省电模式驱动开发复杂度较低mac80211提供大部分协议逻辑较高需实现与芯片固件的私有通信接口典型芯片老式 Atheros (ath9k)、RTL8187AIC8800、博通 (bcmdhd)、MTK (mt76部分)二、架构差异图解SoftMAC 架构 HardMAC 架构 ---------------- ---------------- | 用户态应用 | | 用户态应用 | ---------------- ---------------- ↓ ↓ ---------------- ---------------- | mac80211 | ← 软件实现 MLME | cfg80211 | | (协议栈软件) | | (轻量配置层) | ---------------- ---------------- ↓ ↓ ---------------- ---------------- | 驱动 (部分) | | 驱动 (轻量) | ---------------- ---------------- ↓ ↓ ---------------- ---------------- | WiFi 芯片 | | WiFi 芯片 | | (仅PHY底层MAC)| | (完整MACMLME) | ---------------- | Cortex-M4F | | | 运行固件 | | ------------ ----------------关键点SoftMAC 的芯片只负责物理层和简单的 MAC 操作如 ACK 应答而 HardMAC 的芯片内部有一个独立的处理器如 AIC8800 的 Cortex-M4F运行完整的 MAC 层和管理面逻辑。三、各自的优缺点SoftMAC 的优点修复协议 Bug 容易802.11 协议的问题可通过更新主机mac80211解决不需要升级芯片固件往往是最棘手的部分。支持新特性快新的 802.11 特性可以更快地在软件中实现不受芯片硬件能力限制。芯片成本低芯片内部无需集成强大的处理器只需要实现基础的物理层和简单 MAC。SoftMAC 的缺点主机 CPU 负载高管理帧解析、扫描、漫游决策都需要主机 CPU 参与在嵌入式设备如路由器上可能成为瓶颈。实时性挑战管理事件如 Beacon 丢失通过总线传递到主机存在延迟可能影响漫游体验。HardMAC 的优点主机 CPU 负载低管理面完全由芯片自主处理主机只需通过WLAN接口进行简单命令下发和数据传输。功耗更低芯片可以在主机睡眠时自主维持连接、监听 Beacon、在指定时间唤醒主机TWT 等省电机制更容易实现。实时性更好管理事件的响应在芯片内部完成不依赖主机的调度。HardMAC 的缺点芯片成本高需要集成一个独立的处理器如 Cortex-M和较大容量的 RAM/ROM 来运行固件。灵活性差协议 Bug 或新特性依赖厂商提供固件更新而厂商往往更新缓慢或根本不更新。驱动开发复杂驱动需要实现与芯片固件通信的私有协议如 AIC8800 的rwnx_msg_*接口而非使用mac80211提供的标准接口。四、典型芯片举例架构芯片型号特点SoftMACAtheros AR9271 (ath9k_htc)著名的开源友好芯片mac80211实现大部分逻辑RTL8187 (Realtek)老式 USB 网卡SoftMAC 典型代表MT7601 (MediaTek)低成本 USB 网卡SoftMAC 实现HardMACAIC8800内部 Cortex-M4F 运行完整固件BCM43438 (博通)Raspberry Pi 3 内置 WiFiFullMACCYW43455 (Cypress/博通)主流 FullMAC 芯片MT7668 (MediaTek)部分 FullMAC 特性五、LInux 内核中的体现SoftMAC 设备驱动必须注册到mac80211框架实现struct ieee80211_ops中的回调函数如start、stop、tx、add_interface等。HardMAC 设备驱动通常不依赖mac80211而是直接通过cfg80211注册wiphy实现struct cfg80211_ops中的回调如scan、connect、disconnect。六、一句话总结SoftMAC 把 Wi-Fi 的管理大脑放在主机的 Linux 驱动里由mac80211实现芯片只管手脚HardMAC 把整个大脑都放进芯片内部由固件实现主机只负责下达指令。在嵌入式系统选型中HardMAC如 AIC8800通常更受欢迎因为它能显著降低主控 CPU 的负载并简化系统集成。mac80211简单来说mac80211是 Linux 内核中一个专门为SoftMAC无线设备设计的核心框架WiFi 协议栈。它实现了那些 802.11 协议中管理面MLME的大部分复杂逻辑让驱动开发者无需从零实现整个协议栈。mac80211的定位mac80211实现的功能mac80211对比fullmac:实际例子总结