我有一块运行 Linux 的 iMX8MP 板。该板配备了具有 AP-STA 功能的 Wifi 模块。我希望这个系统在启动时启动一个接入点,并在提供凭据后连接到外部 wifi,而不会杀死 AP。 AP 使用 hostapd 启动:
#!/bin/bash
modprobe brcmfmac
iw dev wlan0 interface add wlan1 type __ap
ifconfig wlan1 192.168.3.1 up
udhcpd /etc/udhcpd.conf
hostapd /etc/myhostapd.conf
与 wifi 的连接是使用 wpa_supplicant 完成的(NetworkManager 不可用):
ifconfig wlan0 up
wpa_supplicant -c /home/root/wpa.conf -i wlan0 -B # in questo momento il cliento
udhcpc -i wlan0 -b
现在,当开发板连接到 WiFi 时,之前连接到 AP 的每个客户端都会保持连接,并且仍然能够 ping 开发板。同时,该板可以 ping 客户端和互联网。但是,新客户端无法连接到 AP。唯一的方法是重新启动hostapd。
我尝试使用 Wireshark 来调查这个问题,在 AP SSID 上使用过滤器。当板运行 hostapd 时(但在调用 wpa_supplicant 之前),会定期捕获以下数据包:
No. Time Source Destination Protocol Length Info
32410 709.786863608 LsResear_6b:3f:17 Broadcast 802.11 204 Beacon frame, SN=150, FN=0, Flags=........, BI=100, SSID=MY-AP-SSID
32268 707.492592614 LsResear_6b:3f:17 72:23:3e:ee:74:61 802.11 198 Probe Response, SN=123, FN=0, Flags=....R..., BI=100, SSID=MY-AP-SSID
32098 705.310088818 LsResear_6b:3f:17 IntelCor_b5:58:ec 802.11 198 Probe Response, SN=92, FN=0, Flags=....R..., BI=100, SSID=MY-AP-SSID
32002 704.240712766 LsResear_6b:3f:17 AlpsElec_31:89:ab 802.11 198 Probe Response, SN=73, FN=0, Flags=....R..., BI=100, SSID=MY-AP-SSID
当wpa_supplicant启动时,会捕获一次以下数据包,然后不再捕获任何数据包。
801 15.307033347 Azurewav_1c:29:49 Broadcast 802.11 244 Probe Request, SN=3025, FN=0, Flags=........, SSID=MY-AP-SSID
此时没有新客户端可以连接到 AP,但已连接的客户端没有问题。如果我重新启动 AP,新客户端就可以连接。在重新启动期间,上面报告的一些周期性数据包会被捕获几秒钟,但随后就会停止。如果我也杀死 wpa_supplicant,周期性数据包就会回来。
我该如何解决这个问题?我可以在不重新启动 AP 的情况下连接到 wifi 吗?