💖 点赞 + 收藏 + 关注,WiFi 嵌入式物联网开发系列持续更新!
第一部分底层原理已经全部结束,从本章开启第二部分:Linux WiFi系统架构。
很多做嵌入式Linux的开发者,只会敲 iw、ifconfig 命令,对整套WiFi软件栈没有全局认知。遇到WiFi连不上、AP模式起不来、扫描失败、wpa_supplicant报错,只能网上复制粘贴,不会定位根源。
本章站在全栈视角,自上而下拆解Linux WiFi完整分层:用户态应用 → wpa_supplicant/hostapd → nl80211 → cfg80211内核子系统 → mac80211驱动层 → Hardware硬件固件。
讲清每个组件职责、相互调用关系,厘清很多人混淆的概念,同时结合工程报错场景,为后面驱动、命令实战打下基础。
一、Linux WiFi完整分层总览
Linux WiFi栈从上层应用到底层硬件,分为5层,自上而下顺序:
用户态工具/应用层:iw、wpa_cli、hostapd_cli、业务应用程序
用户态守护进程:wpa_supplicant(STA模式)、hostapd(AP热点模式)
内核接口层 netlink‑nl80211:用户态与内核通信通道
内核WiFi子系统:cfg80211配置管理,mac80211 802.11协议栈
驱动 & Firmware硬件层:网卡驱动、WiFi固件、SDIO/USB/PCIe硬件总线
核心记住:nl80211是通道;cfg80211负责配置校验;mac80211实现802.11状态机;wpa_supplicant负责认证加密;hostapd负责AP管理。
二、netlink & nl80211:用户态和内核的通信桥梁
1. Netlink
Netlink是Linux内核提供的一套套接字通信机制,专门用于用户空间 ↔ 内核空间双向通信。
传统ioctl是单向系统调用,netlink支持内核主动向上层推送事件,例如:WiFi断开、扫描完成、信号变化,内核可以主动通知wpa_supplicant。
2. nl80211
nl80211 是基于netlink实现的WiFi专用协议,是cfg80211对外暴露的接口。
-
所有WiFi操作:扫描、关联、断开连接、设置AP参数、获取RSSI信噪比,全部通过nl80211消息完成。
-
旧版本工具iwlist使用废弃的Wireless‑Extensions(WE)ioctl接口,新项目一律使用nl80211。
-
iw、wpa_supplicant、hostapd底层全部封装nl80211消息。
工程坑:内核如果关闭CONFIG_NL80211,iw工具、wpa_supplicant全部无法工作。很多裁剪后的嵌入式Linux内核踩这个坑。
三、内核子系统 cfg80211 与 mac80211
1. cfg80211
cfg80211全称Configuration 802.11,是Linux内核的WiFi配置管理子系统。
-
接收nl80211下发的配置请求,做参数合法性校验:信道合法性、国家码、带宽、加密模式、最大连接数。
-
维护网卡设备状态:STA模式 / AP模式 / MONITOR监听模式。
-
向用户空间上报事件:扫描结果、连接成功、断开原因。
-
维护 regulatory domain(监管域/国家码),限制可用信道、发射功率。
cfg80211不实现802.11协议状态机,只管配置、校验、状态管理。
2. mac80211
mac80211是内核中完整的802.11 MAC层软件协议栈。
-
实现802.11底层状态机:扫描、认证、关联、帧封装、重传、速率控制。
-
提供驱动抽象接口,WiFi网卡驱动只需要实现硬件相关操作,不需要重复实现整套802.11。
-
支持STA、AP、Monitor监听、Mesh多种工作模式。
> 驱动分为两类:mac80211驱动(硬件只负责射频,MAC由内核mac80211实现);FullMAC驱动(网卡固件内部完整实现802.11,内核只做简单控制)。
cfg80211与mac80211关系
cfg80211做配置校验管理;mac80211做802.11MAC协议实现;二者紧密配合,缺一不可。
内核配置选项:CONFIG_CFG80211、CONFIG_MAC80211,嵌入式Linux编译内核必须开启。
四、wpa_supplicant:STA模式核心守护进程
1. 是什么
wpa_supplicant是Linux下STA客户端模式的核心用户态守护程序。
mac80211内核只处理原始802.11帧,WPA/WPA2/WPA3四次握手、密钥协商、PMK、PTK计算全部在wpa_supplicant用户态完成。这是非常关键的知识点。
2. 主要能力
-
WiFi扫描管理,保存多个AP的配置(ssid、密码、加密方式)
-
WPA‑PSK/WPA2‑PSK/WPA3‑SAE、企业WPA‑EAP认证,四次握手密钥协商
-
连接管理:自动选最优AP、掉线自动重连
-
通过nl80211把生成的会话密钥下发到内核mac80211,内核用密钥加密空中数据帧
-
对外提供控制接口:wpa_cli工具通过socket和wpa_supplicant交互
3. 工作交互流程(STA完整链路)
wpa_supplicant读取wpa_supplicant.conf配置文件
调用nl80211接口下发扫描命令到内核mac80211
内核驱动完成扫描,扫描结果通过nl80211回传给wpa_supplicant
wpa_supplicant选择目标AP,发起802.11认证、关联
完成WPA2四次握手,在用户态计算PTK会话密钥
将PTK密钥通过nl80211下发内核,内核使用该密钥加密空中数据包
连接建立完成,通知上层,随后dhcp客户端获取IP地址。
4. 常见工程问题
-
wpa_supplicant.conf配置错误,直接导致WPA握手失败,无法联网
-
wpa_supplicant异常崩溃,WiFi保持关联但是无法收发数据,假连接
-
裁剪系统时不要把wpa_supplicant裁掉,否则Linux无法连接WPA2加密WiFi。
五、hostapd:AP热点模式守护进程
1. 是什么
hostapd是Linux下AP热点模式的用户态守护进程,可以理解为AP版本的wpa_supplicant。
负责模拟路由器行为,管理接入的STA设备,处理AP侧的WPA/WPA2/WPA3认证、四次握手。
2. hostapd核心能力
-
配置AP参数:SSID、信道、带宽、加密模式、密码、国家码
-
管理STA接入:处理客户端认证、关联、WPA2四次握手
-
维护已接入STA列表,支持最大接入数控制,STA隔离
-
对外提供hostapd_cli控制接口
-
配合内核mac80211完成Beacon信标帧发送
重要区分 wpa_supplicant VS hostapd
|
wpa_supplicant |
STA客户端模式 |
无线终端,去连接路由器 |
工控板、网关作为WiFi终端 |
|
hostapd |
AP热点模式 |
模拟路由器,对外提供WiFi |
设备配网热点、本地无线网关 |
注意:部分网卡硬件不支持AP模式,即便hostapd配置正确,也无法启动热点,本质是驱动/mac80211硬件能力限制。
六、上层工具 iw / wpa_cli / hostapd_cli
-
iw:直接封装nl80211,直接操作内核WiFi子系统,可以扫描、设置信道、查看状态,不处理WPA认证,只做底层操作。
-
wpa_cli:和wpa_supplicant本地socket通信,间接控制STA连接、重连、查看状态。
-
hostapd_cli:控制hostapd,查看AP接入的STA、踢出客户端。
很多新手误区:只使用iw命令,iw只能完成开放网络的关联,无法完成WPA2/WPA加密认证,加密连接必须依赖wpa_supplicant。
七、整套栈典型故障快速定位思路(工程实战)
iw list看不到网卡:驱动未加载,firmware缺失,总线异常,内核cfg80211未开启。
iw可以扫描,wpa_supplicant连不上WPA2路由器:优先看wpa_supplicant日志,大概率配置错误、握手失败。
iw扫描正常,hostapd启动AP失败:检查网卡是否支持AP模式,国家码、信道是否合法,驱动是否支持。
WiFi能关联,但是没有IP:WiFi链路层正常,上层dhcp客户端问题,和802.11无关。
内核大量cfg80211/mac80211报错:网卡firmware版本不匹配,驱动bug。
八、本章小结
nl80211/netlink是用户态与内核通信通道,替代老旧Wireless‑Extensions ioctl接口。
cfg80211做配置校验、监管域、状态管理;mac80211实现内核802.11MAC协议。
wpa_supplicant负责STA模式WPA/WPA2/WPA3认证与四次握手;hostapd负责AP热点管理。加密密钥计算发生在用户态守护进程。
iw是底层nl80211工具,本身不处理加密认证;加密WiFi连接离不开wpa_supplicant。
LinuxWiFi排错分层思路:硬件驱动→内核子系统→用户态守护进程→上层应用。
下一章预告:第 09 章 无线网卡驱动加载流程:Firmware、SDIO/USB/PCIe 总线适配
💖 点赞 + 收藏 + 关注,WiFi 嵌入式物联网开发系列持续更新!
网硕互联帮助中心



评论前必须登录!
注册