《WiFi 嵌入式物联网开发全套实战》| 第 12 章 Linux 系统 WiFi 常用命令全集:iw/iwlist/ip/wpa_cli 实战

专栏:《WiFi 嵌入式物联网开发全套实战》 专栏定位:嵌入式 Linux/ESP32 WiFi 从原理→驱动→配网→协议→稳定性→抓包调试→量产优化全套工业实战 适配:物联网设备、智能家居、工控网关、无线透传设备、4G+WiFi 双模设备 💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!

本章前言

在嵌入式 Linux WiFi 开发过程中,不管是 STA 连接路由器,还是 hostapd 搭建 AP 热点,都离不开命令行工具调试。应用代码、配置文件出问题时,优先使用命令行复现问题,区分问题属于:硬件固件、内核驱动、用户态组件、上层业务逻辑哪一层。

很多开发者只会使用ifconfigiwlist scan这类老旧命令,不清楚iw工具(基于 nl80211,现代 Linux 标准工具)、wpa_cliip工具的完整能力;也分不清哪些命令已经废弃,哪些适合量产调试、哪些适合现场故障定位。

本章围绕 WiFi 开发高频工具:iwiwlistipwpa_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

工程坑点

  1. ip link set wlan0 up 只是开启网卡硬件,不等于 WiFi 连接上路由器;WiFi 链路连接由 wpa_supplicant/hostapd 完成。
  2. 网卡 down 之后,内核会清空 IP 地址,重新 up 需要重新获取 IP。
  3. 不要混用 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 工程定位典型现象

  1. status 输出wpa_state=COMPLETED:WiFi 链路认证关联全部完成,但不代表拿到 IP,还要看 dhcp 是否成功。
  2. status 看到wpa_state=DISCONNECTED:链路断开,查看日志看断开原因码。
  3. 调试流程:业务代码连接失败,用 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 量产开发避坑总结

  1. 新 Linux 平台优先使用 iw + iproute2,尽量不要依赖ifconfigiwlist老旧工具;老板子兼容可以保留 wireless‑tools。
  2. 扫描 scan 操作会短暂断开 WiFi 链路,业务运行严禁高频扫描
  3. wpa_state=COMPLETED只代表 802.11 链路完成,不等于获取 IP、不等于网络通,还要检查 DHCP、路由。
  4. monitor 监听模式仅用于调试抓包,产品业务不能开启。
  5. 遇到 WiFi 异常,优先命令行复现,定位故障分层:硬件固件→内核驱动→wpa_supplicant/hostapd→上层业务应用,不要一上来就改业务代码。
  6. shell 脚本自动化测试,优先使用非交互模式wpa_cli -i xxx command,不要使用交互模式。

12.10 本章小结

本章整理嵌入式 Linux WiFi 开发全套实战命令,分为网卡基础、WiFi 扫描、wpa_cli STA 调试、hostapd_cli AP 调试、信号查看、监听模式、日志排查。 实际项目中,命令行是排障第一手段,把问题复现在命令行,才能快速区分硬件驱动问题和业务代码 bug。熟练掌握这套工具,能解决 80% 以上嵌入式 WiFi 前期调试问题。

💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!

相关推荐
wuminyu1 小时前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++
IT小白杨1 小时前
跨境电商账号关联归因链路拆解与可落地环境配置
服务器·网络·经验分享·安全·指纹浏览器
运维全栈笔记1 小时前
Nginx 模块化多业务站点通用配置模板
linux·运维·nginx
织元Zmetaboard1 小时前
5类大屏可视化工具怎么选?按数据、交互和部署条件比较
物联网·信息可视化·三维可视化·数据可视化·大屏
辰域电子1 小时前
STM32项目开源:智能插座控制系统(代码 + 原理图 + 仿真)
stm32·单片机·嵌入式硬件·开源·51单片机·proteus
网硕互联的小客服1 小时前
可以把服务器当成DNS服务器使用吗?如何操作?
运维·服务器·网络
辛迪聊物业数字化1 小时前
【拆解智慧物业管理系统架构:从SaaS落地到IoT全链路实现】
大数据·linux·组合模式
贝锐1 小时前
120米布线困局,10分钟无线破局:蒲公英E80工厂物联网实测
物联网·工业·dtu
IMPYLH1 小时前
HTML 的 <small> 元素
前端·网络·html