专栏:《WiFi 嵌入式物联网开发全套实战》 专栏定位:嵌入式 Linux/ESP32 WiFi 从原理→驱动→配网→协议→稳定性→抓包调试→量产优化全套工业实战 适配:物联网设备、智能家居、工控网关、无线透传设备、4G+WiFi 双模设备 💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!
本章前言
在嵌入式 Linux WiFi 开发过程中,不管是 STA 连接路由器,还是 hostapd 搭建 AP 热点,都离不开命令行工具调试。应用代码、配置文件出问题时,优先使用命令行复现问题,区分问题属于:硬件固件、内核驱动、用户态组件、上层业务逻辑哪一层。
很多开发者只会使用ifconfig、iwlist scan这类老旧命令,不清楚iw工具(基于 nl80211,现代 Linux 标准工具)、wpa_cli、ip工具的完整能力;也分不清哪些命令已经废弃,哪些适合量产调试、哪些适合现场故障定位。
本章围绕 WiFi 开发高频工具:iw、iwlist、ip、wpa_cli,同时补充 hostapd_cli、日志查看、混杂 / 监听模式、故障定位组合命令。每个命令给出作用、示例、输出解读、量产工程场景、坑点说明。
环境说明:嵌入式 Linux,内核开启 cfg80211/nl80211;
iwlist属于 wireless‑tools 老工具,部分新系统已经不再默认编译;iw是新标准工具。
12.1 网卡基础信息查看(ip /iw)
12.1.1 ip 命令(替代老旧 ifconfig)
ip工具属于 iproute2 套件,现代 Linux 已经废弃 ifconfig,嵌入式根文件系统优先移植 ip。
# 查看所有网络设备,网卡状态、MAC地址
ip link show
# 启用wlan0网卡
ip link set wlan0 up
# 关闭wlan0网卡
ip link set wlan0 down
# 查看IP地址、子网、网关信息
ip addr show wlan0
# 设置静态IP地址
ip addr add 192.168.4.2/24 dev wlan0
# 删除静态IP
ip addr del 192.168.4.2/24 dev wlan0
# 查看路由表,排查数据包出口
ip route show
工程坑点
ip link set wlan0 up只是开启网卡硬件,不等于 WiFi 连接上路由器;WiFi 链路连接由 wpa_supplicant/hostapd 完成。- 网卡 down 之后,内核会清空 IP 地址,重新 up 需要重新获取 IP。
- 不要混用 ifconfig 与 ip,两套工具维护两套内核状态,容易出现状态不一致。
12.1.2 iw 查看无线硬件能力(非常关键)
排查网卡是否支持 AP 模式、支持哪些频段、信道、接口模式,优先执行这条命令。
iw list
重点解读输出片段:
Supported interface modes:
* IBSS
* managed # STA模式,作为客户端连接路由器
* AP # 支持AP热点模式;没有AP代表硬件固件不支持热点
* AP/VLAN
* monitor # 是否支持监听抓包模式
- 看不到
AP:就算 hostapd 配置完全正确,也无法启动热点,属于硬件 / 固件限制。 - 查看支持频段:2.4G、5G 信道列表、支持 HT/VHT (802.11n/ac) 能力。
- 查看国家码:
country code CN,没有国家码会导致信道、功率异常。
查看当前网卡工作模式:
iw dev
输出会显示网卡设备名、MAC、type(managed=STA,AP = 热点模式)。
量产调试技巧:业务代码异常,先执行
iw dev确认网卡实际工作模式,确认是 STA 还是 AP,排除上层配置没有真正下发内核。
12.2 WiFi 扫描命令:iw scan VS iwlist scan
扫描用于搜索周边 WiFi 热点,产品开发用于自动择优路由器、调试环境查看周边信道干扰情况。
12.2.1 iw scan(新标准,nl80211)
iw dev wlan0 scan
输出包含:SSID、BSSID (MAC)、信道、信号强度 RSSI、加密方式、HT/VHT 能力、country code。
⚠️重要现象:执行 scan 的时候,STA 网卡会短暂断开当前 WiFi 连接! 工程坑:产品业务运行中,业务线程不要频繁调用扫描,每一次 scan 会短暂断流,造成业务数据包卡顿、TCP 断开。 量产方案:扫描间隔至少 10s 以上,业务长连接场景尽量避开高频扫描。
过滤只看 SSID、信号,方便现场调试:
iw dev wlan0 scan | grep -E "SSID|signal|DS Parameter set"
12.2.2 iwlist scan(老工具 wireless‑tools)
iwlist wlan0 scan
注意:部分新内核已经移除 wireless‑tools,该命令不存在,不要把 iwlist 作为产品业务依赖。仅适合老嵌入式板子调试。
12.2.3 主动扫描与被动扫描命令区别
iw dev wlan0 scan:主动扫描,发送 Probe Request,获取完整热点列表。- 被动扫描没有直接用户层命令,由驱动固件内部完成。
12.2.4 只扫描指定频段
#只扫描2.4G
iw dev wlan0 scan freq 2412 2417 2422 2427 2432 2437 2442 2447
12.3 wpa_cli 实战:wpa_supplicant 交互式调试
wpa_cli是 wpa_supplicant 配套命令行交互客户端,STA 模式调试的核心工具。 开发 STA 连接路由器,不要直接写业务代码反复编译;先用 wpa_cli 命令行复现连接、断开、重连,确认驱动、WiFi 链路正常,再写应用程序。
12.3.1 基础操作
#进入交互终端
wpa_cli -i wlan0
# 查看当前状态,连接状态、ssid、bssid、ip
> status
# 添加网络配置,返回network id
> add_network
# 设置WiFi SSID
> set_network 0 ssid "MyWiFi"
# 设置WiFi密码
> set_network 0 psk "12345678"
# 启用这个网络配置
> enable_network 0
# 保存配置到wpa_supplicant.conf
> save_config
# 断开WiFi
> disconnect
# 重新连接
> reconnect
# 查看已保存的全部网络
> list_networks
# 删除指定network id
> remove_network 0
# 重新扫描周边WiFi
> scan
# 获取扫描结果
> scan_results
12.3.2 wpa_cli 非交互脚本模式(适合 shell 脚本自动化)
wpa_cli -i wlan0 status
wpa_cli -i wlan0 scan
wpa_cli -i wlan0 scan_results
12.3.3 工程定位典型现象
- status 输出
wpa_state=COMPLETED:WiFi 链路认证关联全部完成,但不代表拿到 IP,还要看 dhcp 是否成功。 - status 看到
wpa_state=DISCONNECTED:链路断开,查看日志看断开原因码。 - 调试流程:业务代码连接失败,用 wpa_cli 复现,如果 wpa_cli 同样连不上 → 驱动 /wifi 环境问题;wpa_cli 可以连上 → 上层业务代码问题。
坑:wpa_supplicant 没有启动的时候,wpa_cli 直接报错连接 socket 失败,需要确认守护进程运行。
12.4 hostapd_cli AP 热点调试命令(承接第 11 章)
对应 AP 模式,hostapd_cli 查看热点状态、接入客户端、踢除终端。
#查看全部接入STA客户端MAC、信号
hostapd_cli all_sta
#查看AP运行状态
hostapd_cli status
#强制踢掉某个MAC客户端
hostapd_cli deauthenticate aa:bb:cc:dd:ee:ff
#获取版本信息
hostapd_cli version
12.5 信号、链路质量查看命令
12.5.1 iw 获取当前连接信号 RSSI
iw dev wlan0 link
输出包含:连接的 BSSID、SSID、RSSI 信号强度、TX/RX 速率。
RSSI 负数,数值越大信号越好:‑40dBm 极好,‑65dBm 良好,‑80dBm 弱,‑85dB 以上极易掉线。
12.5.2 实时监控 WiFi 链路质量脚本示例
while true; do iw dev wlan0 link; sleep 1; done
现场测试移动设备,观察信号、协商速率实时变化,复现信号跌落、速率跳水现象。
12.6 混杂模式、监听模式(抓包前置)
注意:不是所有网卡驱动支持 monitor 监听模式,
iw list中出现monitor才支持无线抓包。
#停止wpa_supplicant/hostapd,关闭网卡
ip link set wlan0 down
# 设置为监听模式
iw dev wlan0 set type monitor
# 开启网卡
ip link set wlan0 up
恢复普通 STA managed 模式
ip link set wlan0 down
iw dev wlan0 set type managed
ip link set wlan0 up
工程注意:进入 monitor 模式之后,正常 WiFi 通信会失效,专门用于抓包调试,量产产品业务代码绝对不要打开监听模式。
12.7 日志与网络辅助排查命令
12.7.1 系统日志查看
#查看内核无线驱动日志
dmesg | grep -E "wlan|wifi|cfg80211|nl80211"
#实时跟踪日志
dmesg -w
驱动报错、firmware 加载失败、射频报错全部在这里打印。
12.7.2 DHCP 相关
很多情况 WiFi 链路已经连接成功,但是 DHCP 失败拿不到 IP,现象:wpa_supplicant 状态 COMPLETED,但是没有 IP 地址。
12.7.3 连通性测试 ping
ping -I wlan0 8.8.8.8
指定 WiFi 网卡出口,区分链路二层通不通、三层路由通不通。
12.8 高频故障排查组合命令(工程师现场定位模板)
场景 1:STA 模式连不上路由器排查顺序
#1.确认硬件模式
iw dev
#2.查看驱动内核日志
dmesg -w
#3.wpa_cli交互式测试连接
wpa_cli -i wlan0
#4.扫描周边热点,确认目标AP可以被扫描出来
iw dev wlan0 scan
#5.链路连接成功后,确认是否拿到IP
ip addr show wlan0
#6.ping测试三层连通
ping 网关IP
场景 2:AP 热点启动失败排查顺序
#1.确认硬件是否支持AP模式
iw list
#2.关闭占用网卡的wpa_supplicant
killall wpa_supplicant
#3.打开hostapd详细日志启动
hostapd -ddd /etc/hostapd.conf
场景 3:WiFi 连接成功,但是速率低、卡顿
#持续观察信号、协商速率
while true;do iw dev wlan0 link;sleep 1;done
#查看周边信道干扰
iw dev wlan0 scan
12.9 量产开发避坑总结
- 新 Linux 平台优先使用
iw+iproute2,尽量不要依赖ifconfig、iwlist老旧工具;老板子兼容可以保留 wireless‑tools。 - 扫描 scan 操作会短暂断开 WiFi 链路,业务运行严禁高频扫描。
wpa_state=COMPLETED只代表 802.11 链路完成,不等于获取 IP、不等于网络通,还要检查 DHCP、路由。- monitor 监听模式仅用于调试抓包,产品业务不能开启。
- 遇到 WiFi 异常,优先命令行复现,定位故障分层:硬件固件→内核驱动→wpa_supplicant/hostapd→上层业务应用,不要一上来就改业务代码。
- shell 脚本自动化测试,优先使用非交互模式
wpa_cli -i xxx command,不要使用交互模式。
12.10 本章小结
本章整理嵌入式 Linux WiFi 开发全套实战命令,分为网卡基础、WiFi 扫描、wpa_cli STA 调试、hostapd_cli AP 调试、信号查看、监听模式、日志排查。 实际项目中,命令行是排障第一手段,把问题复现在命令行,才能快速区分硬件驱动问题和业务代码 bug。熟练掌握这套工具,能解决 80% 以上嵌入式 WiFi 前期调试问题。
💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!