4. Wi-Fi 工具链:wpa_supplicant、hostapd、iw、ifconfig、iwconfig 等工具详解
做嵌入式 Wi-Fi 开发,说白了就是跟这几个工具打交道。我刚开始接触 Tina Linux 时,面对一堆命令行工具也懵过——哪个负责连网?哪个负责扫信号?哪个用来配 IP?
后来踩的坑多了,慢慢就摸清了门道。今天我把这套工具链掰开揉碎讲清楚。你想想看,搞 Wi-Fi 调试,本质上就三件事:扫描、连接、配置。每个工具都有自己的定位。
4.1 wpa_supplicant:Wi-Fi 客户端的灵魂
wpa_supplicant 是 Linux 上最主流的 Wi-Fi 客户端守护进程。它负责扫描、认证、密钥协商和连接管理。说白了,你手机连 Wi-Fi 时后台跑的那套逻辑,在嵌入式 Linux 上就是 wpa_supplicant 干的。
我在项目中遇到过最典型的问题:设备连不上企业级 WPA2-Enterprise 网络。查了半天,发现是 wpa_supplicant 编译时没开 EAP 支持。嗯,这个坑后面会细说。
4.1.1 启动与配置文件
启动命令很简单,但参数有讲究:
# 前台调试模式(强烈推荐调试时用)
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -dd
# 后台守护进程模式
wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
参数说明:
| 参数 | 含义 | 我的建议 |
|---|---|---|
| -D nl80211 | 指定驱动接口 | 新芯片首选,wext 已过时 |
| -i wlan0 | 网络接口名 | 确认 ifconfig 能查到再指定 |
| -c 配置文件 | 指定配置路径 | 路径写错是新手常见问题 |
| -dd | 双倍调试级别 | 我调试时必加,信息最全 |
| -B | 后台运行 | 产品发布时用,调试别用 |
-dd 前台跑,看到 "CTRL-EVENT-CONNECTED" 日志后再切到后台模式。这样能第一时间发现驱动或配置问题。
4.1.2 配置文件核心写法
配置文件是 wpa_supplicant 的核心。我见过太多人把 Windows 上的配网思维带过来,结果连不上。来看几个典型场景:
# 场景一:开放式网络(无密码)
network={
ssid="MyHomeWiFi"
key_mgmt=NONE
}
# 场景二:WPA2-PSK(家用最常见)
network={
ssid="MyHomeWiFi"
psk="mypassword123"
key_mgmt=WPA-PSK
}
# 场景三:隐藏 SSID(需要主动扫描)
network={
ssid="HiddenNet"
psk="secret123"
scan_ssid=1
key_mgmt=WPA-PSK
}
# 场景四:WPA2-Enterprise(公司网络)
network={
ssid="CorpWiFi"
key_mgmt=WPA-EAP
eap=PEAP
identity="user@company.com"
password="mypass"
phase2="auth=MSCHAPV2"
}
4.1.3 wpa_cli:交互式调试利器
wpa_cli 是 wpa_supplicant 的配套工具。我调试时几乎离不开它:
# 进入交互模式
wpa_cli -i wlan0
> scan # 触发扫描
> scan_results # 查看扫描结果
> add_network # 添加新网络(返回网络ID)
> set_network 0 ssid "MyWiFi"
> set_network 0 psk "mypass"
> enable_network 0 # 启用并连接
> status # 查看连接状态
> save_config # 保存配置到文件
> quit
为什么我推荐 wpa_cli?因为它能实时看到事件通知。比如你连不上时,它会直接告诉你 "4-Way Handshake failed"——比看日志快多了。
4.2 hostapd:让设备变身热点
hostapd 是 wpa_supplicant 的镜像工具。一个负责连网,一个负责建网。在 Tina Linux 里,做 Wi-Fi 热点或中继模式时必用。
我记得第一次配 hostapd 时,AP 死活起不来。后来发现是驱动没开 AP 模式支持——不是 hostapd 的问题,是内核配置的问题。
4.2.1 最小化配置
# /etc/hostapd.conf
interface=wlan0
driver=nl80211
ssid=TinaAP
hw_mode=g
channel=6
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
关键参数解读:
| 参数 | 说明 | 常见坑 |
|---|---|---|
| hw_mode | a=5GHz, g=2.4GHz, b=2.4GHz | 芯片不支持5GHz时设a会失败 |
| channel | 信道号,0表示自动 | 某些国家码限制信道使用 |
| wpa_passphrase | 密码,8-63字符 | 少于8位直接报错 |
| rsn_pairwise | 加密方式,CCMP是WPA2 | 老设备可能只支持TKIP |
hostapd -B /etc/hostapd.conf。调试时去掉 -B,前台跑能看到实时日志。如果报 "nl80211: Could not configure driver mode",八成是驱动不支持 AP 模式。
4.3 iw:新一代无线配置工具
iw 是 iwconfig 的替代品,基于 nl80211。我强烈建议新项目直接用 iw,别碰 iwconfig 了。
4.3.1 常用操作
# 扫描周围AP(最常用)
iw dev wlan0 scan
# 查看连接状态
iw dev wlan0 link
# 查看接口信息
iw dev wlan0 info
# 设置信道(AP模式时用)
iw dev wlan0 set channel 6
# 查看支持的频段
iw phy phy0 channels
# 查看TX功率
iw dev wlan0 get power_save
我个人最常用的是 iw dev wlan0 link——它能直接告诉你信号强度、连接速率、认证方式。比 ifconfig 那点信息有用多了。
4.3.2 iw 与 iwconfig 对比
| 功能 | iw | iwconfig |
|---|---|---|
| 扫描 | iw dev wlan0 scan | iwlist wlan0 scan |
| 查看连接 | iw dev wlan0 link | iwconfig wlan0 |
| 设置信道 | iw dev wlan0 set channel | iwconfig wlan0 channel |
| 接口层 | nl80211 | wext(已废弃) |
| 新特性支持 | 完整 | 有限 |
4.4 ifconfig:网络接口配置老将
ifconfig 虽然老,但 Tina Linux 里依然广泛使用。它主要负责 IP 层配置,不涉及 Wi-Fi 细节。
# 启用接口
ifconfig wlan0 up
# 配置静态IP
ifconfig wlan0 192.168.1.100 netmask 255.255.255.0
# 查看接口状态
ifconfig wlan0
# 获取IP(配合udhcpc)
udhcpc -i wlan0
这里有个细节:ifconfig wlan0 up 只是让接口从软件层面启用,但 Wi-Fi 射频是否真正开启,取决于驱动和 wpa_supplicant 的状态。我见过有人 ifconfig up 后以为 Wi-Fi 已经开了,结果扫描全是空的——其实 wpa_supplicant 还没跑起来。
4.5 工具链协同工作流程
这几个工具不是各干各的。它们配合起来才能完成一次完整的 Wi-Fi 连接。我画了个流程图:
- ifconfig wlan0 up → 启用网络接口
- wpa_supplicant -B -i wlan0 → 启动连接管理守护进程
- wpa_supplicant 自动扫描 → 根据配置文件匹配已知网络
- wpa_supplicant 完成认证 → 4次握手,获取连接
- udhcpc -i wlan0 → 通过 DHCP 获取 IP 地址
- ifconfig wlan0 → 验证 IP 是否分配成功
- iw dev wlan0 link → 确认信号强度和连接质量
4.6 我的调试工具箱
最后分享几个我常用的调试组合拳:
| 场景 | 命令组合 | 说明 |
|---|---|---|
| 扫描不到AP | iw dev wlan0 scan + dmesg | 看驱动有没有报错 |
| 连不上AP | wpa_cli status + wpa_supplicant -dd | 看握手阶段失败在哪 |
| 连上但没网 | ifconfig + route -n + ping | 检查IP和网关 |
| 热点起不来 | hostapd -dd + iw dev wlan0 info | 看模式是否支持AP |
| 信号弱 | iw dev wlan0 link + iw dev wlan0 survey dump | 看信号强度和信道干扰 |
嗯,这套工具链说复杂也复杂,说简单也简单。核心就一句话:wpa_supplicant 管连接,hostapd 管热点,iw 管查看,ifconfig 管 IP。搞清楚了各自的分工,调试起来就顺手多了。