💖 点赞 + 收藏 + 关注,WiFi 嵌入式物联网开发系列持续更新!
上一章讲解驱动、总线、Firmware加载流程。硬件驱动就绪之后,Linux STA模式的核心就是 wpa_supplicant。
很多嵌入式开发者只会复制一份简单配置,遇到多AP切换、掉线不重连、密码明文保存、企业WiFi认证等问题无从下手。
本章完整解析 wpa_supplicant.conf,覆盖全局参数、network网络块、PSK生成、自动重连、后台扫描、密钥持久化,同时提供工程可用模板,梳理量产产品高频坑。
一、wpa_supplicant 基础启动方式
1. 启动命令
启动成功后,会生成控制socket,默认路径 /var/run/wpa_supplicant/wlan0,wpa_cli 通过该socket和守护进程通信。
2. 配合DHCP获取IP
wpa_supplicant只负责WiFi链路层连接,不负责IP地址获取。链路连通后,需要dhcp客户端获取IP:
二、wpa_supplicant.conf 文件整体结构
配置分为两大块:
全局配置段:文件开头,控制扫描、重连、日志、国家码、socket权限。
network{} 网络块:每一个network{}代表一组WiFi配置(SSID、密码、加密方式、优先级),可以配置多个AP。
完整工程模板:
三、全局参数逐项解析(必调)
-
country=CN:国家码,非常关键,决定可用信道、发射功率,必须和内核cfg80211监管域匹配。CN代表中国。
-
ctrl_interface=/var/run/wpa_supplicant:控制socket存放目录,wpa_cli需要访问该路径。
-
ctrl_interface_group=0:socket所属用户组,0为root,嵌入式系统一般保持0。
-
update_config=1:允许wpa_supplicant运行时修改配置文件。wpa_cli add_network添加网络后,会自动写入配置。 0=只读配置,运行时修改不会保存到文件。量产如果不允许运行时修改WiFi,设置为0。
-
ap_scan=1:扫描模式,1=驱动扫描;2=wpa_supplicant软件扫描。绝大多数场景使用1。部分老旧网卡需要设置2。
-
fast_reauth=1:快速重认证,漫游时加速连接。
-
bgscan="simple:30:-5:300":后台扫描配置,格式:模式:扫描间隔(s):RSSI阈值:长间隔。 简单理解:连接WiFi的同时,后台周期性扫描周围AP,用于多AP切换。
bgscan说明: simple:30:-5:300 信号较好时每30秒扫描一次;信号变差触发阈值‑5dB相对变化;信号很差拉长到300秒扫描。 后台扫描会短暂断流,实时业务对抖动敏感需要调大扫描间隔。
四、network{}网络块参数详解
1.WPA2‑PSK最常用配置
-
ssid="TestAP"WiFi名称,带引号,可以包含空格。
-
psk:可以填写明文密码;也可以填写预计算的32字节PSK哈希值,实现配置文件不保存明文密码。
-
priority优先级,数值越大优先级越高。多个network块时,优先连接高优先级AP。
-
key_mgmt密钥管理方式:WPA‑PSK;NONE开放网络;WPA‑EAP企业WiFi。WPA2‑PSK可以省略,wpa_supplicant自动探测。
2. 开放无密码AP配置
3. WPA3‑SAE配置
4. 生成PSK哈希,避免明文密码保存在配置文件
wpa_passphrase工具,输入SSID和密码,输出哈希psk值:
把明文那一行注释或删除,只保留psk哈希,配置文件不再保存明文密码,适合产品落地。
五、自动重连机制原理
wpa_supplicant默认自带自动重连逻辑,不需要写shell循环。
WiFi断开后,wpa_supplicant收到内核nl80211断开事件。
内部状态机进入扫描状态,扫描周围AP列表。
按照priority优先级匹配network块中的SSID。
发起认证、关联、四次握手。
连接成功后通知上层;失败则等待退避时间,继续重试。
常见误区:为什么掉线后不自动重连?
-
1. update_config=0,同时运行时通过wpa_cli添加网络,配置未持久化,重启守护进程配置丢失。
-
2. bgscan没有配置,连接状态下不会后台扫描AP,AP消失之后无法发现回来。
-
3. AP信号已经低于网卡接收灵敏度,扫描不到该SSID,自然无法重连。
-
4. wpa_supplicant进程崩溃退出,状态机停止。需要systemd/supervise监控进程保活。
工程建议:量产产品使用systemd托管wpa_supplicant,设置Restart=on‑failure,进程崩溃自动拉起。
六、wpa_cli常用实操命令
save_config生效前提:全局配置 update_config=1,并且文件系统可写。只读根文件系统不能使用save_config。
七、高频故障定位
WPA四次握手失败:启动增加‑d参数打开debug日志,看日志报错。绝大多数密码错误、AP加密模式不匹配。
能扫描到AP,但无法关联:检查country国家码,信道是否被监管域禁止。
重启wpa_supplicant配置丢失:update_config=0,或者根文件系统只读,save_config无法写入。
多个AP不会自动切换:配置bgscan后台扫描,设置合理priority优先级。
连接成功,但没有IP地址:wpa_supplicant链路正常,问题出在DHCP客户端,与WiFi无关。
八、本章小结
wpa_supplicant.conf分为全局配置段与多个network{}网络块;priority决定多AP连接优先级。
update_config控制运行时配置是否持久化;量产只读文件系统设置为0。
wpa_passphrase可以生成PSK哈希,配置文件去除明文密码,提升安全性。
bgscan后台扫描,实现连接状态下持续探测周边AP,支撑自动重连、简单漫游。
wpa_supplicant只处理链路层;IP地址需要dhcp客户端获取;进程崩溃需要外部守护保活。
下一章预告:第 11 章 hostapd配置详解:搭建Linux AP热点、STA隔离、最大接入数、国家码
💖 点赞 + 收藏 + 关注,WiFi 嵌入式物联网开发系列持续更新!
网硕互联帮助中心





评论前必须登录!
注册