云计算百科
云计算领域专业知识百科平台

《WiFi 嵌入式物联网开发全套实战》| 第 08 章 Linux WiFi 整体软件栈:cfg80211、nl80211、wpa_supplicant、hostapd 详解

💖 点赞 + 收藏 + 关注,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 嵌入式物联网开发系列持续更新!

     

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 《WiFi 嵌入式物联网开发全套实战》| 第 08 章 Linux WiFi 整体软件栈:cfg80211、nl80211、wpa_supplicant、hostapd 详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!